Skip to content

Instantly share code, notes, and snippets.

@sshravan
Last active April 7, 2021 15:22
Show Gist options
  • Save sshravan/4d5179a5a021f6beebc0bc46a1cf64fb to your computer and use it in GitHub Desktop.
Save sshravan/4d5179a5a021f6beebc0bc46a1cf64fb to your computer and use it in GitHub Desktop.

desktop

Running with -curve=bls12-381

DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
BenchmarkG1mul
BenchmarkG1mul-8   	    4000	    106616 ns/op
PASS
ok  	github.com/alinush/go-mcl	0.965s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
BenchmarkG2mul
BenchmarkG2mul-8   	    2000	    245678 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.085s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
BenchmarkPairing
BenchmarkPairing-8   	    1000	   1069554 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.491s
size = 32
Average time per G1 multiexp (784 iters of size 32 each): 1.497ms
Average time per G1 exp: 46µs

Average time per G2 multiexp (238 iters of size 32 each): 5.062ms
Average time per G2 exp: 158µs

size = 3
Average time per multi-pairing (687 iters of size 3 each): 1.723ms
Average time per pairing: 574µs

size = 10
Average time per multi-pairing (306 iters of size 10 each): 3.855ms
Average time per pairing: 385µs

s

Running with -curve=bls12-381

DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
BenchmarkG1mul
BenchmarkG1mul-8   	    4000	     91384 ns/op
PASS
ok  	github.com/alinush/go-mcl	0.882s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
BenchmarkG2mul
BenchmarkG2mul-8   	    2000	    166923 ns/op
PASS
ok  	github.com/alinush/go-mcl	0.805s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513 
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512 
DEBU[0000] Selected curve: bls12-381 (5)                
DEBU[0000] GetMaxOpUnitSize() = 6                       
DEBU[0000] GetFrUnitSize() = 4                          
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
cpu: Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz
BenchmarkPairing
BenchmarkPairing-8   	    1000	    806713 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.170s
size = 32
Average time per G1 multiexp (898 iters of size 32 each): 1.314ms
Average time per G1 exp: 41µs

Average time per G2 multiexp (352 iters of size 32 each): 3.434ms
Average time per G2 exp: 107µs

size = 3
Average time per multi-pairing (937 iters of size 3 each): 1.239ms
Average time per pairing: 413µs

size = 10
Average time per multi-pairing (432 iters of size 10 each): 2.875ms
Average time per pairing: 287µs

Amazon EC2 c4 32GB machine

DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512
DEBU[0000] Selected curve: bls12-381 (5)
DEBU[0000] GetMaxOpUnitSize() = 6
DEBU[0000] GetFrUnitSize() = 4
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
BenchmarkG1mul
BenchmarkG1mul-16    	    4000	    120781 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.182s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512
DEBU[0000] Selected curve: bls12-381 (5)
DEBU[0000] GetMaxOpUnitSize() = 6
DEBU[0000] GetFrUnitSize() = 4
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
BenchmarkG2mul
BenchmarkG2mul-16    	    2000	    285207 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.297s
DEBU[0000] Order of field "in the exponent" F_r:     52435875175126190479447740508185965837690552500527637822603658699938581184513
DEBU[0000] Order of multiplicative subgroup G_{r-1}: 52435875175126190479447740508185965837690552500527637822603658699938581184512
DEBU[0000] Selected curve: bls12-381 (5)
DEBU[0000] GetMaxOpUnitSize() = 6
DEBU[0000] GetFrUnitSize() = 4
goos: linux
goarch: amd64
pkg: github.com/alinush/go-mcl
BenchmarkPairing
BenchmarkPairing-16    	    1000	   1311386 ns/op
PASS
ok  	github.com/alinush/go-mcl	1.830s
size = 32
Average time per G1 multiexp (661 iters of size 32 each): 1.814ms
Average time per G1 exp: 56µs

Average time per G2 multiexp (193 iters of size 32 each): 6.069ms
Average time per G2 exp: 189µs

size = 3
Average time per multi-pairing (582 iters of size 3 each): 2.114ms
Average time per pairing: 704µs

size = 10
Average time per multi-pairing (254 iters of size 10 each): 4.699ms
Average time per pairing: 469µs

New benchmarks

desktop

