Skip to content

feat(rln): hardware acceleration using icicle#370

Draft
vinhtc27 wants to merge 16 commits into
masterfrom
gpu-acceleration-using-icicle
Draft

feat(rln): hardware acceleration using icicle#370
vinhtc27 wants to merge 16 commits into
masterfrom
gpu-acceleration-using-icicle

Conversation

@vinhtc27
Copy link
Copy Markdown
Contributor

@vinhtc27 vinhtc27 commented Jan 26, 2026

Hardware acceleration using https://github.com/ingonyama-zk/icicle

  • The latest release, icicle v4.0.0, DOES NOT support the Metal backend on macOS, so it falls back to the CPU backend.
  • Using the latest GPU CUDA Backend of icicle for Linux.

@vinhtc27 vinhtc27 marked this pull request as ready for review January 26, 2026 11:02
@github-actions
Copy link
Copy Markdown

Benchmark for 7fbed26

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.14µs 17.0±0.23µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.02ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.7±8.08µs 986.2±18.19µs +0.36%
FullMerkleTree::get_subtree_root 11.9±0.19ns 11.9±0.20ns 0.00%
FullMerkleTree::override_range 2.3±0.12ms 2.2±0.07ms -4.35%
FullMerkleTree::set 8.5±0.09µs 8.5±0.07µs 0.00%
OptimalMerkleTree::delete 20.1±0.39µs 20.0±0.27µs -0.50%
OptimalMerkleTree::get 51.7±0.68ns 50.7±0.34ns -1.93%
OptimalMerkleTree::get_empty_leaves_indices 982.3±5.31µs 982.3±6.21µs 0.00%
OptimalMerkleTree::get_subtree_root 24.9±0.35ns 24.9±0.20ns 0.00%
OptimalMerkleTree::override_range 6.0±0.22ms 5.2±0.39ms -13.33%
OptimalMerkleTree::set 10.2±0.19µs 10.1±0.21µs -0.98%
poseidon Fr/Array hash/10 139.9±0.29µs 69.8 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1510.0±2.27µs 64.7 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.2±0.06ms 64.2 KElem/sec N/A N/A
poseidon Fr/Single hash 13.9±0.02µs 68.8 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

Benchmark for 7fbed26

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.9±0.13ms 13.1±0.19ms +1.55%
OptimalMerkleTree::::full_depth_gen 813.1±6.18µs 809.4±5.64µs -0.46%
Pmtree::delete 51.4±2.46µs 51.2±0.47µs -0.39%
Pmtree::get 361.5±4.52ns 365.4±12.49ns +1.08%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 5.0±0.08ns 0.00%
Pmtree::get_subtree_root 515.1±18.14ns 515.0±6.32ns -0.02%
Pmtree::override_range 100.3±0.83µs 100.3±0.62µs 0.00%
Pmtree::set 51.0±0.31µs 51.2±0.77µs +0.39%
Set/FullMerkleTree::::set/1 521.9±4.72µs 520.7±4.16µs -0.23%
Set/FullMerkleTree::::set/10 5.3±0.03ms 5.3±0.12ms 0.00%
Set/FullMerkleTree::::set/100 52.9±0.09ms 52.5±0.12ms -0.76%
Set/FullMerkleTree::::set_range/1 523.9±6.88µs 524.9±3.52µs +0.19%
Set/FullMerkleTree::::set_range/10 722.3±13.37µs 716.4±2.12µs -0.82%
Set/FullMerkleTree::::set_range/100 1899.5±30.21µs 1894.0±36.84µs -0.29%
Set/OptimalMerkleTree::::set/1 521.6±5.69µs 521.3±2.88µs -0.06%
Set/OptimalMerkleTree::::set/10 5.3±0.09ms 5.3±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 53.1±0.19ms 53.0±0.13ms -0.19%
Set/OptimalMerkleTree::::set_range/1 523.9±4.82µs 525.2±6.64µs +0.25%
Set/OptimalMerkleTree::::set_range/10 722.1±5.63µs 726.7±15.27µs +0.64%
Set/OptimalMerkleTree::::set_range/100 1857.3±39.63µs 1860.2±30.50µs +0.16%
proof_generation/standard 182.7±0.59ms N/A N/A

@github-actions
Copy link
Copy Markdown

Benchmark for 15f712b

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.29µs 17.0±0.49µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.6±6.87µs 982.8±10.45µs +0.12%
FullMerkleTree::get_subtree_root 11.8±0.10ns 11.9±0.18ns +0.85%
FullMerkleTree::override_range 2.2±0.09ms 2.2±0.08ms 0.00%
FullMerkleTree::set 8.6±0.44µs 8.5±0.09µs -1.16%
OptimalMerkleTree::delete 19.5±0.23µs 19.7±0.78µs +1.03%
OptimalMerkleTree::get 50.6±0.28ns 50.5±0.45ns -0.20%
OptimalMerkleTree::get_empty_leaves_indices 981.2±7.79µs 983.6±20.94µs +0.24%
OptimalMerkleTree::get_subtree_root 24.7±0.40ns 24.8±0.22ns +0.40%
OptimalMerkleTree::override_range 4.1±0.19ms 4.3±0.34ms +4.88%
OptimalMerkleTree::set 9.8±0.17µs 9.9±0.20µs +1.02%
poseidon Fr/Array hash/10 140.0±0.77µs 69.8 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1508.4±2.50µs 64.7 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.2±0.04ms 64.2 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 68.9 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

