Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ssa): More aggressive Brillig loop unrolling #7236

Draft
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

vezenovm
Copy link
Contributor

Description

Problem*

Resolves #7099

Summary*

Still a draft, needs lots of cleanup and tests, but I want to see the reports on CI.

Additional Context

Documentation*

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [For Experimental Features] Documentation to be submitted in a separate PR.

PR Checklist*

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

Copy link
Contributor

github-actions bot commented Jan 30, 2025

Changes to number of Brillig opcodes executed

Generated at commit: 0b50d77d8de38006117dd546dc2ed7d5ecd2c638, compared to commit: 0c6c6371c6d0a19be3f4347678fab52f6c91f79a

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
pedersen_hash_inliner_min -365 ✅ -66.61%
side_effects_constrain_array_inliner_max -55 ✅ -67.07%
regression_inliner_zero -2,049 ✅ -75.33%
pedersen_hash_inliner_zero -365 ✅ -75.41%
global_var_regression_simple_inliner_max -86 ✅ -75.44%
global_var_regression_simple_inliner_zero -86 ✅ -75.44%
pedersen_hash_inliner_max -368 ✅ -76.03%
merkle_insert_inliner_zero -2,780 ✅ -76.42%
regression_inliner_max -2,049 ✅ -76.63%
regression_struct_array_conditional_inliner_max -1,165 ✅ -79.20%
regression_struct_array_conditional_inliner_min -1,165 ✅ -79.20%
regression_struct_array_conditional_inliner_zero -1,165 ✅ -79.20%
merkle_insert_inliner_max -2,834 ✅ -80.90%
generics_inliner_max -104 ✅ -82.54%
fold_complex_outputs_inliner_max -662 ✅ -90.19%
brillig_rc_regression_6123_inliner_max -270 ✅ -93.75%
brillig_rc_regression_6123_inliner_zero -270 ✅ -93.75%
regression_7128_inliner_min -1,146 ✅ -93.86%
regression_7128_inliner_max -1,146 ✅ -96.38%
regression_7128_inliner_zero -1,146 ✅ -96.38%
global_var_regression_entry_points_inliner_min -135,298 ✅ -99.90%
global_var_regression_entry_points_inliner_zero -135,244 ✅ -99.95%

