lambdaclass / cairo-vm

cairo-vm is a Rust implementation of the Cairo VM. Cairo (CPU Algebraic Intermediate Representation) is a programming language for writing provable programs, where one party can prove to another that a certain computation was executed correctly without the need for this party to re-execute the same program.
https://lambdaclass.github.io/cairo-vm
Apache License 2.0
485 stars 133 forks source link

Add bitwise program #1725

Closed pefontana closed 2 months ago

pefontana commented 2 months ago

Add bitwise program

Checklist

github-actions[bot] commented 2 months ago
**Hyper Thereading Benchmark results**

hyperfine -r 2 -n "hyper_threading_main threads: 1" 'RAYON_NUM_THREADS=1 ./hyper_threading_main' -n "hyper_threading_pr threads: 1" 'RAYON_NUM_THREADS=1 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 1
  Time (mean ± σ):     23.635 s ±  0.211 s    [User: 22.899 s, System: 0.734 s]
  Range (min … max):   23.486 s … 23.784 s    2 runs

Benchmark 2: hyper_threading_pr threads: 1
  Time (mean ± σ):     23.645 s ±  0.031 s    [User: 22.878 s, System: 0.766 s]
  Range (min … max):   23.623 s … 23.667 s    2 runs

Summary
  'hyper_threading_main threads: 1' ran
    1.00 ± 0.01 times faster than 'hyper_threading_pr threads: 1'

hyperfine -r 2 -n "hyper_threading_main threads: 2" 'RAYON_NUM_THREADS=2 ./hyper_threading_main' -n "hyper_threading_pr threads: 2" 'RAYON_NUM_THREADS=2 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 2
  Time (mean ± σ):     12.284 s ±  0.077 s    [User: 23.199 s, System: 0.705 s]
  Range (min … max):   12.229 s … 12.338 s    2 runs

Benchmark 2: hyper_threading_pr threads: 2
  Time (mean ± σ):     12.345 s ±  0.098 s    [User: 23.273 s, System: 0.758 s]
  Range (min … max):   12.275 s … 12.414 s    2 runs

Summary
  'hyper_threading_main threads: 2' ran
    1.00 ± 0.01 times faster than 'hyper_threading_pr threads: 2'

hyperfine -r 2 -n "hyper_threading_main threads: 4" 'RAYON_NUM_THREADS=4 ./hyper_threading_main' -n "hyper_threading_pr threads: 4" 'RAYON_NUM_THREADS=4 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 4
  Time (mean ± σ):      9.983 s ±  0.031 s    [User: 35.048 s, System: 0.937 s]
  Range (min … max):    9.961 s … 10.004 s    2 runs

Benchmark 2: hyper_threading_pr threads: 4
  Time (mean ± σ):      9.623 s ±  0.134 s    [User: 35.393 s, System: 1.029 s]
  Range (min … max):    9.529 s …  9.718 s    2 runs

Summary
  'hyper_threading_pr threads: 4' ran
    1.04 ± 0.01 times faster than 'hyper_threading_main threads: 4'

hyperfine -r 2 -n "hyper_threading_main threads: 6" 'RAYON_NUM_THREADS=6 ./hyper_threading_main' -n "hyper_threading_pr threads: 6" 'RAYON_NUM_THREADS=6 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 6
  Time (mean ± σ):      9.956 s ±  0.096 s    [User: 35.272 s, System: 1.036 s]
  Range (min … max):    9.888 s … 10.023 s    2 runs

Benchmark 2: hyper_threading_pr threads: 6
  Time (mean ± σ):      9.790 s ±  0.001 s    [User: 35.219 s, System: 0.993 s]
  Range (min … max):    9.790 s …  9.791 s    2 runs

Summary
  'hyper_threading_pr threads: 6' ran
    1.02 ± 0.01 times faster than 'hyper_threading_main threads: 6'

hyperfine -r 2 -n "hyper_threading_main threads: 8" 'RAYON_NUM_THREADS=8 ./hyper_threading_main' -n "hyper_threading_pr threads: 8" 'RAYON_NUM_THREADS=8 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 8
  Time (mean ± σ):      9.657 s ±  0.015 s    [User: 35.416 s, System: 1.021 s]
  Range (min … max):    9.647 s …  9.668 s    2 runs

Benchmark 2: hyper_threading_pr threads: 8
  Time (mean ± σ):      9.666 s ±  0.198 s    [User: 35.635 s, System: 1.011 s]
  Range (min … max):    9.526 s …  9.806 s    2 runs

Summary
  'hyper_threading_main threads: 8' ran
    1.00 ± 0.02 times faster than 'hyper_threading_pr threads: 8'

hyperfine -r 2 -n "hyper_threading_main threads: 16" 'RAYON_NUM_THREADS=16 ./hyper_threading_main' -n "hyper_threading_pr threads: 16" 'RAYON_NUM_THREADS=16 ./hyper_threading_pr'
Benchmark 1: hyper_threading_main threads: 16
  Time (mean ± σ):      9.627 s ±  0.190 s    [User: 35.881 s, System: 1.088 s]
  Range (min … max):    9.493 s …  9.761 s    2 runs