Benchmark for 15f712b

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.0±0.11ms 12.7±0.36ms -2.31%
OptimalMerkleTree::::full_depth_gen 792.9±12.60µs 791.3±5.85µs -0.20%
Pmtree::delete 51.2±0.29µs 51.1±0.78µs -0.20%
Pmtree::get 364.8±5.83ns 365.2±5.44ns +0.11%
Pmtree::get_empty_leaves_indices 5.0±0.06ns 5.0±0.08ns 0.00%
Pmtree::get_subtree_root 517.7±7.85ns 513.1±7.89ns -0.89%
Pmtree::override_range 99.3±0.82µs 100.2±1.57µs +0.91%
Pmtree::set 51.3±0.41µs 51.0±0.40µs -0.58%
Set/FullMerkleTree::::set/1 525.1±5.61µs 525.3±4.81µs +0.04%
Set/FullMerkleTree::::set/10 5.3±0.02ms 5.2±0.03ms -1.89%
Set/FullMerkleTree::::set/100 52.8±0.19ms 52.6±0.15ms -0.38%
Set/FullMerkleTree::::set_range/1 521.1±4.91µs 524.7±5.63µs +0.69%
Set/FullMerkleTree::::set_range/10 716.8±4.02µs 716.4±3.18µs -0.06%
Set/FullMerkleTree::::set_range/100 1898.1±29.86µs 1895.5±45.68µs -0.14%
Set/OptimalMerkleTree::::set/1 525.4±4.55µs 525.5±2.60µs +0.02%
Set/OptimalMerkleTree::::set/10 5.3±0.01ms 5.3±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 53.0±0.25ms 52.8±0.14ms -0.38%
Set/OptimalMerkleTree::::set_range/1 520.4±4.51µs 521.9±3.08µs +0.29%
Set/OptimalMerkleTree::::set_range/10 721.3±6.47µs 719.7±4.30µs -0.22%
Set/OptimalMerkleTree::::set_range/100 1858.8±38.07µs 1855.8±35.15µs -0.16%

@github-actions
Copy link
Copy Markdown

Benchmark for fe76bca

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.17µs 17.2±0.17µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 983.4±15.22µs 981.6±7.75µs -0.18%
FullMerkleTree::get_subtree_root 11.7±0.13ns 11.7±0.11ns 0.00%
FullMerkleTree::override_range 2.3±0.06ms 2.3±0.07ms 0.00%
FullMerkleTree::set 8.6±0.26µs 8.6±0.11µs 0.00%
OptimalMerkleTree::delete 20.1±0.22µs 20.4±0.33µs +1.49%
OptimalMerkleTree::get 50.9±0.63ns 52.3±0.51ns +2.75%
OptimalMerkleTree::get_empty_leaves_indices 981.5±8.17µs 982.2±9.06µs +0.07%
OptimalMerkleTree::get_subtree_root 25.9±0.36ns 26.0±0.44ns +0.39%
OptimalMerkleTree::override_range 5.4±0.20ms 5.6±0.45ms +3.70%
OptimalMerkleTree::set 10.2±0.19µs 10.4±0.68µs +1.96%
poseidon Fr/Array hash/10 142.1±1.02µs 68.7 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1513.0±3.69µs 64.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.3±0.29ms 64.0 KElem/sec N/A N/A
poseidon Fr/Single hash 14.0±0.03µs 68.3 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

Benchmark for fe76bca

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.6±0.20ms 12.3±0.05ms -2.38%
OptimalMerkleTree::::full_depth_gen 784.0±5.14µs 784.3±16.94µs +0.04%
Pmtree::delete 50.7±0.31µs 52.5±0.59µs +3.55%
Pmtree::get 362.1±13.60ns 348.8±5.42ns -3.67%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 5.0±0.11ns 0.00%
Pmtree::get_subtree_root 498.5±6.00ns 495.8±5.41ns -0.54%
Pmtree::override_range 101.7±0.91µs 101.2±0.79µs -0.49%
Pmtree::set 50.6±0.24µs 50.4±0.55µs -0.40%
Set/FullMerkleTree::::set/1 518.7±5.20µs 518.8±18.06µs +0.02%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 52.1±0.58ms 51.9±1.14ms -0.38%
Set/FullMerkleTree::::set_range/1 518.0±4.56µs 515.8±3.08µs -0.42%
Set/FullMerkleTree::::set_range/10 708.3±4.56µs 702.4±3.84µs -0.83%
Set/FullMerkleTree::::set_range/100 1889.0±27.42µs 1884.8±17.89µs -0.22%
Set/OptimalMerkleTree::::set/1 518.5±3.34µs 514.3±4.82µs -0.81%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.04ms 0.00%
Set/OptimalMerkleTree::::set/100 52.1±0.15ms 51.9±0.07ms -0.38%
Set/OptimalMerkleTree::::set_range/1 519.6±4.35µs 516.6±3.20µs -0.58%
Set/OptimalMerkleTree::::set_range/10 712.7±7.73µs 712.0±6.54µs -0.10%
Set/OptimalMerkleTree::::set_range/100 1860.6±44.78µs 1868.3±56.25µs +0.41%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 2, 2026