Full diff report 👇
Program Brillig opcodes (+/-) %
slice_regex_inliner_min 8,585 (-52) -0.60%
u128_inliner_min 47,946 (-567) -1.17%
u128_inliner_zero 40,403 (-570) -1.39%
uhashmap_inliner_min 192,867 (-4,294) -2.18%
u128_inliner_max 23,729 (-554) -2.28%
uhashmap_inliner_zero 171,084 (-4,294) -2.45%
hashmap_inliner_min 87,845 (-2,577) -2.85%
sha256_regression_inliner_min 152,629 (-5,087) -3.23%
sha256_regression_inliner_zero 150,587 (-5,087) -3.27%
sha2_byte_inliner_min 86,174 (-3,297) -3.68%
slice_loop_inliner_min 1,241 (-49) -3.80%
slice_loop_inliner_zero 1,221 (-52) -4.08%
sha256_regression_inliner_max 107,286 (-4,844) -4.32%
sha2_byte_inliner_zero 68,803 (-3,566) -4.93%
hashmap_inliner_zero 70,831 (-3,845) -5.15%
brillig_rc_regression_6123_inliner_min 349 (-19) -5.16%
slice_regex_inliner_max 3,073 (-180) -5.53%
higher_order_functions_inliner_min 2,163 (-128) -5.59%
array_dynamic_blackbox_input_inliner_min 21,104 (-1,294) -5.78%
6_array_inliner_min 2,397 (-164) -6.40%
uhashmap_inliner_max 128,710 (-8,810) -6.41%
array_dynamic_blackbox_input_inliner_max 16,390 (-1,139) -6.50%
6_array_inliner_zero 2,327 (-164) -6.58%
aes128_encrypt_inliner_zero 2,872 (-206) -6.69%
array_dynamic_blackbox_input_inliner_zero 19,804 (-1,507) -7.07%
sha2_byte_inliner_max 40,756 (-3,351) -7.60%
7_function_inliner_min 2,424 (-200) -7.62%
regression_11294_inliner_max 1,142 (-97) -7.83%
sha256_var_size_regression_inliner_min 20,429 (-1,759) -7.93%
keccak256_inliner_min 29,534 (-2,571) -8.01%
keccak256_inliner_zero 29,153 (-2,571) -8.10%
7_function_inliner_zero 2,241 (-200) -8.19%
to_bits_inliner_min 683 (-61) -8.20%
sha256_var_size_regression_inliner_zero 19,640 (-1,793) -8.37%
poseidon2_inliner_min 799 (-74) -8.48%
fold_numeric_generic_poseidon_inliner_zero 5,229 (-490) -8.57%
no_predicates_numeric_generic_poseidon_inliner_zero 5,229 (-490) -8.57%
fold_numeric_generic_poseidon_inliner_min 5,273 (-585) -9.99%
no_predicates_numeric_generic_poseidon_inliner_min 5,273 (-585) -9.99%
poseidon2_inliner_zero 655 (-74) -10.15%
sha256_var_size_regression_inliner_max 14,129 (-1,597) -10.16%
brillig_cow_regression_inliner_min 489,079 (-55,544) -10.20%
ram_blowup_regression_inliner_min 735,824 (-83,875) -10.23%
fold_numeric_generic_poseidon_inliner_max 4,280 (-490) -10.27%
no_predicates_numeric_generic_poseidon_inliner_max 4,280 (-490) -10.27%
brillig_cow_regression_inliner_zero 485,345 (-55,681) -10.29%
ram_blowup_regression_inliner_zero 731,466 (-83,975) -10.30%
ecdsa_secp256k1_inliner_min 7,363 (-847) -10.32%
fold_2_to_17_inliner_min 1,212,125 (-142,932) -10.55%
bench_2_to_17_inliner_min 637,269 (-75,146) -10.55%
6_array_inliner_max 1,374 (-163) -10.61%
fold_2_to_17_inliner_zero 1,174,690 (-142,932) -10.85%
higher_order_functions_inliner_zero 1,186 (-148) -11.09%
array_to_slice_inliner_min 1,998 (-263) -11.63%
databus_two_calldata_inliner_max 349 (-46) -11.65%
databus_two_calldata_inliner_min 349 (-46) -11.65%
databus_two_calldata_inliner_zero 349 (-46) -11.65%
signed_div_inliner_max 986 (-130) -11.65%
signed_div_inliner_min 986 (-130) -11.65%
signed_div_inliner_zero 986 (-130) -11.65%
hint_black_box_inliner_min 901 (-120) -11.75%
regression_4449_inliner_min 237,913 (-31,690) -11.75%
aes128_encrypt_inliner_min 3,073 (-412) -11.82%
hint_black_box_inliner_zero 886 (-120) -11.93%
ecdsa_secp256k1_inliner_max 5,667 (-772) -11.99%
brillig_cow_regression_inliner_max 399,903 (-55,490) -12.19%
conditional_1_inliner_min 5,265 (-734) -12.24%
ram_blowup_regression_inliner_max 600,385 (-83,801) -12.25%
bench_2_to_17_inliner_zero 537,573 (-75,146) -12.26%
encrypted_log_regression_inliner_min 791 (-112) -12.40%
ecdsa_secp256k1_inliner_zero 6,668 (-963) -12.62%
conditional_1_inliner_max 4,448 (-656) -12.85%
regression_4449_inliner_max 176,172 (-26,163) -12.93%
bench_2_to_17_inliner_max 493,457 (-76,779) -13.46%
fold_2_to_17_inliner_max 910,594 (-146,039) -13.82%
keccak256_inliner_max 26,125 (-4,539) -14.80%
array_to_slice_inliner_zero 1,670 (-295) -15.01%
hashmap_inliner_max 41,043 (-7,338) -15.17%
poseidon_bn254_hash_inliner_min 157,583 (-28,390) -15.27%
poseidon_bn254_hash_width_3_inliner_min 157,583 (-28,390) -15.27%
slices_inliner_zero 3,040 (-562) -15.60%
conditional_1_inliner_zero 4,661 (-869) -15.71%
poseidon_bn254_hash_inliner_zero 152,879 (-29,606) -16.22%
poseidon_bn254_hash_width_3_inliner_zero 152,879 (-29,606) -16.22%
conditional_regression_short_circuit_inliner_max 5,875 (-1,140) -16.25%
6_inliner_max 5,797 (-1,140) -16.43%
sha256_var_witness_const_regression_inliner_min 6,500 (-1,294) -16.60%
7_function_inliner_max 1,850 (-369) -16.63%
conditional_regression_short_circuit_inliner_min 4,133 (-847) -17.01%
array_dynamic_nested_blackbox_input_inliner_min 4,119 (-847) -17.06%
strings_inliner_min 2,396 (-500) -17.27%
sha256_inliner_min 10,224 (-2,142) -17.32%
6_inliner_min 4,027 (-847) -17.38%
regression_4449_inliner_zero 188,682 (-39,695) -17.38%
sha256_var_witness_const_regression_inliner_max 5,311 (-1,138) -17.65%
array_dynamic_nested_blackbox_input_inliner_max 3,489 (-771) -18.10%
poseidonsponge_x5_254_inliner_min 168,725 (-37,864) -18.33%
slices_inliner_max 2,675 (-601) -18.35%
regression_5252_inliner_min 842,483 (-190,116) -18.41%
sha256_var_witness_const_regression_inliner_zero 5,701 (-1,300) -18.57%
poseidonsponge_x5_254_inliner_zero 164,402 (-37,864) -18.72%
sha256_inliner_zero 9,288 (-2,142) -18.74%
conditional_regression_short_circuit_inliner_zero 3,689 (-852) -18.76%
regression_5252_inliner_zero 818,241 (-190,116) -18.85%
6_inliner_zero 3,611 (-850) -19.05%
aes128_encrypt_inliner_max 2,326 (-553) -19.21%
sha256_inliner_max 10,860 (-2,822) -20.63%
fold_complex_outputs_inliner_min 861 (-224) -20.65%
sha256_var_padding_regression_inliner_min 183,765 (-48,381) -20.84%
sha256_var_padding_regression_inliner_zero 182,276 (-48,371) -20.97%
to_bits_inliner_max 455 (-121) -21.01%
to_bits_inliner_zero 455 (-121) -21.01%
generics_inliner_min 258 (-70) -21.34%
array_dynamic_nested_blackbox_input_inliner_zero 3,526 (-986) -21.85%
higher_order_functions_inliner_max 705 (-202) -22.27%
struct_inputs_inliner_min 514 (-148) -22.36%
poseidon_bn254_hash_inliner_max 117,751 (-33,988) -22.40%
poseidon_bn254_hash_width_3_inliner_max 117,751 (-33,988) -22.40%
sha256_brillig_performance_regression_inliner_min 20,606 (-6,294) -23.40%
nested_array_dynamic_inliner_min 2,763 (-850) -23.53%
nested_array_dynamic_inliner_zero 2,763 (-850) -23.53%
sha256_brillig_performance_regression_inliner_zero 20,110 (-6,409) -24.17%
struct_inputs_inliner_zero 456 (-148) -24.50%
sha256_var_padding_regression_inliner_max 147,573 (-49,375) -25.07%
strings_inliner_zero 1,574 (-527) -25.08%
regression_6674_3_inliner_max 1,045 (-358) -25.52%
regression_6674_3_inliner_zero 1,045 (-358) -25.52%
poseidonsponge_x5_254_inliner_max 126,169 (-45,357) -26.44%
regression_5252_inliner_max 627,213 (-227,008) -26.57%
brillig_cow_inliner_zero 581 (-222) -27.65%
sha256_brillig_performance_regression_inliner_max 15,808 (-6,219) -28.23%
nested_array_in_slice_inliner_min 1,242 (-500) -28.70%
nested_array_in_slice_inliner_zero 1,242 (-500) -28.70%
global_consts_inliner_min 1,210 (-499) -29.20%
global_consts_inliner_max 1,131 (-492) -30.31%
global_consts_inliner_zero 1,131 (-492) -30.31%
tuple_inputs_inliner_min 448 (-199) -30.76%
tuple_inputs_inliner_zero 448 (-199) -30.76%
brillig_cow_inliner_min 971 (-444) -31.38%
poseidon2_inliner_max 459 (-218) -32.20%
array_neq_inliner_min 806 (-398) -33.06%
array_eq_inliner_min 805 (-398) -33.08%
array_neq_inliner_max 792 (-398) -33.45%
array_neq_inliner_zero 792 (-398) -33.45%
array_eq_inliner_max 790 (-398) -33.50%
array_eq_inliner_zero 790 (-398) -33.50%
pedersen_commitment_inliner_zero 146 (-82) -35.96%
side_effects_constrain_array_inliner_min 89 (-50) -35.97%
side_effects_constrain_array_inliner_zero 89 (-50) -35.97%
nested_array_dynamic_inliner_max 2,174 (-1,231) -36.15%
struct_inputs_inliner_max 360 (-209) -36.73%
7_inliner_min 664 (-398) -37.48%
blake3_inliner_min 664 (-398) -37.48%
brillig_blake2s_inliner_min 661 (-398) -37.58%
7_inliner_max 649 (-398) -38.01%
blake3_inliner_max 649 (-398) -38.01%
7_inliner_zero 649 (-398) -38.01%
blake3_inliner_zero 649 (-398) -38.01%
brillig_blake2s_inliner_max 646 (-398) -38.12%
brillig_blake2s_inliner_zero 646 (-398) -38.12%
tuple_inputs_inliner_max 336 (-257) -43.34%
encrypted_log_regression_inliner_max 499 (-387) -43.68%
encrypted_log_regression_inliner_zero 499 (-387) -43.68%
to_be_bytes_inliner_min 1,199 (-931) -43.71%
regression_bignum_inliner_min 308 (-243) -44.10%
regression_inliner_min 1,710 (-1,353) -44.17%
to_be_bytes_inliner_max 1,169 (-927) -44.23%
to_be_bytes_inliner_zero 1,169 (-927) -44.23%
nested_array_in_slice_inliner_max 806 (-656) -44.87%
generics_inliner_zero 123 (-102) -45.33%
hint_black_box_inliner_max 367 (-308) -45.63%
strings_inliner_max 928 (-818) -46.85%
brillig_pedersen_inliner_min 492 (-440) -47.21%
pedersen_check_inliner_min 492 (-440) -47.21%
brillig_pedersen_inliner_max 380 (-340) -47.22%
pedersen_check_inliner_max 380 (-340) -47.22%
simple_shield_inliner_min 1,341 (-1,240) -48.04%
brillig_cow_inliner_max 528 (-569) -51.87%
brillig_pedersen_inliner_zero 339 (-410) -54.74%
pedersen_check_inliner_zero 339 (-410) -54.74%
array_to_slice_inliner_max 712 (-925) -56.51%
simple_shield_inliner_max 1,091 (-1,421) -56.57%
fold_complex_outputs_inliner_zero 369 (-575) -60.91%
simple_shield_inliner_zero 963 (-1,533) -61.42%
merkle_insert_inliner_min 1,276 (-2,150) -62.76%
global_var_regression_simple_inliner_min 79 (-135) -63.08%
regression_bignum_inliner_max 178 (-312) -63.67%
regression_bignum_inliner_zero 178 (-312) -63.67%
pedersen_hash_inliner_min 183 (-365) -66.61%
side_effects_constrain_array_inliner_max 27 (-55) -67.07%
regression_inliner_zero 671 (-2,049) -75.33%
pedersen_hash_inliner_zero 119 (-365) -75.41%
global_var_regression_simple_inliner_max 28 (-86) -75.44%
global_var_regression_simple_inliner_zero 28 (-86) -75.44%
pedersen_hash_inliner_max 116 (-368) -76.03%
merkle_insert_inliner_zero 858 (-2,780) -76.42%
regression_inliner_max 625 (-2,049) -76.63%
regression_struct_array_conditional_inliner_max 306 (-1,165) -79.20%
regression_struct_array_conditional_inliner_min 306 (-1,165) -79.20%
regression_struct_array_conditional_inliner_zero 306 (-1,165) -79.20%
merkle_insert_inliner_max 669 (-2,834) -80.90%
generics_inliner_max 22 (-104) -82.54%
fold_complex_outputs_inliner_max 72 (-662) -90.19%
brillig_rc_regression_6123_inliner_max 18 (-270) -93.75%
brillig_rc_regression_6123_inliner_zero 18 (-270) -93.75%
regression_7128_inliner_min 75 (-1,146) -93.86%
regression_7128_inliner_max 43 (-1,146) -96.38%
regression_7128_inliner_zero 43 (-1,146) -96.38%
global_var_regression_entry_points_inliner_min 134 (-135,298) -99.90%
global_var_regression_entry_points_inliner_zero 67 (-135,244) -99.95%

