ruby: bloom filters: refactor code
authorNilay Vaish <nilay@cs.wisc.edu>
Wed, 23 Sep 2015 16:23:10 +0000 (11:23 -0500)
committerNilay Vaish <nilay@cs.wisc.edu>
Wed, 23 Sep 2015 16:23:10 +0000 (11:23 -0500)
17 files changed:
src/mem/protocol/RubySlicc_Types.sm
src/mem/ruby/SConscript
src/mem/ruby/filters/BlockBloomFilter.cc
src/mem/ruby/filters/BlockBloomFilter.hh
src/mem/ruby/filters/BulkBloomFilter.cc
src/mem/ruby/filters/BulkBloomFilter.hh
src/mem/ruby/filters/GenericBloomFilter.cc [deleted file]
src/mem/ruby/filters/GenericBloomFilter.hh [deleted file]
src/mem/ruby/filters/H3BloomFilter.cc
src/mem/ruby/filters/H3BloomFilter.hh
src/mem/ruby/filters/LSB_CountingBloomFilter.cc
src/mem/ruby/filters/LSB_CountingBloomFilter.hh
src/mem/ruby/filters/MultiGrainBloomFilter.cc
src/mem/ruby/filters/MultiGrainBloomFilter.hh
src/mem/ruby/filters/NonCountingBloomFilter.cc
src/mem/ruby/filters/NonCountingBloomFilter.hh
src/mem/ruby/filters/SConscript

index a8bf93bccc33e687d2f2211acb05e81a52fd3b16..8e846098c433018c6698c316e835c0b876f9d4f6 100644 (file)
@@ -186,7 +186,7 @@ structure (TimerTable, inport="yes", external = "yes") {
   bool isSet(Addr);
 }
 