Benchmark for 8e59fed

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.3±0.24µs 17.3±0.18µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.5±5.18µs 982.3±10.57µs +0.08%
FullMerkleTree::get_subtree_root 11.7±0.12ns 11.7±0.08ns 0.00%
FullMerkleTree::override_range 2.3±0.10ms 2.3±0.10ms 0.00%
FullMerkleTree::set 8.6±0.12µs 8.6±0.11µs 0.00%
OptimalMerkleTree::delete 20.2±0.29µs 20.4±1.58µs +0.99%
OptimalMerkleTree::get 51.2±0.52ns 50.4±0.50ns -1.56%
OptimalMerkleTree::get_empty_leaves_indices 981.5±8.57µs 982.6±10.65µs +0.11%
OptimalMerkleTree::get_subtree_root 25.8±0.36ns 25.9±0.35ns +0.39%
OptimalMerkleTree::override_range 5.0±0.17ms 4.9±0.36ms -2.00%
OptimalMerkleTree::set 10.3±0.18µs 10.3±0.18µs 0.00%
poseidon Fr/Array hash/10 140.1±0.89µs 69.7 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1489.8±1.89µs 65.6 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.01ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.7±0.02µs 69.4 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 2, 2026

Benchmark for 8e59fed

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.5±0.18ms 13.6±0.18ms +0.74%
OptimalMerkleTree::::full_depth_gen 782.6±24.11µs 779.7±11.03µs -0.37%
Pmtree::delete 50.7±0.46µs 50.3±0.46µs -0.79%
Pmtree::get 351.0±5.21ns 352.0±6.58ns +0.28%
Pmtree::get_empty_leaves_indices 5.0±0.05ns 5.0±0.07ns 0.00%
Pmtree::get_subtree_root 501.6±7.46ns 493.4±6.74ns -1.63%
Pmtree::override_range 101.3±0.75µs 101.7±1.93µs +0.39%
Pmtree::set 51.5±1.07µs 50.3±0.39µs -2.33%
Set/FullMerkleTree::::set/1 515.5±3.06µs 515.2±10.88µs -0.06%
Set/FullMerkleTree::::set/10 5.1±0.02ms 5.2±0.01ms +1.96%
Set/FullMerkleTree::::set/100 51.8±0.42ms 51.9±0.17ms +0.19%
Set/FullMerkleTree::::set_range/1 511.9±4.99µs 515.5±1.95µs +0.70%
Set/FullMerkleTree::::set_range/10 702.0±4.31µs 703.3±11.62µs +0.19%
Set/FullMerkleTree::::set_range/100 1885.9±17.13µs 1885.5±15.38µs -0.02%
Set/OptimalMerkleTree::::set/1 514.8±4.56µs 517.3±4.39µs +0.49%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.15ms 51.9±0.15ms 0.00%
Set/OptimalMerkleTree::::set_range/1 512.1±3.41µs 512.1±4.96µs 0.00%
Set/OptimalMerkleTree::::set_range/10 709.7±6.11µs 711.1±7.82µs +0.20%
Set/OptimalMerkleTree::::set_range/100 1861.1±35.47µs 1855.8±32.10µs -0.28%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 2, 2026

Benchmark for 1a702fc

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.4±0.28µs 17.2±0.21µs -1.15%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.6±4.66µs 984.1±16.68µs +0.25%
FullMerkleTree::get_subtree_root 11.7±0.08ns 11.7±0.30ns 0.00%
FullMerkleTree::override_range 2.3±0.10ms 2.3±0.07ms 0.00%
FullMerkleTree::set 8.6±0.11µs 8.6±0.11µs 0.00%
OptimalMerkleTree::delete 20.4±0.45µs 20.1±0.24µs -1.47%
OptimalMerkleTree::get 52.5±0.37ns 51.6±0.70ns -1.71%
OptimalMerkleTree::get_empty_leaves_indices 982.7±9.94µs 983.6±12.17µs +0.09%
OptimalMerkleTree::get_subtree_root 25.9±0.24ns 25.9±0.23ns 0.00%
OptimalMerkleTree::override_range 5.8±0.30ms 5.5±0.39ms -5.17%
OptimalMerkleTree::set 10.3±0.17µs 10.3±0.27µs 0.00%
poseidon Fr/Array hash/10 138.7±0.24µs 70.4 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1488.9±1.35µs 65.6 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.03ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 69.3 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 2, 2026

