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

Generated on Thu May 28 2020 16:21:29 for gem5 by doxygen 1.8.13