Benchmark 2: hyper_threading_pr threads: 16
  Time (mean ± σ):      9.828 s ±  0.084 s    [User: 35.701 s, System: 1.036 s]
  Range (min … max):    9.768 s …  9.888 s    2 runs

Summary
  'hyper_threading_main threads: 16' ran
    1.02 ± 0.02 times faster than 'hyper_threading_pr threads: 16'
codecov[bot] commented 2 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 94.80%. Comparing base (7796f24) to head (f525cb1).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## main #1725 +/- ## ======================================= Coverage 94.80% 94.80% ======================================= Files 100 100 Lines 38212 38213 +1 ======================================= + Hits 36225 36228 +3 + Misses 1987 1985 -2 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

github-actions[bot] commented 2 months ago

Benchmark Results for unmodified programs :rocket:

Command Mean [s] Min [s] Max [s] Relative
base big_factorial 1.925 ± 0.060 1.875 2.089 1.01 ± 0.04
head big_factorial 1.900 ± 0.047 1.866 2.014 1.00
Command Mean [s] Min [s] Max [s] Relative
base big_fibonacci 1.847 ± 0.049 1.806 1.977 1.00 ± 0.04
head big_fibonacci 1.839 ± 0.058 1.789 1.977 1.00
Command Mean [s] Min [s] Max [s] Relative
base blake2s_integration_benchmark 6.407 ± 0.133 6.247 6.694 1.00
head blake2s_integration_benchmark 6.458 ± 0.222 6.276 6.967 1.01 ± 0.04
Command Mean [s] Min [s] Max [s] Relative
base compare_arrays_200000 1.900 ± 0.035 1.862 1.964 1.01 ± 0.02
head compare_arrays_200000 1.888 ± 0.024 1.857 1.917 1.00
Command Mean [s] Min [s] Max [s] Relative
base dict_integration_benchmark 1.288 ± 0.017 1.268 1.312 1.01 ± 0.02
head dict_integration_benchmark 1.275 ± 0.011 1.264 1.295 1.00
Command Mean [s] Min [s] Max [s] Relative
base field_arithmetic_get_square_benchmark 1.156 ± 0.014 1.133 1.170 1.00 ± 0.02
head field_arithmetic_get_square_benchmark 1.155 ± 0.018 1.141 1.199 1.00
Command Mean [s] Min [s] Max [s] Relative
base integration_builtins 6.565 ± 0.119 6.349 6.770 1.00
head integration_builtins 6.575 ± 0.326 6.309 7.198 1.00 ± 0.05
Command Mean [s] Min [s] Max [s] Relative
base keccak_integration_benchmark 6.655 ± 0.125 6.547 6.972 1.00
head keccak_integration_benchmark 6.692 ± 0.148 6.517 6.917 1.01 ± 0.03
Command Mean [s] Min [s] Max [s] Relative
base linear_search 1.906 ± 0.023 1.887 1.947 1.00
head linear_search 1.923 ± 0.026 1.887 1.966 1.01 ± 0.02
Command Mean [s] Min [s] Max [s] Relative
base math_cmp_and_pow_integration_benchmark 1.653 ± 0.016 1.638 1.681 1.00
head math_cmp_and_pow_integration_benchmark 1.672 ± 0.026 1.642 1.730 1.01 ± 0.02
Command Mean [s] Min [s] Max [s] Relative
base math_integration_benchmark 1.450 ± 0.014 1.428 1.466 1.00
head math_integration_benchmark 1.454 ± 0.018 1.432 1.483 1.00 ± 0.02
Command Mean [s] Min [s] Max [s] Relative
base memory_integration_benchmark 1.113 ± 0.015 1.093 1.128 1.00
head memory_integration_benchmark 1.120 ± 0.013 1.102 1.135 1.01 ± 0.02
Command Mean [s] Min [s] Max [s] Relative
base operations_with_data_structures_benchmarks 1.751 ± 0.016 1.730 1.769 1.01 ± 0.01
head operations_with_data_structures_benchmarks 1.737 ± 0.014 1.723 1.757 1.00
Command Mean [ms] Min [ms] Max [ms] Relative
base pedersen 508.7 ± 12.2 496.3 535.1 1.02 ± 0.03
head pedersen 500.4 ± 3.8 496.0 507.2 1.00
Command Mean [ms] Min [ms] Max [ms] Relative
base poseidon_integration_benchmark 949.7 ± 11.5 933.4 966.0 1.01 ± 0.02
head poseidon_integration_benchmark 942.6 ± 9.0 930.9 960.8 1.00
Command Mean [s] Min [s] Max [s] Relative
base secp_integration_benchmark 1.727 ± 0.019 1.714 1.776 1.00
head secp_integration_benchmark 1.742 ± 0.025 1.716 1.800 1.01 ± 0.02
Command Mean [ms] Min [ms] Max [ms] Relative
base set_integration_benchmark 704.0 ± 7.5 698.8 723.6 1.00
head set_integration_benchmark 708.5 ± 10.9 699.8 737.4 1.01 ± 0.02
Command Mean [s] Min [s] Max [s] Relative
base uint256_integration_benchmark 3.709 ± 0.052 3.664 3.788 1.00
head uint256_integration_benchmark 3.804 ± 0.172 3.662 4.253 1.03 ± 0.05