Benchmark for 1a702fc

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.2±0.12ms 13.1±0.10ms +7.38%
OptimalMerkleTree::::full_depth_gen 799.9±9.50µs 801.3±10.76µs +0.18%
Pmtree::delete 50.8±0.88µs 50.6±1.34µs -0.39%
Pmtree::get 356.3±7.04ns 357.3±4.77ns +0.28%
Pmtree::get_empty_leaves_indices 5.0±0.07ns 5.0±0.07ns 0.00%
Pmtree::get_subtree_root 489.7±5.99ns 495.5±8.13ns +1.18%
Pmtree::override_range 101.9±0.44µs 102.1±2.85µs +0.20%
Pmtree::set 50.8±0.96µs 50.8±2.39µs 0.00%
Set/FullMerkleTree::::set/1 516.0±4.94µs 515.4±2.71µs -0.12%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.22ms 51.9±0.14ms +0.19%
Set/FullMerkleTree::::set_range/1 518.2±16.93µs 510.5±2.12µs -1.49%
Set/FullMerkleTree::::set_range/10 703.0±5.22µs 702.8±6.12µs -0.03%
Set/FullMerkleTree::::set_range/100 1896.5±30.98µs 1934.1±49.11µs +1.98%
Set/OptimalMerkleTree::::set/1 521.3±24.03µs 520.2±16.29µs -0.21%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.31ms 51.5±0.07ms -0.77%
Set/OptimalMerkleTree::::set_range/1 516.3±2.73µs 517.1±3.42µs +0.15%
Set/OptimalMerkleTree::::set_range/10 711.6±5.55µs 713.0±7.43µs +0.20%
Set/OptimalMerkleTree::::set_range/100 1859.7±34.98µs 1862.4±58.76µs +0.15%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for 5bb8e3a

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.17µs 17.2±0.21µs 0.00%
FullMerkleTree::get 0.8±0.00ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.7±8.98µs 981.6±7.18µs -0.01%
FullMerkleTree::get_subtree_root 11.7±0.12ns 11.7±0.14ns 0.00%
FullMerkleTree::override_range 2.3±0.11ms 2.3±0.09ms 0.00%
FullMerkleTree::set 8.6±0.11µs 8.6±0.11µs 0.00%
OptimalMerkleTree::delete 20.5±0.25µs 20.1±0.29µs -1.95%
OptimalMerkleTree::get 50.7±0.55ns 50.3±0.49ns -0.79%
OptimalMerkleTree::get_empty_leaves_indices 981.8±6.42µs 981.7±10.99µs -0.01%
OptimalMerkleTree::get_subtree_root 25.9±0.38ns 26.0±0.37ns +0.39%
OptimalMerkleTree::override_range 5.4±0.26ms 5.4±0.46ms 0.00%
OptimalMerkleTree::set 10.4±0.16µs 10.4±0.97µs 0.00%
poseidon Fr/Array hash/10 139.3±2.60µs 70.1 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1492.7±5.40µs 65.4 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.02ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.03µs 69.3 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for 5bb8e3a

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.1±0.18ms 13.9±0.17ms +6.11%
OptimalMerkleTree::::full_depth_gen 780.1±7.75µs 781.8±6.09µs +0.22%
Pmtree::delete 50.8±0.69µs 50.3±0.63µs -0.98%
Pmtree::get 350.7±5.16ns 363.1±6.43ns +3.54%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 5.0±0.10ns 0.00%
Pmtree::get_subtree_root 492.8±6.38ns 502.2±7.82ns +1.91%
Pmtree::override_range 99.3±0.68µs 99.2±3.45µs -0.10%
Pmtree::set 50.8±0.76µs 50.5±1.00µs -0.59%
Set/FullMerkleTree::::set/1 515.6±4.19µs 516.3±6.13µs +0.14%
Set/FullMerkleTree::::set/10 5.2±0.02ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.7±0.16ms 51.9±0.42ms +0.39%
Set/FullMerkleTree::::set_range/1 512.9±6.69µs 516.0±4.70µs +0.60%
Set/FullMerkleTree::::set_range/10 702.4±4.49µs 703.9±5.90µs +0.21%
Set/FullMerkleTree::::set_range/100 1878.8±35.69µs 1873.3±24.90µs -0.29%
Set/OptimalMerkleTree::::set/1 516.8±4.66µs 519.6±8.37µs +0.54%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.03ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.55ms 52.3±0.23ms +0.58%
Set/OptimalMerkleTree::::set_range/1 516.9±4.78µs 518.3±4.99µs +0.27%
Set/OptimalMerkleTree::::set_range/10 707.6±5.26µs 709.5±4.42µs +0.27%
Set/OptimalMerkleTree::::set_range/100 1846.3±38.01µs 1858.2±42.80µs +0.64%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for f004291

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.19µs 17.1±0.29µs +0.59%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1020.8±13.47µs 1022.8±28.50µs +0.20%
FullMerkleTree::get_subtree_root 12.6±0.17ns 12.6±0.23ns 0.00%
FullMerkleTree::override_range 2.6±0.07ms 2.6±0.04ms 0.00%
FullMerkleTree::set 8.5±0.10µs 8.5±0.16µs 0.00%
OptimalMerkleTree::delete 19.8±0.28µs 19.7±0.52µs -0.51%
OptimalMerkleTree::get 35.0±0.53ns 36.5±1.59ns +4.29%
OptimalMerkleTree::get_empty_leaves_indices 1020.7±8.87µs 1044.9±61.24µs +2.37%
OptimalMerkleTree::get_subtree_root 27.9±0.35ns 28.0±0.82ns +0.36%
OptimalMerkleTree::override_range 5.1±0.13ms 4.7±0.22ms -7.84%
OptimalMerkleTree::set 10.1±0.21µs 10.0±0.19µs -0.99%
poseidon Fr/Array hash/10 138.1±0.59µs 70.7 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1481.3±6.75µs 65.9 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.10ms 65.1 KElem/sec N/A N/A
poseidon Fr/Single hash 13.6±0.04µs 70.2 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for f004291

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.4±0.10ms 12.4±0.14ms 0.00%
OptimalMerkleTree::::full_depth_gen 790.3±10.83µs 794.3±94.53µs +0.51%
Pmtree::delete 50.8±0.26µs 50.4±0.65µs -0.79%
Pmtree::get 361.3±5.57ns 353.2±5.52ns -2.24%
Pmtree::get_empty_leaves_indices 5.0±0.06ns 5.0±0.12ns 0.00%
Pmtree::get_subtree_root 490.0±7.61ns 493.0±8.65ns +0.61%
Pmtree::override_range 99.6±0.92µs 98.4±0.91µs -1.20%
Pmtree::set 50.8±0.57µs 50.6±1.44µs -0.39%
Set/FullMerkleTree::::set/1 514.3±4.48µs 514.7±2.45µs +0.08%
Set/FullMerkleTree::::set/10 5.2±0.03ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 51.6±0.20ms 51.7±0.12ms +0.19%
Set/FullMerkleTree::::set_range/1 515.6±2.84µs 515.8±4.85µs +0.04%
Set/FullMerkleTree::::set_range/10 703.1±5.20µs 702.9±1.83µs -0.03%
Set/FullMerkleTree::::set_range/100 1873.6±28.79µs 1875.7±29.65µs +0.11%
Set/OptimalMerkleTree::::set/1 516.6±2.36µs 513.9±7.89µs -0.52%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.28ms 51.8±0.07ms -0.38%
Set/OptimalMerkleTree::::set_range/1 516.2±2.07µs 517.4±11.35µs +0.23%
Set/OptimalMerkleTree::::set_range/10 708.0±9.78µs 706.3±7.69µs -0.24%
Set/OptimalMerkleTree::::set_range/100 1849.9±37.48µs 1854.1±46.00µs +0.23%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for d93830b

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.0±0.31µs 17.1±0.31µs +0.59%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 1020.9±7.24µs 1023.6±22.67µs +0.26%
FullMerkleTree::get_subtree_root 12.6±0.10ns 12.6±0.21ns 0.00%
FullMerkleTree::override_range 2.7±0.08ms 2.7±0.05ms 0.00%
FullMerkleTree::set 8.5±0.13µs 8.5±0.07µs 0.00%
OptimalMerkleTree::delete 19.7±0.39µs 20.0±0.42µs +1.52%
OptimalMerkleTree::get 37.1±1.42ns 36.9±0.72ns -0.54%
OptimalMerkleTree::get_empty_leaves_indices 1036.8±53.22µs 1022.2±12.76µs -1.41%
OptimalMerkleTree::get_subtree_root 28.0±0.41ns 27.9±0.73ns -0.36%
OptimalMerkleTree::override_range 5.0±0.07ms 5.1±0.15ms +2.00%
OptimalMerkleTree::set 10.0±0.19µs 10.3±0.32µs +3.00%
poseidon Fr/Array hash/10 137.3±0.25µs 71.1 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1480.2±4.45µs 66.0 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.09ms 65.3 KElem/sec N/A N/A
poseidon Fr/Single hash 13.6±0.09µs 70.0 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 3, 2026

