diff options
author | Nathan Binkert <nate@binkert.org> | 2010-03-22 18:43:53 -0700 |
---|---|---|
committer | Nathan Binkert <nate@binkert.org> | 2010-03-22 18:43:53 -0700 |
commit | 5ab13e2deb8f904ef2a233749193fa09ea7013c4 (patch) | |
tree | 07f5f02902f9e719fe58d1a9419b5a1d51f7a2ce /src/mem/ruby/filters/MultiBitSelBloomFilter.cc | |
parent | 2620e08722b38660658d46cdb76c337db18e877c (diff) | |
download | gem5-5ab13e2deb8f904ef2a233749193fa09ea7013c4.tar.xz |
ruby: style pass
Diffstat (limited to 'src/mem/ruby/filters/MultiBitSelBloomFilter.cc')
-rw-r--r-- | src/mem/ruby/filters/MultiBitSelBloomFilter.cc | 219 |
1 files changed, 113 insertions, 106 deletions
diff --git a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc index 844f80160..1fe316800 100644 --- a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc +++ b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc @@ -1,4 +1,3 @@ - /* * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood * All rights reserved. @@ -27,165 +26,173 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * NonCountingBloomFilter.cc - * - * Description: - * - * - */ - -#include "mem/ruby/filters/MultiBitSelBloomFilter.hh" #include "mem/gems_common/Map.hh" #include "mem/ruby/common/Address.hh" +#include "mem/ruby/filters/MultiBitSelBloomFilter.hh" MultiBitSelBloomFilter::MultiBitSelBloomFilter(string str) { + string tail(str); + string head = string_split(tail, '_'); - string tail(str); - string head = string_split(tail, '_'); - - // head contains filter size, tail contains bit offset from block number - m_filter_size = atoi(head.c_str()); + // head contains filter size, tail contains bit offset from block number + m_filter_size = atoi(head.c_str()); - head = string_split(tail, '_'); - m_num_hashes = atoi(head.c_str()); + head = string_split(tail, '_'); + m_num_hashes = atoi(head.c_str()); - head = string_split(tail, '_'); - m_skip_bits = atoi(head.c_str()); + head = string_split(tail, '_'); + m_skip_bits = atoi(head.c_str()); - if(tail == "Regular") { - isParallel = false; - } else if (tail == "Parallel") { - isParallel = true; - } else { - cout << "ERROR: Incorrect config string for MultiBitSel Bloom! :" << str << endl; - assert(0); - } + if(tail == "Regular") { + isParallel = false; + } else if (tail == "Parallel") { + isParallel = true; + } else { + cout << "ERROR: Incorrect config string for MultiBitSel Bloom! :" + << str << endl; + assert(0); + } - m_filter_size_bits = log_int(m_filter_size); + m_filter_size_bits = log_int(m_filter_size); - m_par_filter_size = m_filter_size/m_num_hashes; - m_par_filter_size_bits = log_int(m_par_filter_size); + m_par_filter_size = m_filter_size/m_num_hashes; + m_par_filter_size_bits = log_int(m_par_filter_size); - m_filter.setSize(m_filter_size); - clear(); + m_filter.setSize(m_filter_size); + clear(); } -MultiBitSelBloomFilter::~MultiBitSelBloomFilter(){ +MultiBitSelBloomFilter::~MultiBitSelBloomFilter() +{ } -void MultiBitSelBloomFilter::clear() +void +MultiBitSelBloomFilter::clear() { - for (int i = 0; i < m_filter_size; i++) { - m_filter[i] = 0; - } + for (int i = 0; i < m_filter_size; i++) { + m_filter[i] = 0; + } } -void MultiBitSelBloomFilter::increment(const Address& addr) +void +MultiBitSelBloomFilter::increment(const Address& addr) { - // Not used + // Not used } -void MultiBitSelBloomFilter::decrement(const Address& addr) +void +MultiBitSelBloomFilter::decrement(const Address& addr) { - // Not used + // Not used } -void MultiBitSelBloomFilter::merge(AbstractBloomFilter * other_filter){ - // assumes both filters are the same size! - MultiBitSelBloomFilter * temp = (MultiBitSelBloomFilter*) other_filter; - for(int i=0; i < m_filter_size; ++i){ - m_filter[i] |= (*temp)[i]; - } - +void +MultiBitSelBloomFilter::merge(AbstractBloomFilter *other_filter) +{ + // assumes both filters are the same size! + MultiBitSelBloomFilter * temp = (MultiBitSelBloomFilter*) other_filter; + for(int i = 0; i < m_filter_size; ++i){ + m_filter[i] |= (*temp)[i]; + } } -void MultiBitSelBloomFilter::set(const Address& addr) +void +MultiBitSelBloomFilter::set(const Address& addr) { - for (int i = 0; i < m_num_hashes; i++) { - int idx = get_index(addr, i); - m_filter[idx] = 1; - - //Profile hash value distribution - //g_system_ptr->getProfiler()->getXactProfiler()->profileHashValue(i, idx); //gem5:Arka for decomissioning of log_tm - } + for (int i = 0; i < m_num_hashes; i++) { + int idx = get_index(addr, i); + m_filter[idx] = 1; + } } -void MultiBitSelBloomFilter::unset(const Address& addr) +void +MultiBitSelBloomFilter::unset(const Address& addr) { - cout << "ERROR: Unset should never be called in a Bloom filter"; - assert(0); + cout << "ERROR: Unset should never be called in a Bloom filter"; + assert(0); } -bool MultiBitSelBloomFilter::isSet(const Address& addr) +bool +MultiBitSelBloomFilter::isSet(const Address& addr) { - bool res = true; + bool res = true; - for (int i=0; i < m_num_hashes; i++) { - int idx = get_index(addr, i); - res = res && m_filter[idx]; - } - return res; + for (int i=0; i < m_num_hashes; i++) { + int idx = get_index(addr, i); + res = res && m_filter[idx]; + } + return res; } - -int MultiBitSelBloomFilter::getCount(const Address& addr) +int +MultiBitSelBloomFilter::getCount(const Address& addr) { - return isSet(addr)? 1: 0; + return isSet(addr)? 1: 0; } -int MultiBitSelBloomFilter::getIndex(const Address& addr) +int +MultiBitSelBloomFilter::getIndex(const Address& addr) { - return 0; + return 0; } -int MultiBitSelBloomFilter::readBit(const int index) { - return 0; +int +MultiBitSelBloomFilter::readBit(const int index) +{ + return 0; } -void MultiBitSelBloomFilter::writeBit(const int index, const int value) { - +void +MultiBitSelBloomFilter::writeBit(const int index, const int value) +{ } -int MultiBitSelBloomFilter::getTotalCount() +int +MultiBitSelBloomFilter::getTotalCount() { - int count = 0; + int count = 0; - for (int i = 0; i < m_filter_size; i++) { - count += m_filter[i]; - } - return count; + for (int i = 0; i < m_filter_size; i++) { + count += m_filter[i]; + } + return count; } -void MultiBitSelBloomFilter::print(ostream& out) const +void +MultiBitSelBloomFilter::print(ostream& out) const { } -int MultiBitSelBloomFilter::get_index(const Address& addr, int i) +int +MultiBitSelBloomFilter::get_index(const Address& addr, int i) { - // m_skip_bits is used to perform BitSelect after skipping some bits. Used to simulate BitSel hashing on larger than cache-line granularities - uint64 x = (addr.getLineAddress()) >> m_skip_bits; - int y = hash_bitsel(x, i, m_num_hashes, 30, m_filter_size_bits); - //36-bit addresses, 6-bit cache lines - - if(isParallel) { - return (y % m_par_filter_size) + i*m_par_filter_size; - } else { - return y % m_filter_size; - } -} - - -int MultiBitSelBloomFilter::hash_bitsel(uint64 value, int index, int jump, int maxBits, int numBits) { - uint64 mask = 1; - int result = 0; - int bit, i; - - for(i = 0; i < numBits; i++) { - bit = (index + jump*i) % maxBits; - if (value & (mask << bit)) result += mask << i; - } - return result; + // m_skip_bits is used to perform BitSelect after skipping some + // bits. Used to simulate BitSel hashing on larger than cache-line + // granularities + uint64 x = (addr.getLineAddress()) >> m_skip_bits; + int y = hash_bitsel(x, i, m_num_hashes, 30, m_filter_size_bits); + //36-bit addresses, 6-bit cache lines + + if (isParallel) { + return (y % m_par_filter_size) + i*m_par_filter_size; + } else { + return y % m_filter_size; + } +} + +int +MultiBitSelBloomFilter::hash_bitsel(uint64 value, int index, int jump, + int maxBits, int numBits) +{ + uint64 mask = 1; + int result = 0; + int bit, i; + + for (i = 0; i < numBits; i++) { + bit = (index + jump*i) % maxBits; + if (value & (mask << bit)) result += mask << i; + } + return result; } |