3个不稳定版本

0.2.0 2020年10月19日
0.1.1 2019年10月7日
0.1.0 2019年10月7日

#850 in 数学

每月47次下载
用于5个crate(4个直接使用)

Apache-2.0

275KB
6K SLoC

OpenZKP素域

Crates.io CircleCI Codecov

适用于FFT的251位素域。

目标

  • 性能针对本地和WebAssembly优化
  • 通用性
  • 以后:恒时操作。
  • 优先使用const fn而不是过程宏。

优化时存在几种不同的场景

注意:模数始终假设为256位或更少。

  • 程序员时间已知字段。程序员可以提供各种算法的手动调优优化实现。理想情况下应提供性能良好的默认设置。
  • 编译器时间已知字段。编译器可以计算常数,例如Montgomery表示。域参数应该内联。
  • 静态运行时已知字段。模数在编译时未知(但大小已知)。特定域的元素成员资格在编译时已知。域参数应该静态分配,指针内联。
  • 动态运行时已知字段。模数在编译时未知(但大小已知)。特定域的元素成员资格在编译时未知。域元素应该携带指向域参数的指针。

基准测试

检出master分支

cargo bench --bench benchmark -- --save-baseline master
cargo bench --bench benchmark -- --baseline master
open target/criterion/report/index.html

使用Mac OS的仪器进行基准测试。为此,我们需要Cargo的cargo-instruments插件。

cargo install cargo-instruments

然后您可以在分析下运行测试。建议筛选特定测试。

cargo instruments --release --bench benchmark --open [test name]
instruments -t "Time Profiler"  target/release/deps/benchmark-c7230d017f7da1a3 --bench cache

参考和基准

参考

依赖

~2.1–4MB
~71K SLoC