Benchmark for d93830b

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.4±0.14ms 12.7±0.09ms +2.42%
OptimalMerkleTree::::full_depth_gen 792.2±8.11µs 790.6±41.13µs -0.20%
Pmtree::delete 50.7±0.37µs 50.4±0.61µs -0.59%
Pmtree::get 359.1±5.37ns 354.2±18.17ns -1.36%
Pmtree::get_empty_leaves_indices 5.0±0.08ns 5.0±0.08ns 0.00%
Pmtree::get_subtree_root 515.6±18.55ns 495.5±8.14ns -3.90%
Pmtree::override_range 101.9±0.78µs 101.6±1.19µs -0.29%
Pmtree::set 50.7±0.39µs 50.5±0.94µs -0.39%
Set/FullMerkleTree::::set/1 516.7±4.24µs 511.2±4.34µs -1.06%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.9±0.23ms 51.6±0.19ms -0.58%
Set/FullMerkleTree::::set_range/1 516.7±5.12µs 515.4±2.30µs -0.25%
Set/FullMerkleTree::::set_range/10 703.8±2.78µs 701.8±2.31µs -0.28%
Set/FullMerkleTree::::set_range/100 1890.2±36.62µs 1892.2±54.43µs +0.11%
Set/OptimalMerkleTree::::set/1 519.7±18.90µs 516.8±3.78µs -0.56%
Set/OptimalMerkleTree::::set/10 5.2±0.03ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 51.9±0.16ms 51.9±0.18ms 0.00%
Set/OptimalMerkleTree::::set_range/1 517.3±4.77µs 516.3±3.44µs -0.19%
Set/OptimalMerkleTree::::set_range/10 712.7±4.20µs 715.5±4.43µs +0.39%
Set/OptimalMerkleTree::::set_range/100 1861.2±34.78µs 1861.6±34.97µs +0.02%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 25c364b

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.17µs 17.2±0.25µs 0.00%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.0±7.39µs 981.2±7.40µs -0.08%
FullMerkleTree::get_subtree_root 11.7±0.13ns 11.7±0.13ns 0.00%
FullMerkleTree::override_range 2.3±0.13ms 2.2±0.06ms -4.35%
FullMerkleTree::set 8.6±0.14µs 8.6±0.12µs 0.00%
OptimalMerkleTree::delete 19.9±0.28µs 20.4±0.55µs +2.51%
OptimalMerkleTree::get 51.4±0.37ns 51.3±0.51ns -0.19%
OptimalMerkleTree::get_empty_leaves_indices 982.3±8.68µs 981.2±5.92µs -0.11%
OptimalMerkleTree::get_subtree_root 25.8±0.26ns 25.8±0.28ns 0.00%
OptimalMerkleTree::override_range 5.0±0.21ms 4.7±0.48ms -6.00%
OptimalMerkleTree::set 10.1±0.19µs 10.1±0.39µs 0.00%
poseidon Fr/Array hash/10 139.4±0.42µs 70.0 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1497.1±3.81µs 65.2 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.1±0.05ms 64.7 KElem/sec N/A N/A
poseidon Fr/Single hash 13.7±0.01µs 69.4 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 25c364b

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.5±0.33ms 12.9±0.10ms +3.20%
OptimalMerkleTree::::full_depth_gen 796.6±2.88µs 799.1±8.81µs +0.31%
Pmtree::delete 50.7±0.48µs 50.4±0.44µs -0.59%
Pmtree::get 355.9±10.27ns 350.2±5.76ns -1.60%
Pmtree::get_empty_leaves_indices 5.0±0.15ns 5.0±0.05ns 0.00%
Pmtree::get_subtree_root 494.1±7.76ns 506.4±17.54ns +2.49%
Pmtree::override_range 101.6±0.68µs 101.3±0.89µs -0.30%
Pmtree::set 50.8±1.19µs 50.5±1.85µs -0.59%
Set/FullMerkleTree::::set/1 515.9±3.12µs 515.7±1.98µs -0.04%
Set/FullMerkleTree::::set/10 5.2±0.10ms 5.2±0.02ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.06ms 52.0±1.16ms +0.39%
Set/FullMerkleTree::::set_range/1 516.4±6.47µs 521.5±15.16µs +0.99%
Set/FullMerkleTree::::set_range/10 702.2±2.27µs 702.5±5.25µs +0.04%
Set/FullMerkleTree::::set_range/100 1885.6±22.18µs 1886.5±33.09µs +0.05%
Set/OptimalMerkleTree::::set/1 512.7±6.02µs 517.1±5.00µs +0.86%
Set/OptimalMerkleTree::::set/10 5.2±0.02ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±1.42ms 51.8±0.49ms -0.38%
Set/OptimalMerkleTree::::set_range/1 516.7±2.97µs 514.0±4.92µs -0.52%
Set/OptimalMerkleTree::::set_range/10 716.6±6.09µs 710.8±15.14µs -0.81%
Set/OptimalMerkleTree::::set_range/100 1861.8±38.25µs 1872.7±47.67µs +0.59%

