mem-ruby: Standardize Bloom Filter deletion support
authorDaniel R. Carvalho <odanrc@yahoo.com.br>
Wed, 8 May 2019 09:54:41 +0000 (11:54 +0200)
committerDaniel Carvalho <odanrc@yahoo.com.br>
Sat, 6 Jul 2019 22:55:32 +0000 (22:55 +0000)
Standard Bloom Filters do not support element deletion by default,
however some variants do. Allow calling the unset function with
all filters, and do nothing by default.

Change-Id: Icf4b0f8b997c4c70fa714b2576474810275db78b
Signed-off-by: Daniel R. Carvalho <odanrc@yahoo.com.br>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18730
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
12 files changed:
src/mem/ruby/filters/AbstractBloomFilter.hh
src/mem/ruby/filters/BlockBloomFilter.hh
src/mem/ruby/filters/BulkBloomFilter.cc
src/mem/ruby/filters/BulkBloomFilter.hh
src/mem/ruby/filters/H3BloomFilter.cc
src/mem/ruby/filters/H3BloomFilter.hh
src/mem/ruby/filters/LSB_CountingBloomFilter.hh
src/mem/ruby/filters/MultiBitSelBloomFilter.cc
src/mem/ruby/filters/MultiBitSelBloomFilter.hh
src/mem/ruby/filters/MultiGrainBloomFilter.cc
src/mem/ruby/filters/MultiGrainBloomFilter.hh
src/mem/ruby/filters/NonCountingBloomFilter.hh

index 51c5e92b2a064962508967671a8df0eec584dfc1..6da4a9d535c230a5b9d041dd5912e3f3b5fc7f53 100644 (file)
@@ -40,7 +40,15 @@ class AbstractBloomFilter
     virtual void clear() = 0;
     virtual void merge(AbstractBloomFilter * other_filter) = 0;
     virtual void set(Addr addr) = 0;
-    virtual void unset(Addr addr) = 0;
+
+    /**
+     * Perform the filter specific function to clear the corresponding
+     * entries (can be multiple) of an address. By default a bloom
+     * filter does not support element deletion.
+     *
+     * @param addr The address being parsed.
+     */
+    virtual void unset(Addr addr) {};
 
     virtual bool isSet(Addr addr) = 0;
     virtual int getCount(Addr addr) = 0;
index bd24aa66a54348d8bc83276716a75406d055d618..d015e1e0e501388920e3c1498e219888df626b24 100644 (file)
@@ -44,7 +44,7 @@ class BlockBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index 4a80d538a8e3bf74cd21288fb489043cdd188092..a7e02781fab410deb07f21c3b61d017e6ffb8e87 100644 (file)
@@ -91,12 +91,6 @@ BulkBloomFilter::set(Addr addr)
     m_filter[c1] = 1;
 }
 
-void
-BulkBloomFilter::unset(Addr addr)
-{
-    // not used
-}
-
 bool
 BulkBloomFilter::isSet(Addr addr)
 {
index 231622125e82780c912bd849e9750c850d5174f2..683bbe14c7922261c7c482e2822aaf4c049cd572 100644 (file)
@@ -44,7 +44,6 @@ class BulkBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index 91aa1685726af76d3de5a0f25c6b142961510c14..6fa182f9a60f7c4dc6527607335c531beb4fe6c9 100644 (file)
@@ -423,12 +423,6 @@ H3BloomFilter::set(Addr addr)
     }
 }
 
-void
-H3BloomFilter::unset(Addr addr)
-{
-    panic("ERROR: Unset should never be called in a Bloom filter");
-}
-
 bool
 H3BloomFilter::isSet(Addr addr)
 {
index efbdec3417585098aed3e856b26f907fdbf99299..b9890e7b655d9e0be59a96ffef650d58148b6c8b 100644 (file)
@@ -44,7 +44,6 @@ class H3BloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index 48e83805ac1cb4ecc1f715acf7b44c53cdd92681..03602a381cb377a19a8258775fd4aba6b76af14c 100644 (file)
@@ -44,7 +44,7 @@ class LSB_CountingBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index f46442ecedab4155d835066e1416328f3498d1cc..3dc392f8bc9f351e8a6ae10d9ad2c5ae9d024533 100644 (file)
@@ -78,12 +78,6 @@ MultiBitSelBloomFilter::set(Addr addr)
     }
 }
 
-void
-MultiBitSelBloomFilter::unset(Addr addr)
-{
-    panic("ERROR: Unset should never be called in a Bloom filter");
-}
-
 bool
 MultiBitSelBloomFilter::isSet(Addr addr)
 {
index 315e2725fae0dd7929b0cda9c9146d1cd4a56bdc..1f652b2a4dd5084159783c6f034d3b2c3a9cb027 100644 (file)
@@ -46,7 +46,6 @@ class MultiBitSelBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index 5f541b5a82e2cf60d18d08e58a72509161648eae..fef8fa8206a591d528fef8d378cc8cab41f5c1e8 100644 (file)
@@ -81,12 +81,6 @@ MultiGrainBloomFilter::set(Addr addr)
 
 }
 
-void
-MultiGrainBloomFilter::unset(Addr addr)
-{
-    // not used
-}
-
 bool
 MultiGrainBloomFilter::isSet(Addr addr)
 {
index 8bfd39b46365d4b3d8581e951a8b1d5598cff5b9..c2329273f6e41de69ad2478d5e00acae6d4235d0 100644 (file)
@@ -44,7 +44,6 @@ class MultiGrainBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
 
     bool isSet(Addr addr);
     int getCount(Addr addr);
index bdd05db3aa906366363cfd81ffd095bb5e3351e8..9d1ad0067bc32a50cebe8c7aafe7be134c7dc176 100644 (file)
@@ -44,7 +44,7 @@ class NonCountingBloomFilter : public AbstractBloomFilter
     void clear();
     void merge(AbstractBloomFilter * other_filter);
     void set(Addr addr);
-    void unset(Addr addr);
+    void unset(Addr addr) override;
 
     bool isSet(Addr addr);
     int getCount(Addr addr);