Copy link
Contributor

github-actions bot commented Jan 30, 2025

Changes to Brillig bytecode sizes

Generated at commit: 0b50d77d8de38006117dd546dc2ed7d5ecd2c638, compared to commit: 0c6c6371c6d0a19be3f4347678fab52f6c91f79a

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
signed_div_inliner_max +683 ❌ +432.28%
signed_div_inliner_min +683 ❌ +432.28%
signed_div_inliner_zero +683 ❌ +432.28%
array_eq_inliner_max +312 ❌ +328.42%
array_eq_inliner_zero +312 ❌ +328.42%
array_neq_inliner_max +250 ❌ +257.73%
array_neq_inliner_zero +250 ❌ +257.73%
array_eq_inliner_min +250 ❌ +235.85%
array_neq_inliner_min +250 ❌ +233.64%
brillig_blake2s_inliner_max +312 ❌ +222.86%
brillig_blake2s_inliner_zero +312 ❌ +222.86%
7_inliner_max +312 ❌ +218.18%
blake3_inliner_max +312 ❌ +218.18%
blake3_inliner_zero +312 ❌ +218.18%
7_inliner_zero +312 ❌ +218.18%
sha256_var_padding_regression_inliner_zero +6,324 ❌ +213.07%
sha256_var_padding_regression_inliner_min +6,284 ❌ +193.71%
brillig_blake2s_inliner_min +250 ❌ +165.56%
blake3_inliner_min +250 ❌ +162.34%
7_inliner_min +250 ❌ +162.34%
sha256_var_padding_regression_inliner_max +7,493 ❌ +150.34%
global_consts_inliner_max +242 ❌ +107.08%
global_consts_inliner_zero +242 ❌ +107.08%