-structure (GenericBloomFilter, external = "yes") {
+structure (AbstractBloomFilter, external = "yes") {
   void clear(int);
   void increment(Addr, int);
   void decrement(Addr, int);
index 091f550607fc8401bddf8a371259e059767c64df..2ab9c024f3840e99753d09743add2a5a04b6183b 100644 (file)
@@ -119,7 +119,7 @@ MakeInclude('common/DataBlock.hh')
 MakeInclude('common/MachineID.hh')
 MakeInclude('common/NetDest.hh')
 MakeInclude('common/Set.hh')
-MakeInclude('filters/GenericBloomFilter.hh')
+MakeInclude('filters/AbstractBloomFilter.hh')
 MakeInclude('network/MessageBuffer.hh')
 MakeInclude('structures/Prefetcher.hh')
 MakeInclude('structures/CacheMemory.hh')
index 94e748d6e9b6a402fa895e0f37e651fb89c2d4a8..a453c373feb7efd01bdd885947d41e191b2532cb 100644 (file)
 
 using namespace std;
 
-BlockBloomFilter::BlockBloomFilter(string str)
+BlockBloomFilter::BlockBloomFilter(int size)
 {
-    string head, tail;
-
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(str, head, tail, '_');
-
-    assert(success);
-
-    m_filter_size = atoi(head.c_str());
+    m_filter_size = size;
     m_filter_size_bits = floorLog2(m_filter_size);
 
     m_filter.resize(m_filter_size);
index d45dd236b7ff5fa392daaebc3a0101a1f3a0f4da..8e6a94fa1f46a12a5d5f014fa9f0d3a34b81c4a0 100644 (file)
@@ -30,7 +30,6 @@
 #define __MEM_RUBY_FILTERS_BLOCKBLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
@@ -39,7 +38,7 @@
 class BlockBloomFilter : public AbstractBloomFilter
 {
   public:
-    BlockBloomFilter(std::string config);
+    BlockBloomFilter(int size);
     ~BlockBloomFilter();
 
     void clear();
@@ -64,7 +63,6 @@ class BlockBloomFilter : public AbstractBloomFilter
     std::vector<int> m_filter;
     int m_filter_size;
     int m_filter_size_bits;
-
 };
 
 #endif // __MEM_RUBY_FILTERS_BLOCKBLOOMFILTER_HH__
index c656776a4a636d7674600476ccaa6fa6bc39a2fe..478871a402981fd6d2d407f2d764308b41e0becd 100644 (file)
 
 using namespace std;
 
-BulkBloomFilter::BulkBloomFilter(string str)
+BulkBloomFilter::BulkBloomFilter(int size)
 {
-    string head, tail;
-
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(str, head, tail, '_');
-    assert(success);
-
-    m_filter_size = atoi(head.c_str());
+    m_filter_size = size;
     m_filter_size_bits = floorLog2(m_filter_size);
     // split the filter bits in half, c0 and c1
     m_sector_bits = m_filter_size_bits - 1;
index 8b67c718e9351a0b75a2027ce305089b57922ff8..059f8b17acd750e27fd8fac8fabf93cb64f3f396 100644 (file)
@@ -30,7 +30,6 @@
 #define __MEM_RUBY_FILTERS_BULKBLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
@@ -39,7 +38,7 @@
 class BulkBloomFilter : public AbstractBloomFilter
 {
   public:
-    BulkBloomFilter(std::string config);
+    BulkBloomFilter(int size);
     ~BulkBloomFilter();
 
     void clear();
diff --git a/src/mem/ruby/filters/GenericBloomFilter.cc b/src/mem/ruby/filters/GenericBloomFilter.cc
deleted file mode 100644 (file)
index 3d4cb9e..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "base/str.hh"
-#include "mem/ruby/common/Address.hh"
-#include "mem/ruby/filters/BlockBloomFilter.hh"
-#include "mem/ruby/filters/BulkBloomFilter.hh"
-#include "mem/ruby/filters/GenericBloomFilter.hh"
-#include "mem/ruby/filters/H3BloomFilter.hh"
-#include "mem/ruby/filters/LSB_CountingBloomFilter.hh"
-#include "mem/ruby/filters/MultiBitSelBloomFilter.hh"
-#include "mem/ruby/filters/MultiGrainBloomFilter.hh"
-#include "mem/ruby/filters/NonCountingBloomFilter.hh"
-
-using namespace std;
-
-GenericBloomFilter::GenericBloomFilter(string config)
-{
-    string head, tail;
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(config, head, tail, '_');
-    assert(success);
-
-    if (head == "LSB_Counting" ) {
-        m_filter = new LSB_CountingBloomFilter(tail);
-    } else if(head == "NonCounting" ) {
-        m_filter = new NonCountingBloomFilter(tail);
-    } else if(head == "Bulk" ) {
-        m_filter = new BulkBloomFilter(tail);
-    } else if(head == "Block") {
-        m_filter = new BlockBloomFilter(tail);
-    } else if(head == "Multigrain"){
-        m_filter = new MultiGrainBloomFilter(tail);
-    } else if(head == "MultiBitSel"){
-        m_filter = new MultiBitSelBloomFilter(tail);
-    } else if(head == "H3"){
-        m_filter = new H3BloomFilter(tail);
-    } else {
-        assert(0);
-    }
-}
-
-GenericBloomFilter::~GenericBloomFilter()
-{
-    delete m_filter;
-}
-
-void
-GenericBloomFilter::clear()
-{
-    m_filter->clear();
-}
-
-void
-GenericBloomFilter::increment(Addr addr)
-{
-    m_filter->increment(addr);
-}
-
-void
-GenericBloomFilter::decrement(Addr addr)
-{
-    m_filter->decrement(addr);
-}
-
-void
-GenericBloomFilter::merge(GenericBloomFilter * other_filter)
-{
-    m_filter->merge(other_filter->getFilter());
-}
-
-void
-GenericBloomFilter::set(Addr addr)
-{
-    m_filter->set(addr);
-}
-
-void
-GenericBloomFilter::unset(Addr addr)
-{
-    m_filter->unset(addr);
-}
-
-bool
-GenericBloomFilter::isSet(Addr addr)
-{
-    return m_filter->isSet(addr);
-}
-
-int
-GenericBloomFilter::getCount(Addr addr)
-{
-    return m_filter->getCount(addr);
-}
-
-int
-GenericBloomFilter::getTotalCount()
-{
-    return m_filter->getTotalCount();
-}
-
-int
-GenericBloomFilter::getIndex(Addr addr)
-{
-    return m_filter->getIndex(addr);
-}
-
-int
-GenericBloomFilter::readBit(const int index)
-{
-    return m_filter->readBit(index);
-}
-
-void
-GenericBloomFilter::writeBit(const int index, const int value)
-{
-    m_filter->writeBit(index, value);
-}
-
-void
-GenericBloomFilter::print(ostream& out) const
-{
-    return m_filter->print(out);
-}
-
-
diff --git a/src/mem/ruby/filters/GenericBloomFilter.hh b/src/mem/ruby/filters/GenericBloomFilter.hh
deleted file mode 100644 (file)
index 869c40b..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met: redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer;
- * redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution;
- * neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MEM_RUBY_FILTERS_GENERICBLOOMFILTER_HH__
-#define __MEM_RUBY_FILTERS_GENERICBLOOMFILTER_HH__
-
-#include <iostream>
-#include <string>
-
-#include "mem/ruby/common/Address.hh"
-#include "mem/ruby/filters/AbstractBloomFilter.hh"
-
-class GenericBloomFilter
-{
-  public:
-    GenericBloomFilter(std::string config);
-    ~GenericBloomFilter();
-
-    void clear();
-    void increment(Addr addr);
-    void decrement(Addr addr);
-    void merge(GenericBloomFilter * other_filter);
-    void set(Addr addr);
-    void unset(Addr addr);
-    AbstractBloomFilter *
-    getFilter()
-    {
-        return m_filter;
-    }
-
-    bool isSet(Addr addr);
-
-    int getCount(Addr addr);
-
-    int getTotalCount();
-
-    int getIndex(Addr addr);
-    int readBit(const int index);
-    void writeBit(const int index, const int value);
-
-    void print(std::ostream& out) const;
-
-  private:
-    AbstractBloomFilter* m_filter;
-};
-
-inline std::ostream&
-operator<<(std::ostream& out, const GenericBloomFilter& obj)
-{
-    obj.print(out);
-    out << std::flush;
-    return out;
-}
-
-#endif // __MEM_RUBY_FILTERS_GENERICBLOOMFILTER_HH__
index b0d27778208248941449739bdc4808898a9ab5f2..5d6a9558fa61664a749623e62d22b72ea8b26dda 100644 (file)
@@ -27,7 +27,6 @@
  */
 
 #include "base/intmath.hh"
-#include "base/str.hh"
 #include "mem/ruby/filters/H3BloomFilter.hh"
 
 using namespace std;
@@ -354,7 +353,7 @@ static int H3[64][16] = {
       394261773,  848616745,  15446017,   517723271,  },
 };
 
-H3BloomFilter::H3BloomFilter(string str)
+H3BloomFilter::H3BloomFilter(int size, int hashes, bool parallel)
 {
     //TODO: change this ugly init code...
     primes_list[0] = 9323;
@@ -378,21 +377,9 @@ H3BloomFilter::H3BloomFilter(string str)
     adds_list[4] = 7777;
     adds_list[5] = 65931;
 
-    vector<string> items;
-    tokenize(items, str, '_');
-    assert(items.size() == 3);
-
-    // head contains filter size, tail contains bit offset from block number
-    m_filter_size = atoi(items[0].c_str());
-    m_num_hashes = atoi(items[1].c_str());
-
-    if (items[2] == "Regular") {
-        isParallel = false;
-    } else if (items[2] == "Parallel") {
-        isParallel = true;
-    } else {
-        panic("ERROR: Incorrect config string for MultiHash Bloom! :%s", str);
-    }
+    m_filter_size = size;
+    m_num_hashes = hashes;
+    isParallel = parallel;
 
     m_filter_size_bits = floorLog2(m_filter_size);
 
index b6628f5e1668169a5979e506a96595f7cb4fa27e..443487faccbe23a30e16378fe4c14fa908365ad5 100644 (file)
 #define __MEM_RUBY_FILTERS_H3BLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
-#include "mem/ruby/common/TypeDefines.hh"
 #include "mem/ruby/filters/AbstractBloomFilter.hh"
 
 class H3BloomFilter : public AbstractBloomFilter
 {
   public:
-    H3BloomFilter(std::string config);
+    H3BloomFilter(int size, int hashes, bool parallel);
     ~H3BloomFilter();
 
     void clear();
index 1c2d4fea6eccf4fa9a8b0f551f215629e27ac020..eaac5c4a25f55eb6c85f182a2aef756f6fad8e74 100644 (file)
  */
 
 #include "base/intmath.hh"
-#include "base/str.hh"
 #include "mem/ruby/filters/LSB_CountingBloomFilter.hh"
 #include "mem/ruby/system/RubySystem.hh"
 
 using namespace std;
 
-LSB_CountingBloomFilter::LSB_CountingBloomFilter(string str)
+LSB_CountingBloomFilter::LSB_CountingBloomFilter(int head, int tail)
 {
-    string head, tail;
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(str, head, tail, '_');
-    assert(success);
-
-    m_filter_size = atoi(head.c_str());
+    m_filter_size = head;
     m_filter_size_bits = floorLog2(m_filter_size);
 
-    m_count = atoi(tail.c_str());
+    m_count = tail;
     m_count_bits = floorLog2(m_count);
 
     m_filter.resize(m_filter_size);
index 2f23896e22b75c7c01e5da66b677716756933ae2..e0e263ae6e42776cd0e725efaedff712d3f8f69a 100644 (file)
@@ -30,7 +30,6 @@
 #define __MEM_RUBY_FILTERS_LSBCOUNTINGBLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
@@ -39,7 +38,7 @@
 class LSB_CountingBloomFilter : public AbstractBloomFilter
 {
   public:
-    LSB_CountingBloomFilter(std::string config);
+    LSB_CountingBloomFilter(int head, int tail);
     ~LSB_CountingBloomFilter();
 
     void clear();
index 52aae0b55ba16cbaff13e768a42eae816a04a99b..a6642ab7bf7dd7dccf761bdfb3130f1085816e31 100644 (file)
 
 using namespace std;
 
-MultiGrainBloomFilter::MultiGrainBloomFilter(string str)
+MultiGrainBloomFilter::MultiGrainBloomFilter(int head, int tail)
 {
-    string head, tail;
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(str, head, tail, '_');
-    assert(success);
-
     // head contains size of 1st bloom filter, tail contains size of
     // 2nd bloom filter
-
-    m_filter_size = atoi(head.c_str());
+    m_filter_size = head;
     m_filter_size_bits = floorLog2(m_filter_size);
 
-    m_page_filter_size = atoi(tail.c_str());
+    m_page_filter_size = tail;
     m_page_filter_size_bits = floorLog2(m_page_filter_size);
 
     m_filter.resize(m_filter_size);
index ceb364a4966a85b7859ebb2b5e40f7aab7c26348..e4c83957deaec02d8ef91194885e05f7ffddd119 100644 (file)
@@ -30,7 +30,6 @@
 #define __MEM_RUBY_FILTERS_MULTIGRAINBLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
@@ -39,7 +38,7 @@
 class MultiGrainBloomFilter : public AbstractBloomFilter
 {
   public:
-    MultiGrainBloomFilter(std::string str);
+    MultiGrainBloomFilter(int head, int tail);
     ~MultiGrainBloomFilter();
 
     void clear();
index a8d00c8d7a13842c77252c9f7cccb4f84bb7771b..d949d02c485db6087317115fd444cbdbe7a4741c 100644 (file)
 
 using namespace std;
 
-NonCountingBloomFilter::NonCountingBloomFilter(string str)
+NonCountingBloomFilter::NonCountingBloomFilter(int head, int tail)
 {
-    string head, tail;
-#ifndef NDEBUG
-    bool success =
-#endif
-        split_first(str, head, tail, '_');
-    assert(success);
-
     // head contains filter size, tail contains bit offset from block number
-    m_filter_size = atoi(head.c_str());
-    m_offset = atoi(tail.c_str());
+    m_filter_size = head;
+    m_offset = tail;
     m_filter_size_bits = floorLog2(m_filter_size);
 
     m_filter.resize(m_filter_size);
index a092cd6676d3a1ce380e5b311d2693c20c4b20fc..b0599e74b9da5e24b427f09425002274abbe2546 100644 (file)
@@ -30,7 +30,6 @@
 #define __MEM_RUBY_FILTERS_NONCOUNTINGBLOOMFILTER_HH__
 
 #include <iostream>
-#include <string>
 #include <vector>
 
 #include "mem/ruby/common/Address.hh"
@@ -39,7 +38,7 @@
 class NonCountingBloomFilter : public AbstractBloomFilter
 {
   public:
-    NonCountingBloomFilter(std::string config);
+    NonCountingBloomFilter(int head, int tail);
     ~NonCountingBloomFilter();
 
     void clear();
index adfe214c007421e200275c87a5e323fbd18ac2b8..5b7e583340b32ab21e30bc555d8bc4883cfef064 100644 (file)
@@ -35,7 +35,6 @@ if env['PROTOCOL'] == 'None':
 
 Source('BlockBloomFilter.cc')
 Source('BulkBloomFilter.cc')
-Source('GenericBloomFilter.cc')
 Source('H3BloomFilter.cc')
 Source('LSB_CountingBloomFilter.cc')
 Source('MultiBitSelBloomFilter.cc')