@vinhtc27 vinhtc27 force-pushed the gpu-acceleration-using-icicle branch 2 times, most recently from 10ca00e to 4b05fbd Compare February 4, 2026 04:29
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 7894bde

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.7±0.82µs 17.2±0.22µs -2.82%
FullMerkleTree::get 0.8±0.00ns 0.8±0.00ns 0.00%
FullMerkleTree::get_empty_leaves_indices 982.1±9.11µs 981.4±7.29µs -0.07%
FullMerkleTree::get_subtree_root 11.7±0.07ns 11.7±0.12ns 0.00%
FullMerkleTree::override_range 2.3±0.07ms 2.3±0.08ms 0.00%
FullMerkleTree::set 8.6±0.12µs 8.6±0.14µs 0.00%
OptimalMerkleTree::delete 20.2±0.25µs 20.4±2.56µs +0.99%
OptimalMerkleTree::get 50.2±0.29ns 51.2±1.18ns +1.99%
OptimalMerkleTree::get_empty_leaves_indices 981.8±8.31µs 982.6±11.65µs +0.08%
OptimalMerkleTree::get_subtree_root 25.9±0.31ns 25.9±0.22ns 0.00%
OptimalMerkleTree::override_range 4.1±0.25ms 4.3±0.48ms +4.88%
OptimalMerkleTree::set 10.0±0.12µs 10.0±0.16µs 0.00%
poseidon Fr/Array hash/10 138.7±0.28µs 70.4 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1490.2±3.82µs 65.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.04ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.9±0.04µs 68.8 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 7894bde

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 13.5±0.17ms 13.1±0.20ms -2.96%
OptimalMerkleTree::::full_depth_gen 781.0±4.88µs 799.9±9.78µs +2.42%
Pmtree::delete 50.8±0.68µs 50.4±0.56µs -0.79%
Pmtree::get 352.1±9.43ns 360.1±5.72ns +2.27%
Pmtree::get_empty_leaves_indices 5.0±0.05ns 5.0±0.10ns 0.00%
Pmtree::get_subtree_root 488.8±5.20ns 493.9±6.64ns +1.04%
Pmtree::override_range 99.0±1.33µs 98.7±2.16µs -0.30%
Pmtree::set 50.7±0.42µs 50.5±1.01µs -0.39%
Set/FullMerkleTree::::set/1 511.0±4.41µs 515.3±3.08µs +0.84%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.03ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.08ms 51.8±0.16ms 0.00%
Set/FullMerkleTree::::set_range/1 513.3±19.88µs 515.7±3.21µs +0.47%
Set/FullMerkleTree::::set_range/10 702.3±3.22µs 704.0±10.06µs +0.24%
Set/FullMerkleTree::::set_range/100 1875.5±21.13µs 1876.0±20.67µs +0.03%
Set/OptimalMerkleTree::::set/1 516.5±2.62µs 517.4±5.52µs +0.17%
Set/OptimalMerkleTree::::set/10 5.2±0.02ms 5.2±0.26ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.40ms 52.0±0.32ms 0.00%
Set/OptimalMerkleTree::::set_range/1 511.5±1.91µs 516.7±3.37µs +1.02%
Set/OptimalMerkleTree::::set_range/10 710.4±15.56µs 711.1±63.37µs +0.10%
Set/OptimalMerkleTree::::set_range/100 1847.5±34.83µs 1862.9±50.05µs +0.83%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 0b00243

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.2±0.23µs 17.2±0.19µs 0.00%
FullMerkleTree::get 0.8±0.00ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.4±8.34µs 981.5±6.67µs +0.01%
FullMerkleTree::get_subtree_root 11.7±0.12ns 11.7±0.25ns 0.00%
FullMerkleTree::override_range 2.3±0.11ms 2.3±0.13ms 0.00%
FullMerkleTree::set 8.6±0.11µs 8.6±0.12µs 0.00%
OptimalMerkleTree::delete 19.9±0.26µs 20.0±0.47µs +0.50%
OptimalMerkleTree::get 50.8±0.48ns 50.7±1.02ns -0.20%
OptimalMerkleTree::get_empty_leaves_indices 981.7±7.52µs 980.8±5.49µs -0.09%
OptimalMerkleTree::get_subtree_root 25.9±0.33ns 25.9±0.47ns 0.00%
OptimalMerkleTree::override_range 5.0±0.25ms 4.7±0.19ms -6.00%
OptimalMerkleTree::set 10.1±0.15µs 10.2±0.59µs +0.99%
poseidon Fr/Array hash/10 139.4±0.64µs 70.1 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1493.0±1.55µs 65.4 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.03ms 64.9 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.03µs 69.3 MElem/sec N/A N/A