Full diff report 👇
Program Brillig opcodes (+/-) %
signed_div_inliner_max 841 (+683) +432.28%
signed_div_inliner_min 841 (+683) +432.28%
signed_div_inliner_zero 841 (+683) +432.28%
array_eq_inliner_max 407 (+312) +328.42%
array_eq_inliner_zero 407 (+312) +328.42%
array_neq_inliner_max 347 (+250) +257.73%
array_neq_inliner_zero 347 (+250) +257.73%
array_eq_inliner_min 356 (+250) +235.85%
array_neq_inliner_min 357 (+250) +233.64%
brillig_blake2s_inliner_max 452 (+312) +222.86%
brillig_blake2s_inliner_zero 452 (+312) +222.86%
7_inliner_max 455 (+312) +218.18%
blake3_inliner_max 455 (+312) +218.18%
blake3_inliner_zero 455 (+312) +218.18%
7_inliner_zero 455 (+312) +218.18%
sha256_var_padding_regression_inliner_zero 9,292 (+6,324) +213.07%
sha256_var_padding_regression_inliner_min 9,528 (+6,284) +193.71%
brillig_blake2s_inliner_min 401 (+250) +165.56%
blake3_inliner_min 404 (+250) +162.34%
7_inliner_min 404 (+250) +162.34%
sha256_var_padding_regression_inliner_max 12,477 (+7,493) +150.34%
global_consts_inliner_max 468 (+242) +107.08%
global_consts_inliner_zero 468 (+242) +107.08%
global_consts_inliner_min 537 (+272) +102.64%
regression_11294_inliner_max 515 (+254) +97.32%
keccak256_inliner_max 3,464 (+1,356) +64.33%
ram_blowup_regression_inliner_max 1,545 (+603) +64.01%
sha256_var_size_regression_inliner_zero 1,794 (+692) +62.79%
sha2_byte_inliner_max 3,444 (+1,322) +62.30%
brillig_cow_regression_inliner_max 3,341 (+1,253) +60.01%
poseidon2_inliner_max 508 (+183) +56.31%
sha2_byte_inliner_zero 3,452 (+1,230) +55.36%
ram_blowup_regression_inliner_zero 1,483 (+528) +55.29%
brillig_cow_regression_inliner_zero 3,296 (+1,173) +55.25%
to_be_bytes_inliner_max 314 (+110) +53.92%
to_be_bytes_inliner_zero 314 (+110) +53.92%
brillig_cow_regression_inliner_min 3,632 (+1,253) +52.67%
ram_blowup_regression_inliner_min 1,739 (+591) +51.48%
bigint_inliner_max 3,150 (+1,044) +49.57%
regression_4449_inliner_max 1,085 (+348) +47.22%
to_be_bytes_inliner_min 336 (+106) +46.09%
sha256_var_witness_const_regression_inliner_zero 1,172 (+361) +44.51%
6_inliner_zero 1,204 (+361) +42.82%
keccak256_inliner_min 2,369 (+696) +41.60%
sha2_byte_inliner_min 4,255 (+1,249) +41.55%
array_dynamic_blackbox_input_inliner_max 1,194 (+348) +41.13%
sha256_var_size_regression_inliner_max 2,423 (+699) +40.55%
sha256_inliner_max 3,274 (+941) +40.33%
array_dynamic_nested_blackbox_input_inliner_max 1,217 (+349) +40.21%
ecdsa_secp256k1_inliner_max 1,238 (+347) +38.95%
conditional_regression_short_circuit_inliner_zero 1,285 (+360) +38.92%
sha256_brillig_performance_regression_inliner_max 2,297 (+630) +37.79%
keccak256_inliner_zero 2,671 (+696) +35.24%
6_inliner_max 1,540 (+385) +33.33%
sha256_brillig_performance_regression_inliner_min 2,476 (+617) +33.19%
regression_4449_inliner_zero 1,030 (+256) +33.07%
regression_inliner_min 1,487 (+365) +32.53%
sha256_brillig_performance_regression_inliner_zero 2,259 (+552) +32.34%
conditional_regression_short_circuit_inliner_max 1,613 (+385) +31.35%
sha256_var_witness_const_regression_inliner_max 1,661 (+387) +30.38%
ecdsa_secp256k1_inliner_zero 1,186 (+268) +29.19%
array_dynamic_nested_blackbox_input_inliner_zero 1,151 (+256) +28.60%
aes128_encrypt_inliner_zero 500 (+109) +27.88%
sha256_regression_inliner_max 8,631 (+1,870) +27.66%
sha256_var_witness_const_regression_inliner_min 1,266 (+272) +27.36%
6_inliner_min 1,292 (+272) +26.67%
array_dynamic_blackbox_input_inliner_zero 1,296 (+264) +25.58%
regression_4449_inliner_min 1,348 (+272) +25.28%
aes128_encrypt_inliner_max 525 (+105) +25.00%
aes128_encrypt_inliner_min 546 (+109) +24.94%
sha256_var_size_regression_inliner_min 1,569 (+311) +24.72%
fold_2_to_17_inliner_max 699 (+137) +24.38%
conditional_regression_short_circuit_inliner_min 1,393 (+272) +24.26%
sha256_inliner_zero 1,551 (+302) +24.18%
bigint_inliner_zero 2,316 (+438) +23.32%
6_array_inliner_max 475 (+89) +23.06%
array_dynamic_nested_blackbox_input_inliner_min 1,482 (+272) +22.48%
ecdsa_secp256k1_inliner_min 1,495 (+272) +22.24%
bigint_inliner_min 2,434 (+438) +21.94%
bench_2_to_17_inliner_max 387 (+69) +21.70%
array_dynamic_blackbox_input_inliner_min 1,557 (+272) +21.17%
6_array_inliner_zero 533 (+88) +19.78%
databus_two_calldata_inliner_max 251 (+41) +19.52%
databus_two_calldata_inliner_min 251 (+41) +19.52%
databus_two_calldata_inliner_zero 251 (+41) +19.52%
sha256_inliner_min 1,674 (+272) +19.40%
6_array_inliner_min 543 (+88) +19.34%
conditional_1_inliner_max 1,366 (+220) +19.20%
fold_numeric_generic_poseidon_inliner_max 865 (+136) +18.66%
no_predicates_numeric_generic_poseidon_inliner_max 865 (+136) +18.66%
slice_loop_inliner_min 393 (+60) +18.02%
slice_loop_inliner_zero 377 (+57) +17.81%
poseidonsponge_x5_254_inliner_zero 3,534 (+514) +17.02%
poseidonsponge_x5_254_inliner_min 3,682 (+514) +16.22%
regression_5252_inliner_zero 3,941 (+546) +16.08%
regression_5252_inliner_min 4,134 (+546) +15.22%
conditional_1_inliner_min 1,630 (+203) +14.23%
bench_2_to_17_inliner_zero 325 (+35) +12.07%
poseidon2_inliner_zero 333 (+35) +11.74%
poseidon_bn254_hash_inliner_min 5,637 (+589) +11.67%
poseidon_bn254_hash_width_3_inliner_min 5,637 (+589) +11.67%
conditional_1_inliner_zero 1,256 (+130) +11.55%
bench_2_to_17_inliner_min 405 (+35) +9.46%
poseidon2_inliner_min 413 (+35) +9.26%
fold_2_to_17_inliner_min 437 (+35) +8.71%
fold_2_to_17_inliner_zero 437 (+35) +8.71%
poseidon_bn254_hash_width_3_inliner_zero 5,064 (+362) +7.70%
poseidon_bn254_hash_inliner_zero 5,064 (+362) +7.70%
no_predicates_numeric_generic_poseidon_inliner_min 683 (+42) +6.55%
fold_numeric_generic_poseidon_inliner_min 683 (+42) +6.55%
sha256_regression_inliner_zero 5,182 (+302) +6.19%
fold_numeric_generic_poseidon_inliner_zero 608 (+34) +5.92%
no_predicates_numeric_generic_poseidon_inliner_zero 608 (+34) +5.92%
strings_inliner_min 1,200 (+62) +5.45%
regression_6674_3_inliner_max 532 (+26) +5.14%
regression_6674_3_inliner_zero 532 (+26) +5.14%
sha256_regression_inliner_min 5,590 (+272) +5.11%
to_bits_inliner_min 219 (+10) +4.78%
strings_inliner_zero 978 (+41) +4.38%
brillig_cow_inliner_zero 249 (+10) +4.18%
regression_5252_inliner_max 4,621 (+165) +3.70%
hashmap_inliner_zero 8,167 (+279) +3.54%
brillig_cow_inliner_min 331 (+10) +3.12%
struct_inputs_inliner_zero 264 (+7) +2.72%
brillig_rc_regression_6123_inliner_min 242 (+6) +2.54%
struct_inputs_inliner_min 299 (+7) +2.40%
hint_black_box_inliner_zero 380 (+8) +2.15%
hint_black_box_inliner_min 391 (+8) +2.09%
poseidonsponge_x5_254_inliner_max 4,196 (+80) +1.94%
hashmap_inliner_min 9,982 (+152) +1.55%
u128_inliner_min 2,299 (+14) +0.61%
uhashmap_inliner_min 8,411 (+51) +0.61%
slice_regex_inliner_min 2,139 (+12) +0.56%
u128_inliner_zero 1,991 (+11) +0.56%
uhashmap_inliner_zero 7,552 (+37) +0.49%
higher_order_functions_inliner_min 1,361 (+6) +0.44%
fold_complex_outputs_inliner_min 710 (+3) +0.42%
hashmap_inliner_max 19,710 (-56) -0.28%
nested_array_dynamic_inliner_min 1,947 (-8) -0.41%
nested_array_dynamic_inliner_zero 1,947 (-8) -0.41%
nested_array_in_slice_inliner_min 1,010 (-8) -0.79%
nested_array_in_slice_inliner_zero 1,010 (-8) -0.79%
array_to_slice_inliner_min 1,009 (-9) -0.88%
7_function_inliner_min 642 (-8) -1.23%
7_function_inliner_zero 512 (-8) -1.54%
higher_order_functions_inliner_zero 722 (-13) -1.77%
tuple_inputs_inliner_min 299 (-11) -3.55%
tuple_inputs_inliner_zero 299 (-11) -3.55%
u128_inliner_max 2,600 (-96) -3.56%
slice_regex_inliner_max 2,203 (-116) -5.00%
array_to_slice_inliner_zero 709 (-41) -5.47%
hint_black_box_inliner_max 308 (-21) -6.38%
side_effects_constrain_array_inliner_min 116 (-11) -8.66%
side_effects_constrain_array_inliner_zero 116 (-11) -8.66%
poseidon_bn254_hash_inliner_max 4,753 (-520) -9.86%
poseidon_bn254_hash_width_3_inliner_max 4,753 (-520) -9.86%
struct_inputs_inliner_max 244 (-28) -10.29%
uhashmap_inliner_max 11,379 (-1,349) -10.60%
strings_inliner_max 846 (-106) -11.13%
slices_inliner_zero 1,843 (-249) -11.90%
regression_bignum_inliner_min 317 (-44) -12.19%
generics_inliner_min 214 (-30) -12.30%
brillig_cow_inliner_max 324 (-47) -12.67%
slices_inliner_max 1,859 (-273) -12.80%
higher_order_functions_inliner_max 492 (-73) -12.92%
encrypted_log_regression_inliner_min 246 (-43) -14.88%
nested_array_dynamic_inliner_max 1,940 (-487) -20.07%
simple_shield_inliner_max 655 (-171) -20.70%
nested_array_in_slice_inliner_max 894 (-238) -21.02%
tuple_inputs_inliner_max 267 (-73) -21.47%
encrypted_log_regression_inliner_max 199 (-77) -27.90%
encrypted_log_regression_inliner_zero 199 (-77) -27.90%
pedersen_commitment_inliner_zero 134 (-55) -29.10%
simple_shield_inliner_min 609 (-254) -29.43%
to_bits_inliner_max 136 (-58) -29.90%
to_bits_inliner_zero 136 (-58) -29.90%
pedersen_check_inliner_max 353 (-157) -30.78%
brillig_pedersen_inliner_max 353 (-157) -30.78%
simple_shield_inliner_zero 484 (-238) -32.96%
regression_inliner_zero 643 (-326) -33.64%
regression_inliner_max 606 (-326) -34.98%
7_function_inliner_max 356 (-203) -36.31%
array_to_slice_inliner_max 447 (-255) -36.32%
regression_bignum_inliner_max 199 (-117) -37.03%
regression_bignum_inliner_zero 199 (-117) -37.03%
brillig_pedersen_inliner_min 343 (-214) -38.42%
pedersen_check_inliner_min 343 (-214) -38.42%
generics_inliner_zero 99 (-62) -38.51%
regression_struct_array_conditional_inliner_max 318 (-228) -41.76%
regression_struct_array_conditional_inliner_min 318 (-228) -41.76%
regression_struct_array_conditional_inliner_zero 318 (-228) -41.76%
fold_complex_outputs_inliner_zero 324 (-233) -41.83%
merkle_insert_inliner_min 286 (-210) -42.34%
pedersen_check_inliner_zero 283 (-216) -43.29%
brillig_pedersen_inliner_zero 283 (-216) -43.29%
merkle_insert_inliner_zero 257 (-208) -44.73%
merkle_insert_inliner_max 349 (-356) -50.50%
regression_7128_inliner_min 74 (-77) -50.99%
global_var_regression_simple_inliner_min 73 (-94) -56.29%
pedersen_hash_inliner_min 143 (-215) -60.06%
regression_7128_inliner_max 50 (-77) -60.63%
regression_7128_inliner_zero 50 (-77) -60.63%
pedersen_hash_inliner_zero 127 (-207) -61.98%
pedersen_hash_inliner_max 124 (-210) -62.87%
global_var_regression_simple_inliner_max 34 (-69) -66.99%
global_var_regression_simple_inliner_zero 34 (-69) -66.99%
side_effects_constrain_array_inliner_max 37 (-85) -69.67%
generics_inliner_max 26 (-64) -71.11%
fold_complex_outputs_inliner_max 100 (-368) -78.63%
brillig_rc_regression_6123_inliner_max 20 (-149) -88.17%
brillig_rc_regression_6123_inliner_zero 20 (-149) -88.17%
global_var_regression_entry_points_inliner_min 98 (-133,686) -99.93%
global_var_regression_entry_points_inliner_zero 71 (-133,686) -99.95%

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Execution Memory'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 259b2ee Previous: 0c6c637 Ratio
rollup-block-root 4910 MB 1230 MB 3.99

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'Test Suite Duration'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.20.

