Daniel Carvalho has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/18738
Change subject: mem-ruby: Remove Bloom Filters' ruby dependency
......................................................................
mem-ruby: Remove Bloom Filters' ruby dependency
Substitute the common ruby header by base's bitfield to
eliminate all ruby dependency in Bloom Filters.
As a side note, BulkBloomFilter now assumes addresses are
64 bit long.
Change-Id: Ibdb1f926ddcc06c848851c1e6a34863541808360
Signed-off-by: Daniel R. Carvalho <[email protected]>
---
M src/mem/ruby/filters/BlockBloomFilter.cc
M src/mem/ruby/filters/BulkBloomFilter.cc
M src/mem/ruby/filters/H3BloomFilter.cc
M src/mem/ruby/filters/LSB_CountingBloomFilter.cc
M src/mem/ruby/filters/MultiBitSelBloomFilter.cc
M src/mem/ruby/filters/MultiGrainBloomFilter.cc
M src/mem/ruby/filters/NonCountingBloomFilter.cc
7 files changed, 36 insertions(+), 41 deletions(-)
diff --git a/src/mem/ruby/filters/BlockBloomFilter.cc
b/src/mem/ruby/filters/BlockBloomFilter.cc
index 827d146..bbc4527 100644
--- a/src/mem/ruby/filters/BlockBloomFilter.cc
+++ b/src/mem/ruby/filters/BlockBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/BlockBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/BlockBloomFilter.hh"
BlockBloomFilter::BlockBloomFilter(const BlockBloomFilterParams* p)
@@ -64,10 +64,10 @@
// Pull out some bit field ==> B1
// Pull out additional bits, not the same as B1 ==> B2
// XOR B1 and B2 to get hash index
- Addr block_bits = bitSelect(addr, blkBits, 2 * blkBits - 1);
+ Addr block_bits = bits(addr, 2 * blkBits - 1, blkBits);
int offset = 5;
- Addr other_bits = bitSelect(addr, 2 * blkBits + offset,
- 2 * blkBits + offset + sizeBits - 1);
+ Addr other_bits =
+ bits(addr, 2 * blkBits + offset + sizeBits - 1, 2 * blkBits +
offset);
int index = block_bits ^ other_bits;
assert(index < filter.size());
return index;
diff --git a/src/mem/ruby/filters/BulkBloomFilter.cc
b/src/mem/ruby/filters/BulkBloomFilter.cc
index 08bc1b5..88de4c8 100644
--- a/src/mem/ruby/filters/BulkBloomFilter.cc
+++ b/src/mem/ruby/filters/BulkBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/BulkBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/BulkBloomFilter.hh"
BulkBloomFilter::BulkBloomFilter(const BulkBloomFilterParams* p)
@@ -44,12 +44,11 @@
BulkBloomFilter::set(Addr addr)
{
// c0 contains the cache index bits
- int set_bits = sectorBits;
- int c0 = bitSelect(addr, blkBits, blkBits + set_bits - 1);
+ int c0 = bits(addr, blkBits + sectorBits - 1, blkBits);
// c1 contains the lower sectorBits permuted bits
//Address permuted_bits = permute(addr);
- //int c1 = permuted_bits.bitSelect(0, set_bits-1);
- int c1 = bitSelect(addr, blkBits+set_bits, (blkBits+2*set_bits) - 1);
+ //int c1 = permuted_bits.bitSelect(0, sectorBits-1);
+ int c1 = bits(addr, (blkBits + 2 * sectorBits) - 1, blkBits +
sectorBits);
//assert(c0 < (filter_size/2));
//assert(c0 + (filter_size/2) < filter_size);
//assert(c1 < (filter_size/2));
@@ -64,12 +63,11 @@
{
// c0 contains the cache index bits
const int filter_size = filter.size();
- int set_bits = sectorBits;
- int c0 = bitSelect(addr, blkBits, blkBits + set_bits - 1);
+ int c0 = bits(addr, blkBits + sectorBits - 1, blkBits);
// c1 contains the lower 10 permuted bits
//Address permuted_bits = permute(addr);
- //int c1 = permuted_bits.bitSelect(0, set_bits-1);
- int c1 = bitSelect(addr, blkBits+set_bits, (blkBits+2*set_bits) - 1);
+ //int c1 = permuted_bits.bitSelect(0, sectorBits-1);
+ int c1 = bits(addr, (blkBits + 2 * sectorBits) - 1, blkBits +
sectorBits);
//assert(c0 < (filter_size/2));
//assert(c0 + (filter_size/2) < filter_size);
//assert(c1 < (filter_size/2));
@@ -127,27 +125,25 @@
BulkBloomFilter::hash(Addr addr) const
{
// permutes the original address bits according to Table 5
- Addr part1 = bitSelect(addr, blkBits, blkBits + 6),
- part2 = bitSelect(addr, blkBits + 9, blkBits + 9),
- part3 = bitSelect(addr, blkBits + 11, blkBits + 11),
- part4 = bitSelect(addr, blkBits + 17, blkBits + 17),
- part5 = bitSelect(addr, blkBits + 7, blkBits + 8),
- part6 = bitSelect(addr, blkBits + 10, blkBits + 10),
- part7 = bitSelect(addr, blkBits + 12, blkBits + 12),
- part8 = bitSelect(addr, blkBits + 13, blkBits + 13),
- part9 = bitSelect(addr, blkBits + 15, blkBits + 16),
- part10 = bitSelect(addr, blkBits + 18, blkBits + 20),
- part11 = bitSelect(addr, blkBits + 14, blkBits + 14);
+ Addr part1 = bits(addr, blkBits + 6, blkBits),
+ part2 = bits(addr, blkBits + 9),
+ part3 = bits(addr, blkBits + 11),
+ part4 = bits(addr, blkBits + 17),
+ part5 = bits(addr, blkBits + 8, blkBits + 7),
+ part6 = bits(addr, blkBits + 10),
+ part7 = bits(addr, blkBits + 12),
+ part8 = bits(addr, blkBits + 13),
+ part9 = bits(addr, blkBits + 16, blkBits + 15),
+ part10 = bits(addr, blkBits + 20, blkBits + 18),
+ part11 = bits(addr, blkBits + 14);
Addr result =
(part1 << 14) | (part2 << 13) | (part3 << 12) | (part4 << 11) |
(part5 << 9) | (part6 << 8) | (part7 << 7) | (part8 << 6) |
(part9 << 4) | (part10 << 1) | (part11);
- // assume 32 bit addresses (both virtual and physical)
- // select the remaining high-order 11 bits
- Addr remaining_bits =
- bitSelect(addr, blkBits + 21, 31) << 21;
+ // Select the remaining high-order bits
+ Addr remaining_bits = bits(addr, sizeof(Addr) * 8 - 1, blkBits + 21)
<< 21;
result = result | remaining_bits;
return result;
diff --git a/src/mem/ruby/filters/H3BloomFilter.cc
b/src/mem/ruby/filters/H3BloomFilter.cc
index d71b7d0..fd4cc68 100644
--- a/src/mem/ruby/filters/H3BloomFilter.cc
+++ b/src/mem/ruby/filters/H3BloomFilter.cc
@@ -29,7 +29,7 @@
#include "mem/ruby/filters/H3BloomFilter.hh"
#include "base/logging.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/H3BloomFilter.hh"
static int H3[64][16] = {
@@ -396,7 +396,7 @@
int
H3BloomFilter::hash(Addr addr, int hash_number) const
{
- uint64_t x = maskLowOrderBits(addr, blkBits);
+ uint64_t x = bits(addr, 63, blkBits);
int y = hashH3(x, hash_number);
if (isParallel) {
diff --git a/src/mem/ruby/filters/LSB_CountingBloomFilter.cc
b/src/mem/ruby/filters/LSB_CountingBloomFilter.cc
index 758410a..150da11 100644
--- a/src/mem/ruby/filters/LSB_CountingBloomFilter.cc
+++ b/src/mem/ruby/filters/LSB_CountingBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/LSB_CountingBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/LSB_CountingBloomFilter.hh"
LSB_CountingBloomFilter::LSB_CountingBloomFilter(
@@ -66,7 +66,7 @@
int
LSB_CountingBloomFilter::hash(Addr addr) const
{
- return bitSelect(addr, blkBits, blkBits + sizeBits - 1);
+ return bits(addr, blkBits + sizeBits - 1, blkBits);
}
LSB_CountingBloomFilter*
diff --git a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
index 6642ba2..5f6b2a6 100644
--- a/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
+++ b/src/mem/ruby/filters/MultiBitSelBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/MultiBitSelBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/MultiBitSelBloomFilter.hh"
MultiBitSelBloomFilter::MultiBitSelBloomFilter(
@@ -76,7 +76,7 @@
int
MultiBitSelBloomFilter::hash(Addr addr, int hash_number) const
{
- uint64_t x = (maskLowOrderBits(addr, blkBits) >> skipBits);
+ uint64_t x = bits(addr, 63, blkBits) >> skipBits;
int y = hashBitsel(x, hash_number, numHashes, 30, sizeBits);
//36-bit addresses, 6-bit cache lines
diff --git a/src/mem/ruby/filters/MultiGrainBloomFilter.cc
b/src/mem/ruby/filters/MultiGrainBloomFilter.cc
index 000e996..0cf2e20 100644
--- a/src/mem/ruby/filters/MultiGrainBloomFilter.cc
+++ b/src/mem/ruby/filters/MultiGrainBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/MultiGrainBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/MultiGrainBloomFilter.hh"
MultiGrainBloomFilter::MultiGrainBloomFilter(
@@ -87,16 +87,16 @@
MultiGrainBloomFilter::hash(Addr addr) const
{
// grap a chunk of bits after byte offset
- return bitSelect(addr, blkBits, blkBits + sizeBits - 1);
+ return bits(addr, blkBits + sizeBits - 1, blkBits);
}
int
MultiGrainBloomFilter::pageHash(Addr addr) const
{
- int bits = blkBits + sizeBits - 1;
+ int num_bits = blkBits + sizeBits - 1;
// grap a chunk of bits after first chunk
- return bitSelect(addr, bits, bits + pageFilterSizeBits - 1);
+ return bits(addr, num_bits + pageFilterSizeBits - 1, num_bits);
}
MultiGrainBloomFilter*
diff --git a/src/mem/ruby/filters/NonCountingBloomFilter.cc
b/src/mem/ruby/filters/NonCountingBloomFilter.cc
index 5cb38bb..45382c8 100644
--- a/src/mem/ruby/filters/NonCountingBloomFilter.cc
+++ b/src/mem/ruby/filters/NonCountingBloomFilter.cc
@@ -28,7 +28,7 @@
#include "mem/ruby/filters/NonCountingBloomFilter.hh"
-#include "mem/ruby/common/Address.hh"
+#include "base/bitfield.hh"
#include "params/NonCountingBloomFilter.hh"
NonCountingBloomFilter::NonCountingBloomFilter(
@@ -72,8 +72,7 @@
int
NonCountingBloomFilter::hash(Addr addr) const
{
- return bitSelect(addr, blkBits + skipBits,
- blkBits + skipBits + sizeBits - 1);
+ return bits(addr, blkBits + skipBits + sizeBits - 1, blkBits +
skipBits);
}
NonCountingBloomFilter*
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/18738
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ibdb1f926ddcc06c848851c1e6a34863541808360
Gerrit-Change-Number: 18738
Gerrit-PatchSet: 1
Gerrit-Owner: Daniel Carvalho <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev