Files
lattice/ring/ntt_benchmark_test.go
zeekay eaf864890e feat: release v7.0.0 with GPU acceleration and module update
- Update module path to github.com/luxfi/lattice/v7
- Add GPU acceleration with Metal (macOS) and CUDA backends
- Enhance threshold FHE operations
- Revert to vanilla Apache 2.0 license (remove tfhe)
- Update Go version to 1.25.5
- Merge upstream lattigo improvements
2025-12-30 15:37:37 -08:00

66 lines
1.2 KiB
Go

package ring
import (
"fmt"
"testing"
"github.com/luxfi/lattice/v7/utils/sampling"
)
func BenchmarkNTT(b *testing.B) {
benchNTT(10, 1, b)
benchNTT(11, 1, b)
benchNTT(12, 1, b)
benchNTT(13, 1, b)
benchNTT(14, 1, b)
benchNTT(15, 1, b)
benchNTT(16, 1, b)
benchINTT(10, 1, b)
benchINTT(11, 1, b)
benchINTT(12, 1, b)
benchINTT(13, 1, b)
benchINTT(14, 1, b)
benchINTT(15, 1, b)
benchINTT(16, 1, b)
}
func benchNTT(LogN, Qi int, b *testing.B) {
b.Run(fmt.Sprintf("Forward/N=%d/Qi=%d", 1<<LogN, Qi), func(b *testing.B) {
r, err := NewRing(1<<LogN, Qi60[:Qi])
if err != nil {
b.Fatal(err)
}
prng, err := sampling.NewPRNG()
if err != nil {
b.Fatal(err)
}
p := NewUniformSampler(prng, r).ReadNew()
b.ResetTimer()
for i := 0; i < b.N; i++ {
r.NTT(p, p)
}
})
}
func benchINTT(LogN, Qi int, b *testing.B) {
b.Run(fmt.Sprintf("Backward/N=%d/Qi=%d", 1<<LogN, Qi), func(b *testing.B) {
r, err := NewRing(1<<LogN, Qi60[:Qi])
if err != nil {
b.Fatal(err)
}
prng, err := sampling.NewPRNG()
if err != nil {
b.Fatal(err)
}
p := NewUniformSampler(prng, r).ReadNew()
b.ResetTimer()
for i := 0; i < b.N; i++ {
r.INTT(p, p)
}
})
}