/ benchmarks / bench.nim
bench.nim
1 import ../bncurve, std/[monotimes, os, strutils, times] 2 3 template bench(desc: string, reps: int, body: untyped) = 4 if paramCount() < 1 or desc.contains(paramStr(1)): 5 let start = getMonoTime() 6 for _ in 0..<reps: 7 body 8 let stop = getMonoTime() 9 echo desc,": ", inNanoseconds(stop-start) div reps, " ns" 10 11 var g11 = G1.random() 12 var g12 = G1.random() 13 14 var fr = FR.random() 15 16 var g21 = G2.random() 17 var g22 = G2.random() 18 19 var a11 = g11.toAffine().get() 20 var a12 = g12.toAffine().get() 21 var a21 = g21.toAffine().get() 22 var a22 = g22.toAffine().get() 23 24 bench "G1 Jacobian add", 100000: 25 g11 = g11 + g12 26 27 bench "G1 toAffine", 100000: 28 a11 = g11.toAffine().get() 29 30 bench "G2 Jacobian add", 100000: 31 g21 = g21 + g22 32 33 bench "G2 toAffine", 100000: 34 a21 = g21.toAffine().get() 35 36 bench "G1 Jacobian mul", 10000: 37 g11 = g11 * fr 38 39 bench "G2 Jacobian mul", 1000: 40 g21 = g21 * fr 41 42 var acc: FQ12 43 44 bench "Pairing", 1000: 45 acc = pairing(g11, g21)