mratsim / constantine

Constantine: modular, high-performance, zero-dependency cryptography stack for verifiable computation, proof systems and blockchain protocols.
Other
391 stars 43 forks source link

EVM precompiles - SHA256 and BN254 #376

Closed mratsim closed 4 months ago

mratsim commented 4 months ago

This adds a benchmark for BN254 precompiles and support for SHA256 precompile.

Bench on Ryzen 7840U

CC=clang nimble bench_eth_evm_precompiles

image

--------------------------------------------------------------------------------------------------------------------------------
SHA256 -  32 bytes            72 gas    2117.65 MGas/s    29411764.706 ops/s           34 ns/op          114 CPU cycles (approx)
SHA256 -  64 bytes            84 gas    1714.29 MGas/s    20408163.265 ops/s           49 ns/op          161 CPU cycles (approx)
SHA256 -  96 bytes            96 gas    1959.18 MGas/s    20408163.265 ops/s           49 ns/op          163 CPU cycles (approx)
SHA256 - 128 bytes           108 gas    1459.46 MGas/s    13513513.514 ops/s           74 ns/op          245 CPU cycles (approx)
SHA256 - 160 bytes           120 gas    1600.00 MGas/s    13333333.333 ops/s           75 ns/op          247 CPU cycles (approx)
SHA256 - 192 bytes           132 gas    1333.33 MGas/s    10101010.101 ops/s           99 ns/op          326 CPU cycles (approx)
SHA256 - 224 bytes           144 gas    1425.74 MGas/s     9900990.099 ops/s          101 ns/op          333 CPU cycles (approx)
SHA256 - 256 bytes           156 gas    1200.00 MGas/s     7692307.692 ops/s          130 ns/op          429 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BN254_G1ADD                  150 gas      92.88 MGas/s      619195.046 ops/s         1615 ns/op         5321 CPU cycles (approx)
BN254_G1MUL                 6000 gas     234.48 MGas/s       39079.292 ops/s        25589 ns/op        84284 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BN254_PAIRINGCHECK 1       79000 gas     202.61 MGas/s        2564.648 ops/s       389917 ns/op      1284241 CPU cycles (approx)
BN254_PAIRINGCHECK 2      113000 gas     205.44 MGas/s        1818.066 ops/s       550035 ns/op      1811617 CPU cycles (approx)
BN254_PAIRINGCHECK 3      147000 gas     205.72 MGas/s        1399.443 ops/s       714570 ns/op      2353553 CPU cycles (approx)
BN254_PAIRINGCHECK 4      181000 gas     207.10 MGas/s        1144.199 ops/s       873974 ns/op      2878570 CPU cycles (approx)
BN254_PAIRINGCHECK 5      215000 gas     205.83 MGas/s         957.353 ops/s      1044547 ns/op      3440385 CPU cycles (approx)
BN254_PAIRINGCHECK 6      249000 gas     208.77 MGas/s         838.437 ops/s      1192696 ns/op      3928333 CPU cycles (approx)
BN254_PAIRINGCHECK 7      283000 gas     183.55 MGas/s         648.591 ops/s      1541804 ns/op      5078185 CPU cycles (approx)
BN254_PAIRINGCHECK 8      317000 gas     205.62 MGas/s         648.647 ops/s      1541670 ns/op      5077739 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BLS12_G1ADD                  500 gas     172.06 MGas/s      344115.623 ops/s         2906 ns/op         9572 CPU cycles (approx)
BLS12_G2ADD                  800 gas     203.30 MGas/s      254129.606 ops/s         3935 ns/op        12960 CPU cycles (approx)
BLS12_G1MUL                12000 gas     146.57 MGas/s       12214.486 ops/s        81870 ns/op       269654 CPU cycles (approx)
BLS12_G2MUL                45000 gas     349.88 MGas/s        7775.022 ops/s       128617 ns/op       423623 CPU cycles (approx)
BLS12_MAP_FP_TO_G1          5500 gas     162.56 MGas/s       29556.068 ops/s        33834 ns/op       111439 CPU cycles (approx)
BLS12_MAP_FP2_TO_G2        75000 gas     702.31 MGas/s        9364.173 ops/s       106790 ns/op       351733 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BLS12_PAIRINGCHECK 1      108000 gas     234.83 MGas/s        2174.390 ops/s       459899 ns/op      1514739 CPU cycles (approx)
BLS12_PAIRINGCHECK 2      151000 gas     242.23 MGas/s        1604.145 ops/s       623385 ns/op      2053210 CPU cycles (approx)
BLS12_PAIRINGCHECK 3      194000 gas     242.44 MGas/s        1249.711 ops/s       800185 ns/op      2635535 CPU cycles (approx)
BLS12_PAIRINGCHECK 4      237000 gas     243.68 MGas/s        1028.169 ops/s       972603 ns/op      3203422 CPU cycles (approx)
BLS12_PAIRINGCHECK 5      280000 gas     243.03 MGas/s         867.957 ops/s      1152131 ns/op      3794722 CPU cycles (approx)
BLS12_PAIRINGCHECK 6      323000 gas     203.64 MGas/s         630.460 ops/s      1586144 ns/op      5224160 CPU cycles (approx)
BLS12_PAIRINGCHECK 7      366000 gas     223.21 MGas/s         609.866 ops/s      1639704 ns/op      5400588 CPU cycles (approx)
BLS12_PAIRINGCHECK 8      409000 gas     223.22 MGas/s         545.768 ops/s      1832279 ns/op      6034865 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BLS12_G1MSM   2            21312 gas     120.53 MGas/s        5655.469 ops/s       176820 ns/op       582377 CPU cycles (approx)
BLS12_G1MSM   4            30768 gas     101.18 MGas/s        3288.392 ops/s       304100 ns/op      1001592 CPU cycles (approx)
BLS12_G1MSM   8            43488 gas      82.00 MGas/s        1885.558 ops/s       530347 ns/op      1746772 CPU cycles (approx)
BLS12_G1MSM  16            64128 gas      67.17 MGas/s        1047.452 ops/s       954698 ns/op      3144454 CPU cycles (approx)
BLS12_G1MSM  32           103296 gas      58.75 MGas/s         568.737 ops/s      1758282 ns/op      5791189 CPU cycles (approx)
BLS12_G1MSM  64           170496 gas      51.16 MGas/s         300.083 ops/s      3332407 ns/op     10975839 CPU cycles (approx)
BLS12_G1MSM 128           267264 gas      42.32 MGas/s         158.335 ops/s      6315731 ns/op     20801919 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------
BLS12_G2MSM   2            79920 gas     273.26 MGas/s        3419.224 ops/s       292464 ns/op       963266 CPU cycles (approx)
BLS12_G2MSM   4           115380 gas     166.78 MGas/s        1445.473 ops/s       691815 ns/op      2278600 CPU cycles (approx)
BLS12_G2MSM   8           163080 gas     176.59 MGas/s        1082.859 ops/s       923481 ns/op      3041633 CPU cycles (approx)
BLS12_G2MSM  16           240480 gas     151.50 MGas/s         630.007 ops/s      1587285 ns/op      5227985 CPU cycles (approx)
BLS12_G2MSM  32           387360 gas     137.60 MGas/s         355.231 ops/s      2815073 ns/op      9271911 CPU cycles (approx)
BLS12_G2MSM  64           639360 gas     118.29 MGas/s         185.020 ops/s      5404829 ns/op     17801714 CPU cycles (approx)
BLS12_G2MSM 128          1002240 gas     102.00 MGas/s         101.775 ops/s      9825581 ns/op     32362139 CPU cycles (approx)
--------------------------------------------------------------------------------------------------------------------------------