Crates.io | ark-ff-optimized |
lib.rs | ark-ff-optimized |
version | 0.4.1 |
source | src |
created_at | 2023-02-09 17:50:15.604592 |
updated_at | 2023-05-16 04:58:11.594078 |
description | Optimized field implementations that outperform the generic field implementations in arkworks |
homepage | https://github.com/andrewmilson/optimized-fields |
repository | https://github.com/andrewmilson/optimized-fields |
max_upload_size | |
id | 780951 |
size | 46,599 |
arkworks
field implementationsSpecialized field implementations that outperform the generic, Montgomery arithmetic, field implementations provided in arkworks. Currently only one field has been added. Please contribute an implementation! PRs are welcomed!
p=18446744069414584321
use ark_ff_optimized::fp64::Fp;
An amazing prime with modulus p=2^64−2^32+1
. This field has some nice properties (1) Multiplying two 32-bit values does not overflow the field modulus and (2) Checking whether four 16-bit values form a valid field element can be done efficiently. This field is used in Polygon Miden and Polygon Zero. Implementation was sourced from EcGFp5: a Specialized Elliptic Curve and Facebook's Winterfell repo.
Benchmark |
Generic |
Specialized (this repo) |
---|---|---|
Sum of products of size 2 |
18.04 ns |
7.34 ns (🚀 2.46x faster) |
Inverse |
556.74 ns |
283.87 ns (🚀 1.96x faster) |
Legendre for QR |
1.12 us |
596.15 ns (🚀 1.88x faster) |
Naive sum of products of size 2 |
15.41 ns |
8.68 ns (🚀 1.78x faster) |
Deserialize Compressed |
8.82 ns |
4.99 ns (🚀 1.77x faster) |
Deserialize Compressed Unchecked |
8.80 ns |
4.97 ns (🚀 1.77x faster) |
Deserialize Uncompressed |
8.86 ns |
5.16 ns (🚀 1.72x faster) |
Deserialize Uncompressed Unchecked |
8.81 ns |
5.15 ns (🚀 1.71x faster) |
Square Root for QR |
4.43 us |
2.77 us (🚀 1.60x faster) |
Multiplication |
6.15 ns |
4.03 ns (🚀 1.53x faster) |
From BigInt |
5.32 ns |
4.30 ns (✅ 1.24x faster) |
Serialize Uncompressed |
4.72 ns |
3.95 ns (✅ 1.20x faster) |
Into BigInt |
4.72 ns |
3.92 ns (✅ 1.20x faster) |
Serialize Compressed |
4.72 ns |
3.96 ns (✅ 1.19x faster) |
Square |
5.60 ns |
4.88 ns (✅ 1.15x faster) |
Subtraction |
4.09 ns |
3.77 ns (✅ 1.09x faster) |
Addition |
4.11 ns |
3.79 ns (✅ 1.08x faster) |
Negation |
4.21 ns |
3.90 ns (✅ 1.08x faster) |
Double |
4.13 ns |
4.32 ns (❌ 1.04x slower) |
Benchmarked on an M1 Max. Markdown generated with criterion-table. More detailed benchmark info is here