Hello, World!
Done generating the data
Time per G1Neg (100 iters):                                                 0.064 us
Time per G1Add (100 iters):                                                 0.898 us
Time per G1Sub (100 iters):                                                 0.927 us
Time per G1Mul (100 iters):                                               106.441 us
Time per G1MulVec (size 2; 100 iters):                                    149.072 us
Time per G1MulVec (per exp; 100 iters):                                    74.536 us
Time per G1MulVec (size 32; 100 iters):                                 1,493.833 us
Time per G1MulVec (per exp; 100 iters):                                    46.682 us
Time per G1MulVec (size 1,000; 100 iters):                             46,566.230 us
Time per G1MulVec (per exp; 100 iters):                                    46.566 us
=============================================
Time per G2Neg (100 iters):                                                 0.070 us
Time per G2Add (100 iters):                                                 2.969 us
Time per G2Sub (100 iters):                                                 3.021 us
Time per G2Mul (100 iters):                                               250.233 us
Time per G2MulVec (size 2; 100 iters):                                    414.164 us
Time per G2MulVec (per exp; 100 iters):                                   207.082 us
Time per G2MulVec (size 32; 100 iters):                                 4,986.298 us
Time per G2MulVec (per exp; 100 iters):                                   155.822 us
Time per G2MulVec (size 1,000; 100 iters):                            155,958.569 us
Time per G2MulVec (per exp; 100 iters):                                   155.959 us
=============================================
Time per FrNeg (100 iters):                                                 0.055 us
Time per FrInv (100 iters):                                                 2.275 us
Time per FrAdd (100 iters):                                                 0.061 us
Time per FrSub (100 iters):                                                 0.068 us
Time per FrMul (100 iters):                                                 0.074 us
Time per FrCopy (100 iters):                                                0.006 us
=============================================
Done generating the data
Time per GTMul (100 iters):                                                 3.121 us
Time per GTPow (100 iters):                                               338.382 us
Time per FinalExp (100 iters):                                            585.454 us
Time per MillerLoop (100 iters):                                          465.129 us
Time per MillerLoopVec (size 2; 100 iters):                               767.928 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       383.964 us
Time per MillerLoopVec (size 32; 100 iters):                           10,169.551 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       317.798 us
Time per MillerLoopVec (size 1,000; 100 iters):                       317,412.341 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       317.412 us
=============================================
Time per Pairing (100 iters):                                           1,077.021 us
Time per Multi-Pairing (size 2; 100 iters):                             1,361.435 us
Time per Multi-Pairing (per pairing; 100 iters):                          680.717 us
Time per Multi-Pairing (size 32; 100 iters):                           10,814.381 us
Time per Multi-Pairing (per pairing; 100 iters):                          337.949 us
Time per Multi-Pairing (size 1,000; 100 iters):                       317,680.259 us
Time per Multi-Pairing (per pairing; 100 iters):                          317.680 us
=============================================
Time per FrIsEqual (size 1,000; 100 iters):                                 0.058 us
Time per G1IsEqual (size 1,000; 100 iters):                                 0.276 us
Time per G2IsEqual (size 1,000; 100 iters):                                 0.739 us
Time per GTIsEqual (size 1,000; 100 iters):                                 0.060 us
=============================================

s

Hello, World!
Done generating the data
Time per G1Neg (100 iters):                                                 0.076 us
Time per G1Add (100 iters):                                                 0.752 us
Time per G1Sub (100 iters):                                                 0.732 us
Time per G1Mul (100 iters):                                                94.906 us
Time per G1MulVec (size 2; 100 iters):                                    121.065 us
Time per G1MulVec (per exp; 100 iters):                                    60.532 us
Time per G1MulVec (size 32; 100 iters):                                 1,289.067 us
Time per G1MulVec (per exp; 100 iters):                                    40.283 us
Time per G1MulVec (size 1,000; 100 iters):                             42,561.404 us
Time per G1MulVec (per exp; 100 iters):                                    42.561 us
=============================================
Time per G2Neg (100 iters):                                                 0.093 us
Time per G2Add (100 iters):                                                 1.964 us
Time per G2Sub (100 iters):                                                 1.974 us
Time per G2Mul (100 iters):                                               173.934 us
Time per G2MulVec (size 2; 100 iters):                                    274.295 us
Time per G2MulVec (per exp; 100 iters):                                   137.148 us
Time per G2MulVec (size 32; 100 iters):                                 3,250.826 us
Time per G2MulVec (per exp; 100 iters):                                   101.588 us
Time per G2MulVec (size 1,000; 100 iters):                            103,910.564 us
Time per G2MulVec (per exp; 100 iters):                                   103.911 us
=============================================
Time per FrNeg (100 iters):                                                 0.066 us
Time per FrInv (100 iters):                                                 2.857 us
Time per FrAdd (100 iters):                                                 0.068 us
Time per FrSub (100 iters):                                                 0.067 us
Time per FrMul (100 iters):                                                 0.093 us
Time per FrCopy (100 iters):                                                0.006 us
=============================================
Done generating the data
Time per GTMul (100 iters):                                                 2.529 us
Time per GTPow (100 iters):                                               273.752 us
Time per FinalExp (100 iters):                                            476.427 us
Time per MillerLoop (100 iters):                                          342.475 us
Time per MillerLoopVec (size 2; 100 iters):                               565.719 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       282.860 us
Time per MillerLoopVec (size 32; 100 iters):                            7,148.412 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       223.388 us
Time per MillerLoopVec (size 1,000; 100 iters):                       225,803.023 us
Time per MillerLoopVec (per MillerLoop; 100 iters):                       225.803 us
=============================================
Time per Pairing (100 iters):                                             802.207 us
Time per Multi-Pairing (size 2; 100 iters):                             1,014.362 us
Time per Multi-Pairing (per pairing; 100 iters):                          507.181 us
Time per Multi-Pairing (size 32; 100 iters):                            7,441.721 us
Time per Multi-Pairing (per pairing; 100 iters):                          232.554 us
Time per Multi-Pairing (size 1,000; 100 iters):                       220,443.293 us
Time per Multi-Pairing (per pairing; 100 iters):                          220.443 us
=============================================
Time per FrIsEqual (size 1,000; 100 iters):                                 0.077 us
Time per G1IsEqual (size 1,000; 100 iters):                                 0.247 us
Time per G2IsEqual (size 1,000; 100 iters):                                 0.518 us
Time per GTIsEqual (size 1,000; 100 iters):                                 0.075 us
=============================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment