Commit d5d19f3
committed
Bound CAGRA hash table sizing loops so they cannot spin forever
calc_hashmap_params() sizes its hash tables by growing a bit length
until the requested table fits, checking the supported maximum only
after the loop. hashmap::get_size() is `1U << bitlen`, which is
undefined once bitlen reaches 32 and in practice wraps back to a small
value, so a request needing more than 2^31 entries left the loop
condition permanently true. The bit length grew without bound, the
post-loop RAFT_EXPECTS was never reached, and the search hung on the
host instead of returning an error.
Bound each of the four sizing loops by the same maximum its post-loop
check already uses, so an oversized request exits the loop and raises
the existing error. The limits are hoisted into local constants so the
loop bound and the check cannot drift apart.
check_params() only caps itopk_size at 1024 for SINGLE_CTA, so
MULTI_CTA and MULTI_KERNEL were the reachable paths. Both are covered
by a new regression test; note that a regression there resurfaces as a
test timeout rather than a failed assertion.
Verified on an RTX PRO 6000: itopk_size 1,100,000,000 previously hung
indefinitely and now raises the hash_bitlen error in a few seconds,
while valid searches are unaffected. A standalone sweep of the old and
new loop logic over all four loops agrees on every in-range input.
Closes #2523
Signed-off-by: Shaunak Kapur <shaunakk@nvidia.com>1 parent 329de99 commit d5d19f3
3 files changed
Lines changed: 159 additions & 12 deletions
File tree
- cpp
- src/neighbors/detail/cagra
- tests
- neighbors/ann_cagra
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
265 | 265 | | |
266 | 266 | | |
267 | 267 | | |
268 | | - | |
269 | | - | |
270 | | - | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
271 | 276 | | |
272 | 277 | | |
273 | | - | |
| 278 | + | |
| 279 | + | |
274 | 280 | | |
275 | 281 | | |
276 | 282 | | |
| |||
279 | 285 | | |
280 | 286 | | |
281 | 287 | | |
282 | | - | |
| 288 | + | |
| 289 | + | |
283 | 290 | | |
284 | 291 | | |
285 | | - | |
| 292 | + | |
| 293 | + | |
286 | 294 | | |
287 | 295 | | |
288 | | - | |
| 296 | + | |
289 | 297 | | |
290 | 298 | | |
291 | 299 | | |
| |||
300 | 308 | | |
301 | 309 | | |
302 | 310 | | |
303 | | - | |
| 311 | + | |
| 312 | + | |
304 | 313 | | |
305 | 314 | | |
306 | 315 | | |
| |||
337 | 346 | | |
338 | 347 | | |
339 | 348 | | |
340 | | - | |
| 349 | + | |
| 350 | + | |
341 | 351 | | |
342 | 352 | | |
343 | | - | |
| 353 | + | |
| 354 | + | |
344 | 355 | | |
345 | 356 | | |
346 | | - | |
| 357 | + | |
347 | 358 | | |
348 | 359 | | |
349 | 360 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
211 | 211 | | |
212 | 212 | | |
213 | 213 | | |
| 214 | + | |
214 | 215 | | |
215 | 216 | | |
216 | 217 | | |
| |||
Lines changed: 135 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
0 commit comments