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

Generated on Tue Jun 18 2024 16:24:00 for gem5 by doxygen 1.11.0