@vinhtc27 vinhtc27 marked this pull request as draft February 4, 2026 04:36
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for 0b00243

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 14.0±0.15ms 12.8±0.13ms -8.57%
OptimalMerkleTree::::full_depth_gen 796.7±4.54µs 783.9±9.43µs -1.61%
Pmtree::delete 50.8±0.44µs 50.3±0.49µs -0.98%
Pmtree::get 354.4±5.33ns 359.0±30.79ns +1.30%
Pmtree::get_empty_leaves_indices 5.0±0.09ns 5.0±0.09ns 0.00%
Pmtree::get_subtree_root 513.0±11.50ns 495.0±4.88ns -3.51%
Pmtree::override_range 99.4±1.22µs 98.8±0.87µs -0.60%
Pmtree::set 50.8±0.33µs 50.3±0.48µs -0.98%
Set/FullMerkleTree::::set/1 514.9±4.55µs 516.3±2.72µs +0.27%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/FullMerkleTree::::set/100 52.0±1.78ms 51.9±0.08ms -0.19%
Set/FullMerkleTree::::set_range/1 511.3±6.00µs 515.6±2.41µs +0.84%
Set/FullMerkleTree::::set_range/10 702.3±5.91µs 703.1±2.91µs +0.11%
Set/FullMerkleTree::::set_range/100 1879.5±30.25µs 1871.5±32.49µs -0.43%
Set/OptimalMerkleTree::::set/1 517.1±5.71µs 517.6±6.04µs +0.10%
Set/OptimalMerkleTree::::set/10 5.2±0.01ms 5.2±0.01ms 0.00%
Set/OptimalMerkleTree::::set/100 52.0±0.08ms 52.0±0.14ms 0.00%
Set/OptimalMerkleTree::::set_range/1 516.6±4.87µs 516.6±2.72µs 0.00%
Set/OptimalMerkleTree::::set_range/10 709.8±6.45µs 705.7±6.82µs -0.58%
Set/OptimalMerkleTree::::set_range/100 1849.5±37.65µs 1846.7±39.59µs -0.15%

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for d96498d