Benchmark suite Current: 259b2ee Previous: 0c6c637 Ratio
noir-lang_schnorr_ 1 s 0 s +∞
noir-lang_noir_string_search_ 1 s 0 s +∞
noir-lang_mimc_ 1 s 0 s +∞

This comment was automatically generated by workflow using github-action-benchmark.

CC: @TomAFrench

@TomAFrench
Copy link
Member

Just a small improvement in execution speed then 😆

@@ -198,8 +198,8 @@ fn test_{test_name}(force_brillig: ForceBrillig, inliner_aggressiveness: Inliner
nargo.arg("--force-brillig");

// Set the maximum increase so that part of the optimization is exercised (it might fail).
nargo.arg("--max-bytecode-increase-percent");
nargo.arg("50");
// nargo.arg("--max-bytecode-increase-percent");
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Noting that as we unroll more loops, this is potentially going to lead to panics. When we have a non-aggressive inliner the compiler is not going to have yet resolved certain intrinsics which we expect to be entirely known at compile-time (e.g. DerivePedersenGenerators).

@jfecher
Copy link
Contributor

jfecher commented Jan 30, 2025

This'll still be configurable via --inliner-aggressiveness, right?
Wonder what our default value we should target for that is. I wonder if the changes here result in too-large bytecode for example.

@vezenovm
Copy link
Contributor Author

vezenovm commented Jan 30, 2025

This'll still be configurable via --inliner-aggressiveness, right?
Wonder what our default value we should target for that is. I wonder if the changes here result in too-large bytecode for example.

Do you mean --max-bytecode-increase-percent? This flag determines how large of a bytecode size we are willing to tolerate from unrolling Brillig loops.

Yes this will still be configurable. We will have to experiment a bit with what a good default target, as the changes definitely result in too-large of bytecode increases in some cases in my opinion. Right now we default to this flag not being set, although we do test for it in nargo_cli/build.rs. I currently have the flag commented in the tests as it can cause failures (we are attempting to compile to Brillig before certain compile-time intrinsics can be simplified out), and am working on resolving how we can improve this heuristic.

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.

Loops in brillig aren't being unrolled aggressively enough.
3 participants