Kaynağa Gözat

pallas_base FFT test

x 3 yıl önce
ebeveyn
işleme
db13a21413

+ 55 - 1
script/research/zk/fft/benchmark-fft.sage

@@ -178,8 +178,62 @@ def test_root_of_unity():
     print(f"ω = {ω}")
     print()
 
+def pallas_base_test():
+    print("Pallas base Fp test")
+    d = 11
+    print(f"n = 2^{d}")
+    p = 28948022309329048855892746252171976963363056481941560715954676764349967630337
+    n = 2^d
+    K = GF(p, repr="int")
+    ω = K(5)^((p - 1)/n)
+    assert ω^n == 1
+    assert ω^(n - 1) != 1
+    ω_powers = vector(ω^i for i in range(n/2))
+
+    table = []
+    number_trials = 10
+    total_dft_duration, total_naive_duration = 0, 0
+    for trial_i in range(number_trials):
+        print(f"Trial: {trial_i}")
+        print("Generating random polynomial...")
+        fT = ([K.random_element() for _ in range(n/2)]
+              + [K(0) for _ in range(n/2)])
+        assert len(fT) == n
+
+        start = time.time()
+        dft = calc_dft(n, ω_powers, fT)
+        dft_duration = time.time() - start
+
+        print(f"DFT time: {dft_duration}")
+
+        def eval_poly(fT, x):
+            accum = 0
+            current_x = 1
+            for a in fT:
+                accum += a*current_x
+                current_x *= x
+            return accum
+
+        start = time.time()
+        evals = [eval_poly(fT, ω^i) for i in range(n)]
+        eval_duration = time.time() - start
+
+        print(f"Eval time: {eval_duration}")
+        print()
+
+        table.append((trial_i, f"{dft_duration:.5f}", f"{eval_duration:.5f}"))
+        total_dft_duration += dft_duration
+        total_naive_duration += eval_duration
+
+    avg_dft = total_dft_duration / number_trials
+    avg_naive = total_naive_duration / number_trials
+    table.append(("", "", ""))
+    table.append(("Average:", f"{avg_dft:.5f}", f"{avg_naive:.5f}"))
+    print(tabulate(table, headers=["#", "DFT", "Naive"]))
+
+pallas_base_test()
 #test1()
-timing_info()
+#timing_info()
 #random_test()
 #for i in range(50):
 #    test_root_of_unity()

+ 67 - 0
script/research/zk/fft/pallas_test.txt

@@ -0,0 +1,67 @@
+Pallas base Fp test
+n = 2^13
+Trial: 0
+Generating random polynomial...
+DFT time: 1.1284587383270264
+Eval time: 119.17004179954529
+
+Trial: 1
+Generating random polynomial...
+DFT time: 4.4929492473602295
+Eval time: 175.590922832489
+
+Trial: 2
+Generating random polynomial...
+DFT time: 4.509522914886475
+Eval time: 173.64100193977356
+
+Trial: 3
+Generating random polynomial...
+DFT time: 4.5000691413879395
+Eval time: 177.55537366867065
+
+Trial: 4
+Generating random polynomial...
+DFT time: 4.47330904006958
+Eval time: 177.98394203186035
+
+Trial: 5
+Generating random polynomial...
+DFT time: 4.454346179962158
+Eval time: 178.4333655834198
+
+Trial: 6
+Generating random polynomial...
+DFT time: 4.436606168746948
+Eval time: 178.82195281982422
+
+Trial: 7
+Generating random polynomial...
+DFT time: 4.422141790390015
+Eval time: 178.92308521270752
+
+Trial: 8
+Generating random polynomial...
+DFT time: 4.416403293609619
+Eval time: 178.4114100933075
+
+Trial: 9
+Generating random polynomial...
+DFT time: 4.546687841415405
+Eval time: 180.261412858963
+
+#         DFT      Naive
+--------  -------  ---------
+0         1.12846  119.17004
+1         4.49295  175.59092
+2         4.50952  173.64100
+3         4.50007  177.55537
+4         4.47331  177.98394
+5         4.45435  178.43337
+6         4.43661  178.82195
+7         4.42214  178.92309
+8         4.41640  178.41141
+9         4.54669  180.26141
+
+Average:  4.13805  171.87925
+