Click to view benchmark
Test Base PR %
FullMerkleTree::delete 17.4±0.29µs 17.2±0.22µs -1.15%
FullMerkleTree::get 0.8±0.01ns 0.8±0.01ns 0.00%
FullMerkleTree::get_empty_leaves_indices 981.4±6.99µs 981.7±7.46µs +0.03%
FullMerkleTree::get_subtree_root 11.7±0.08ns 11.7±0.07ns 0.00%
FullMerkleTree::override_range 2.3±0.09ms 2.3±0.09ms 0.00%
FullMerkleTree::set 8.6±0.11µs 8.6±0.12µs 0.00%
OptimalMerkleTree::delete 19.9±0.21µs 20.2±0.79µs +1.51%
OptimalMerkleTree::get 51.7±0.49ns 51.6±0.72ns -0.19%
OptimalMerkleTree::get_empty_leaves_indices 982.0±6.83µs 981.5±4.46µs -0.05%
OptimalMerkleTree::get_subtree_root 25.9±0.63ns 26.2±0.49ns +1.16%
OptimalMerkleTree::override_range 4.7±0.34ms 4.9±0.44ms +4.26%
OptimalMerkleTree::set 10.0±0.16µs 10.1±0.21µs +1.00%
poseidon Fr/Array hash/10 138.9±0.20µs 70.3 KElem/sec N/A N/A
poseidon Fr/Array hash/100 1489.9±1.40µs 65.5 KElem/sec N/A N/A
poseidon Fr/Array hash/1000 15.0±0.01ms 65.0 KElem/sec N/A N/A
poseidon Fr/Single hash 13.8±0.02µs 69.3 MElem/sec N/A N/A

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 4, 2026

Benchmark for d96498d

Click to view benchmark
Test Base PR %
FullMerkleTree::::full_depth_gen 12.8±0.41ms 13.8±0.29ms +7.81%
OptimalMerkleTree::::full_depth_gen 780.3±7.55µs 789.2±9.63µs +1.14%
Pmtree::delete 50.7±0.28µs 50.6±1.33µs -0.20%
Pmtree::get 354.6±4.41ns 365.4±4.83ns +3.05%
Pmtree::get_empty_leaves_indices 5.0±0.06ns 5.0±0.05ns 0.00%
Pmtree::get_subtree_root 490.1±8.12ns 507.1±7.89ns +3.47%
Pmtree::override_range 102.0±0.68µs 100.7±0.85µs -1.27%
Pmtree::set 50.8±0.83µs 50.6±2.39µs -0.39%
Set/FullMerkleTree::::set/1 515.3±2.10µs 511.5±4.63µs -0.74%
Set/FullMerkleTree::::set/10 5.2±0.01ms 5.2±0.03ms 0.00%
Set/FullMerkleTree::::set/100 51.8±0.08ms 51.8±0.12ms 0.00%
Set/FullMerkleTree::::set_range/1 516.3±8.16µs 516.3±4.54µs 0.00%
Set/FullMerkleTree::::set_range/10 701.9±3.85µs 702.3±3.91µs +0.06%
Set/FullMerkleTree::::set_range/100 1887.6±29.55µs 1885.7±24.49µs -0.10%
Set/OptimalMerkleTree::::set/1 517.1±3.91µs 517.0±5.20µs -0.02%
Set/OptimalMerkleTree::::set/10 5.2±0.09ms 5.2±0.02ms 0.00%
Set/OptimalMerkleTree::::set/100 51.7±0.28ms 51.9±0.20ms +0.39%
Set/OptimalMerkleTree::::set_range/1 516.8±4.55µs 518.0±14.14µs +0.23%
Set/OptimalMerkleTree::::set_range/10 710.8±4.13µs 710.8±10.08µs 0.00%
Set/OptimalMerkleTree::::set_range/100 1859.3±28.56µs 1851.3±30.86µs -0.43%

@vinhtc27 vinhtc27 force-pushed the gpu-acceleration-using-icicle branch from 5e1d870 to e7a31b9 Compare February 6, 2026 13:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant