Commit 6f02fcf
[Parquet] Improve dictionary decoder by unrolling loops (#9662)
## Which issue does this PR close?
#9670
## Rationale
Improve dictionary decoding by unrolling loads / OOB check (largest win
-15% for i32) and optimizing the `try_from_le_slice` usage to load from
u64 instead (small win, mostly readability).
```
┌──────────────────────────────────┬───────────────┬─────────┬─────────────┐
│ Benchmark │ upstream/main │ branch │ Improvement │
├──────────────────────────────────┼───────────────┼─────────┼─────────────┤
│ dictionary, mandatory, no NULLs │ 58.5 µs │ 49.5 µs │ -15.4% │
├──────────────────────────────────┼───────────────┼─────────┼─────────────┤
│ dictionary, optional, no NULLs │ 61.0 µs │ 52.2 µs │ -14.4% │
├──────────────────────────────────┼───────────────┼─────────┼─────────────┤
│ dictionary, optional, half NULLs │ 97.1 µs │ 93.0 µs │ -4.2% │
└──────────────────────────────────┴───────────────┴─────────┴─────────────┘
```
## What changes are included in this PR?
## Are these changes tested?
Existing tests cover this path thoroughly (21 bit_util tests pass).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent 65ad652 commit 6f02fcf
File tree
4 files changed
+111
-27
lines changed- parquet/src
- arrow/array_reader
- encodings
- util
4 files changed
+111
-27
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
128 | 128 | | |
129 | 129 | | |
130 | 130 | | |
131 | | - | |
| 131 | + | |
132 | 132 | | |
133 | 133 | | |
134 | 134 | | |
| |||
148 | 148 | | |
149 | 149 | | |
150 | 150 | | |
151 | | - | |
| 151 | + | |
152 | 152 | | |
153 | 153 | | |
154 | 154 | | |
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
| 229 | + | |
230 | 230 | | |
231 | 231 | | |
232 | 232 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
34 | | - | |
| 34 | + | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
| |||
455 | 455 | | |
456 | 456 | | |
457 | 457 | | |
458 | | - | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
459 | 462 | | |
460 | 463 | | |
461 | 464 | | |
| |||
658 | 661 | | |
659 | 662 | | |
660 | 663 | | |
661 | | - | |
| 664 | + | |
662 | 665 | | |
663 | 666 | | |
664 | 667 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
39 | 39 | | |
40 | 40 | | |
41 | 41 | | |
42 | | - | |
| 42 | + | |
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
| |||
84 | 84 | | |
85 | 85 | | |
86 | 86 | | |
87 | | - | |
| 87 | + | |
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| |||
352 | 352 | | |
353 | 353 | | |
354 | 354 | | |
355 | | - | |
| 355 | + | |
356 | 356 | | |
357 | 357 | | |
358 | 358 | | |
| |||
388 | 388 | | |
389 | 389 | | |
390 | 390 | | |
391 | | - | |
| 391 | + | |
392 | 392 | | |
393 | 393 | | |
394 | 394 | | |
| |||
469 | 469 | | |
470 | 470 | | |
471 | 471 | | |
472 | | - | |
| 472 | + | |
473 | 473 | | |
474 | 474 | | |
475 | 475 | | |
| |||
507 | 507 | | |
508 | 508 | | |
509 | 509 | | |
510 | | - | |
511 | | - | |
512 | | - | |
513 | | - | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
| 532 | + | |
| 533 | + | |
514 | 534 | | |
515 | 535 | | |
516 | 536 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
46 | 46 | | |
47 | 47 | | |
48 | 48 | | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
49 | 60 | | |
50 | 61 | | |
51 | 62 | | |
| |||
60 | 71 | | |
61 | 72 | | |
62 | 73 | | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
63 | 80 | | |
64 | 81 | | |
65 | 82 | | |
66 | 83 | | |
67 | | - | |
| 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 | + | |
68 | 123 | | |
69 | 124 | | |
70 | 125 | | |
| |||
79 | 134 | | |
80 | 135 | | |
81 | 136 | | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
82 | 144 | | |
83 | 145 | | |
84 | 146 | | |
| |||
139 | 201 | | |
140 | 202 | | |
141 | 203 | | |
142 | | - | |
| 204 | + | |
143 | 205 | | |
144 | 206 | | |
145 | 207 | | |
| |||
413 | 475 | | |
414 | 476 | | |
415 | 477 | | |
416 | | - | |
417 | | - | |
418 | | - | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
419 | 481 | | |
420 | 482 | | |
421 | 483 | | |
| |||
445 | 507 | | |
446 | 508 | | |
447 | 509 | | |
448 | | - | |
449 | | - | |
| 510 | + | |
450 | 511 | | |
451 | 512 | | |
452 | 513 | | |
| |||
457 | 518 | | |
458 | 519 | | |
459 | 520 | | |
460 | | - | |
461 | | - | |
| 521 | + | |
| 522 | + | |
462 | 523 | | |
463 | 524 | | |
464 | 525 | | |
| |||
602 | 663 | | |
603 | 664 | | |
604 | 665 | | |
605 | | - | |
| 666 | + | |
606 | 667 | | |
607 | 668 | | |
608 | 669 | | |
| |||
1024 | 1085 | | |
1025 | 1086 | | |
1026 | 1087 | | |
1027 | | - | |
| 1088 | + | |
1028 | 1089 | | |
1029 | 1090 | | |
1030 | 1091 | | |
| |||
0 commit comments