gem5  v22.1.0.0
h3_bloom_filter.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Inria
3  * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are
8  * met: redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer;
10  * redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution;
13  * neither the name of the copyright holders nor the names of its
14  * contributors may be used to endorse or promote products derived from
15  * this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29 
31 
32 #include <limits>
33 
34 #include "base/bitfield.hh"
35 #include "base/logging.hh"
36 #include "params/BloomFilterH3.hh"
37 
38 namespace gem5
39 {
40 
41 GEM5_DEPRECATED_NAMESPACE(BloomFilter, bloom_filter);
42 namespace bloom_filter
43 {
44 
45 static int H3Matrix[64][16] = {
46  { 33268410, 395488709, 311024285, 456111753,
47  181495008, 119997521, 220697869, 433891432,
48  755927921, 515226970, 719448198, 349842774,
49  269183649, 463275672, 429800228, 521598937, },
50 
51  { 628677802, 820947732, 809435975, 1024657192,
52  887631270, 412050215, 391365090, 324227279,
53  318338329, 1038393087, 489807930, 387366128,
54  518096428, 324184340, 429376066, 447109279, },
55 
56  { 599747653, 404960623, 103933604, 946416030,
57  656460913, 925957005, 1047665689, 163552053,
58  88359290, 841315415, 899833584, 1067336680,
59  348549994, 464045876, 270252128, 829897652, },
60 
61  { 215495230, 966696438, 82589012, 750102795,
62  909780866, 920285789, 769759214, 331966823,
63  939936006, 439950703, 883794828, 1009277508,
64  61634610, 741444350, 98689608, 524144422, },
65 
66  { 93868534, 196958667, 774076619, 327921978,
67  122538783, 879785030, 690748527, 3498564,
68  83163077, 1027963025, 582088444, 466152216,
69  312424878, 550064499, 646612667, 561099434, },
70 
71  { 1002047931, 395477707, 821317480, 890482112,
72  697094476, 263813044, 840275189, 469664185,
73  795625845, 211504898, 99204277, 1004491153,
74  725930417, 1064479221, 893834767, 839719181, },
75 
76  { 278507126, 985111995, 706462983, 1042178726,
77  123281719, 963778122, 500881056, 726291104,
78  134293026, 568379664, 317050609, 533470307,
79  1022365922, 197645211, 315125721, 634827678, },
80 
81  { 219227366, 553960647, 870169525, 322232839,
82  508322497, 648672696, 249405795, 883596102,
83  476433133, 541372919, 646647793, 1042679515,
84  43242483, 600187508, 499866821, 135713210, },
85 
86  { 52837162, 96966684, 401840460, 1071661176,
87  733560065, 150035417, 341319946, 811582750,
88  636173904, 519054065, 196321433, 1028294565,
89  882204070, 522965093, 48884074, 117810166, },
90 
91  { 650860353, 789534698, 328813544, 473250022,
92  143128306, 173196006, 846958825, 174632187,
93  683273509, 405459497, 787235556, 773873501,
94  240110267, 426797736, 92043842, 711789240, },
95 
96  { 586637493, 5059646, 398035664, 6686087,
97  498300175, 948278148, 681227731, 592751744,
98  572019677, 558044722, 589368271, 695745538,
99  1073416749, 529192035, 550984939, 1070620580, },
100 
101  { 102904663, 647598516, 758863940, 313426443,
102  76504114, 1050747783, 708436441, 563815069,
103  224107668, 875925186, 167675944, 926209739,
104  279737287, 1040288182, 768184312, 371708956, },
105 
106  { 683968868, 1027427757, 180781926, 742898864,
107  624078545, 645659833, 577225838, 987150210,
108  723410002, 224013421, 993286634, 33188488,
109  247264323, 888018697, 38048664, 189037096, },
110 
111  { 475612146, 426739285, 873726278, 529192871,
112  607715202, 388486246, 987001312, 474493980,
113  259747270, 417465536, 217062395, 392858482,
114  563810075, 137852805, 1051814153, 72895217, },
115 
116  { 71277086, 785496675, 500608842, 89633426,
117  274085706, 248467935, 838061983, 48106147,
118  773662506, 49545328, 9071573, 100739031,
119  602018002, 904371654, 534132064, 332211304, },
120 
121  { 401893602, 735125342, 775548339, 210224843,
122  256081130, 482894412, 350801633, 1035713633,
123  429458128, 327281409, 739927752, 359327650,
124  886942880, 847691759, 752417993, 359445596, },
125 
126  { 267472014, 1050659620, 1068232362, 1049684368,
127  17130239, 690524969, 793224378, 14455158,
128  423092885, 873853424, 430535778, 7867877,
129  309731959, 370260786, 862353083, 403906850, },
130 
131  { 993077283, 218812656, 389234651, 393202875,
132  413116501, 263300295, 470013158, 592730725,
133  441847172, 732392823, 407574059, 875664777,
134  271347307, 792954404, 554774761, 1022424300, },
135 
136  { 675919719, 637054073, 784720745, 149714381,
137  813144874, 502525801, 635436670, 1003196587,
138  160786091, 947509775, 969788637, 26854073,
139  257964369, 63898568, 539767732, 772364518, },
140 
141  { 943076868, 1021732472, 697575075, 15843624,
142  617573396, 534113303, 122953324, 964873912,
143  942995378, 87830944, 1012914818, 455484661,
144  592160054, 599844284, 810394353, 836812568, },
145 
146  { 688992674, 279465370, 731582262, 687883235,
147  438178468, 80493001, 342701501, 663561405,
148  23360106, 531315007, 508931618, 36294623,
149  231216223, 840438413, 255665680, 663205938, },
150 
151  { 857265418, 552630887, 8173237, 792122963,
152  210140052, 823124938, 667709953, 751538219,
153  991957789, 462064153, 19070176, 726604748,
154  714567823, 151147895, 1012619677, 697114353, },
155 
156  { 467105652, 683256174, 702387467, 28730434,
157  549942998, 48712701, 960519696, 1008345587,
158  679267717, 370932249, 880419471, 352141567,
159  331640403, 598772468, 95160685, 812053015, },
160 
161  { 1053491323, 430526562, 1014938507, 109685515,
162  765949103, 177288303, 1034642653, 485421658,
163  71850281, 981034542, 61620389, 601367920,
164  504420930, 220599168, 583051998, 158735752, },
165 
166  { 103033901, 522494916, 658494760, 959206022,
167  931348143, 834510661, 21542994, 189699884,
168  679327018, 171983002, 96774168, 456133168,
169  543103352, 923945936, 970074188, 643658485, },
170 
171  { 566379913, 805798263, 840662512, 820206124,
172  796507494, 223712542, 118811519, 662246595,
173  809326534, 416471323, 748027186, 161169753,
174  739149488, 276330378, 924837051, 964873733, },
175 
176  { 585882743, 135502711, 3386031, 625631285,
177  1068193307, 270342640, 432739484, 556606453,
178  826419155, 1038540977, 158000202, 69109538,
179  207087256, 298111218, 678046259, 184611498, },
180 
181  { 305310710, 46237988, 855726974, 735975153,
182  930663798, 425764232, 104362407, 391371443,
183  867622101, 71645091, 61824734, 661902640,
184  293738633, 309416189, 281710675, 879317360, },
185 
186  { 398146324, 398293087, 689145387, 1038451703,
187  521637478, 516134620, 314658937, 830334981,
188  583400300, 340083705, 68029852, 675389876,
189  994635780, 788959180, 406967042, 74403607, },
190 
191  { 69463153, 744427484, 191639960, 590927798,
192  969916795, 546846769, 728756758, 889355646,
193  520855076, 136068426, 776132410, 189663815,
194  252051082, 533662856, 362198652, 1026161384, },
195 
196  { 584984279, 1004834381, 568439705, 834508761,
197  21812513, 670870173, 1052043300, 341868768,
198  473755574, 124339439, 36193947, 437997647,
199  137419489, 58705193, 337793711, 340738909, },
200 
201  { 898051466, 512792906, 234874060, 655358775,
202  683745319, 671676404, 428888546, 639928192,
203  672697722, 176477579, 747020991, 758211282,
204  443045009, 205395173, 1016944273, 5584717, },
205 
206  { 156038300, 138620174, 588466825, 1061494056,
207  1013672100, 1064257198, 881417791, 839470738,
208  83519030, 100875683, 237486447, 461483733,
209  681527127, 777996147, 574635362, 815974538, },
210 
211  { 184168473, 519509808, 62531892, 51821173,
212  43787358, 385711644, 141325169, 36069511,
213  584183031, 571372909, 671503175, 226486781,
214  194932686, 1045460970, 753718579, 331442433, },
215 
216  { 73065106, 1015327221, 630916840, 1058053470,
217  306737587, 296343219, 907194989, 920172546,
218  224516225, 818625553, 551143849, 634570650,
219  432966225, 756438259, 939564853, 767999933, },
220 
221  { 884775648, 394862257, 446787794, 219833788,
222  727195727, 728122304, 249888353, 732947974,
223  289908868, 448282580, 618161877, 898939716,
224  739554163, 860631799, 1058977530, 86916736, },
225 
226  { 143850006, 352708694, 200194048, 979764914,
227  629404175, 546279766, 72106714, 860980514,
228  313190585, 897143111, 308425797, 953791785,
229  349924906, 221457005, 950588925, 908254505, },
230 
231  { 950032043, 829868728, 68623614, 714624605,
232  69760597, 297275854, 355894016, 985369737,
233  882852618, 864071289, 958512902, 950910111,
234  991368991, 829645051, 434698210, 771350575, },
235 
236  { 552695074, 319195551, 80297396, 496413831,
237  944046531, 621525571, 617653363, 416729825,
238  441842808, 9847464, 99420657, 1033914550,
239  812966458, 937053011, 673390195, 934577365, },
240 
241  { 1034695843, 190969665, 332900185, 51897434,
242  523888639, 883512843, 146908572, 506785674,
243  565814307, 692255649, 314052926, 826386588,
244  430691325, 866927620, 413880214, 936474339, },
245 
246  { 129380164, 741739952, 1013703462, 494392795,
247  957214600, 1010879043, 931790677, 94551922,
248  988065869, 120637871, 882506912, 395075379,
249  210570485, 812422692, 910383687, 817722285, },
250 
251  { 51850866, 283408630, 1053047202, 858940389,
252  818507731, 477082181, 353546901, 993324368,
253  407093779, 231608253, 1067319867, 73159811,
254  429792535, 971320614, 565699344, 718823399, },
255 
256  { 408185106, 491493570, 596050720, 310776444,
257  703628192, 454438809, 523988035, 728512200,
258  686012353, 976339656, 72816924, 116926720,
259  165866591, 452043792, 866943072, 968545481, },
260 
261  { 443231195, 905907843, 1061421320, 746360489,
262  1043120338, 1069659155, 463359031, 688303227,
263  186550710, 155347339, 1044842421, 1005904570,
264  69332909, 706951903, 422513657, 882038450, },
265 
266  { 430990623, 946501980, 742556791, 278398643,
267  183759217, 659404315, 279754382, 1069347846,
268  843746517, 222777670, 990835599, 548741637,
269  129220580, 1392170, 1032654091, 894058935, },
270 
271  { 452042227, 751640705, 259481376, 765824585,
272  145991469, 1013683228, 1055491225, 536379588,
273  392593350, 913368594, 1029429776, 226857786,
274  31505342, 1054416381, 32341741, 687106649, },
275 
276  { 404750944, 811417027, 869530820, 773491060,
277  810901282, 979340397, 1036910290, 461764404,
278  834235095, 765695033, 604692390, 452158120,
279  928988098, 442719218, 1024059719, 167723114, },
280 
281  { 974245177, 1046377300, 1003424287, 787349855,
282  336314155, 875074696, 1018462718, 890313003,
283  367376809, 86355556, 1020618772, 890710345,
284  444741481, 373230261, 767064947, 840920177, },
285 
286  { 719581124, 431808156, 138301690, 668222575,
287  497413494, 740492013, 485033226, 125301442,
288  831265111, 879071459, 341690480, 152975256,
289  850330086, 717444507, 694225877, 785340566, },
290 
291  { 1032766252, 140959364, 737474726, 1062767538,
292  364464647, 331414723, 356152634, 642832379,
293  158733632, 374691640, 285504811, 345349905,
294  876599880, 476392727, 479589210, 606376325, },
295 
296  { 174997730, 778177086, 319164313, 163614456,
297  10331364, 599358958, 8331663, 237538058,
298  159173957, 174533880, 65588684, 878222844,
299  424467599, 901803515, 187504218, 776690353, },
300 
301  { 803856182, 965850321, 694948067, 218315960,
302  358416571, 683713254, 178069303, 428076035,
303  686176454, 579553217, 357306738, 315018080,
304  886852373, 568563910, 896839725, 257416821, },
305 
306  { 401650013, 183289141, 497957228, 879734476,
307  265024455, 825794561, 889237440, 323359863,
308  100258491, 991414783, 313986632, 85847250,
309  362520248, 276103512, 1041630342, 525981595, },
310 
311  { 487732740, 46201705, 990837834, 62744493,
312  1067364756, 58015363, 690846283, 680262648,
313  997278956, 469357861, 432164624, 996763915,
314  211907847, 167824295, 144928194, 454839915, },
315 
316  { 41404232, 514493300, 259546924, 578217256,
317  972345130, 123299213, 346040332, 1014668104,
318  520910639, 579955198, 36627803, 179072921,
319  547684341, 598950511, 269497394, 854352266, },
320 
321  { 603906768, 100863318, 708837659, 204175569,
322  375560904, 908375384, 28314106, 6303733,
323  175283124, 749851198, 308667367, 415293931,
324  225365403, 1032188331, 977112710, 819705229, },
325 
326  { 399767123, 697985692, 356790426, 643687584,
327  298624218, 185095167, 381653926, 876816342,
328  296720023, 2205879, 235816616, 521850105,
329  622753786, 1021421218, 726349744, 256504902, },
330 
331  { 851245024, 1022500222, 511909628, 313809625,
332  99776025, 39710175, 798739932, 741832408,
333  140631966, 898295927, 607660421, 870669312,
334  1051422478, 789055529, 669113756, 681943450, },
335 
336  { 853872755, 491465269, 503341472, 98019440,
337  258267420, 335602837, 320687824, 1053324395,
338  24932389, 955011453, 934255131, 435625663,
339  501568768, 238967025, 549987406, 248619780, },
340 
341  { 411151284, 576471205, 757985419, 544137226,
342  968135693, 877548443, 194586894, 74882373,
343  248353663, 21207540, 273789651, 853653916,
344  861267970, 533253322, 3739570, 661358586, },
345 
346  { 271430986, 71390029, 257643671, 949329860,
347  348156406, 251939238, 445808698, 48269799,
348  907589462, 105677619, 635451508, 20805932,
349  464874661, 7542147, 243619464, 288304568, },
350 
351  { 368215982, 530288964, 770090421, 660961164,
352  614935537, 630760399, 931299233, 794519275,
353  779918979, 401746493, 561237006, 1027202224,
354  258968003, 339508073, 1050610516, 1064307013, },
355 
356  { 1039172162, 448331205, 928997884, 49813151,
357  198712120, 992335354, 671024050, 879525220,
358  745915336, 1038822580, 138669665, 917958819,
359  681422342, 792868818, 924762727, 816386174, },
360 
361  { 515190336, 313808618, 441296783, 1022120897,
362  792325033, 354387581, 59273006, 280075434,
363  411357221, 665274694, 4054464, 1059046246,
364  394261773, 848616745, 15446017, 517723271, },
365 };
366 
367 H3::H3(const BloomFilterH3Params &p)
368  : MultiBitSel(p)
369 {
370  fatal_if(numHashes > 16, "There are only 16 H3 functions implemented.");
371 }
372 
374 {
375 }
376 
377 int
378 H3::hash(Addr addr, int hash_number) const
379 {
380  uint64_t val =
381  bits(addr, std::numeric_limits<Addr>::digits - 1, offsetBits);
382  int result = 0;
383 
384  for (int i = 0; (i < 64) && val; i++, val >>= 1) {
385  if (val & 1) {
386  result ^= H3Matrix[i][hash_number];
387  }
388  }
389 
390  if (isParallel) {
391  return (result % parFilterSize) + hash_number * parFilterSize;
392  } else {
393  return result % filter.size();
394  }
395 }
396 
397 } // namespace bloom_filter
398 } // namespace gem5
std::vector< SatCounter8 > filter
The filter itself.
Definition: base.hh:56
const unsigned offsetBits
Number of LSB bits to ignore from the the addresses.
Definition: base.hh:53
int hash(Addr addr, int hash_number) const override
Apply the selected the hash functions to an address.
H3(const BloomFilterH3Params &p)
The MultiBitSel Bloom Filter associates an address to multiple entries through the use of multiple ha...
const bool isParallel
Whether hashing should be performed in parallel.
const int parFilterSize
Size of the filter when doing parallel hashing.
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition: bitfield.hh:76
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Definition: logging.hh:226
Bitfield< 7 > i
Definition: misc_types.hh:67
Bitfield< 54 > p
Definition: pagetable.hh:70
Bitfield< 63 > val
Definition: misc.hh:776
Bitfield< 3 > addr
Definition: types.hh:84
static int H3Matrix[64][16]
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
GEM5_DEPRECATED_NAMESPACE(GuestABI, guest_abi)

Generated on Wed Dec 21 2022 10:22:28 for gem5 by doxygen 1.9.1