diff --git a/.github/workflows/test-gpu.yml b/.github/workflows/test-gpu.yml new file mode 100644 index 0000000..1b82ca9 --- /dev/null +++ b/.github/workflows/test-gpu.yml @@ -0,0 +1,37 @@ +name: "GPU testing with ec-gpu" + +on: + pull_request: + types: + - opened + - edited + - synchronize + - reopened + - ready_for_review + +concurrency: + group: gpu-test-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: "Test ec-gpu" + runs-on: ['gpu'] + steps: + - uses: actions/checkout@v4 + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + - name: Run tests on features 'parallel,cuda' + run: cargo test --features='parallel,cuda' diff --git a/Cargo.lock b/Cargo.lock index 6efc41a..a77842a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -72,7 +72,7 @@ source = "git+https://github.com/facebookexperimental/allocative?rev=85b773d85d5 dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -198,7 +198,7 @@ dependencies = [ [[package]] name = "ark-bn254" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ark-ec", "ark-ff", @@ -238,13 +238,13 @@ checksum = "e7e89fe77d1f0f4fe5b96dfc940923d88d17b6a773808124f21e764dfb063c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "ark-ec" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ahash", "ark-ff", @@ -265,7 +265,7 @@ dependencies = [ [[package]] name = "ark-ff" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "allocative", "ark-ff-asm", @@ -286,28 +286,28 @@ dependencies = [ [[package]] name = "ark-ff-asm" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#b5f70317cd644638c49a7907da6cf79c5a4f4e0b" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "ark-ff-macros" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#b5f70317cd644638c49a7907da6cf79c5a4f4e0b" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "num-bigint", "num-traits", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "ark-grumpkin" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ark-bn254", "ark-ec", @@ -318,7 +318,7 @@ dependencies = [ [[package]] name = "ark-poly" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ahash", "ark-ff", @@ -386,7 +386,7 @@ dependencies = [ [[package]] name = "ark-serialize" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ark-serialize-derive 0.5.0 (git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout)", "ark-std 0.5.0", @@ -404,17 +404,17 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "ark-serialize-derive" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#b5f70317cd644638c49a7907da6cf79c5a4f4e0b" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -503,6 +503,12 @@ dependencies = [ "serde", ] +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.10.0" @@ -532,9 +538,9 @@ dependencies = [ [[package]] name = "blake2b_simd" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99" +checksum = "b79834656f71332577234b50bfc009996f7449e0c056884e6a02492ded0ca2f3" dependencies = [ "arrayref", "arrayvec", @@ -543,15 +549,16 @@ dependencies = [ [[package]] name = "blake3" -version = "1.8.2" +version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" +checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", "arrayvec", "cc", "cfg-if", "constant_time_eq", + "cpufeatures", ] [[package]] @@ -560,14 +567,14 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] name = "bumpalo" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" +checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510" [[package]] name = "bytemuck" @@ -583,7 +590,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -606,9 +613,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.47" +version = "1.2.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd405d82c84ff7f35739f175f67d8b9fb7687a0e84ccdc78bd3568839827cf07" +checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3" dependencies = [ "find-msvc-tools", "shlex", @@ -670,11 +677,22 @@ dependencies = [ "inout", ] +[[package]] +name = "cl3" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823f24e72fa0c68aa14a250ae1c0848e68d4ae188b71c3972343e45b46f8644" +dependencies = [ + "libc", + "opencl-sys", + "thiserror 1.0.69", +] + [[package]] name = "clap" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" dependencies = [ "clap_builder", "clap_derive", @@ -682,9 +700,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.53" +version = "4.5.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" dependencies = [ "anstream", "anstyle", @@ -702,14 +720,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "clap_lex" -version = "0.7.6" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" +checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" [[package]] name = "cobs" @@ -729,10 +747,11 @@ checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" [[package]] name = "common" version = "0.2.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ + "allocative", "ark-serialize", - "derive_more 2.0.1", + "derive_more 2.1.1", "serde", "serde_json", "strum", @@ -762,9 +781,9 @@ dependencies = [ [[package]] name = "constant_time_eq" -version = "0.3.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" [[package]] name = "core-foundation" @@ -878,6 +897,15 @@ dependencies = [ "itertools 0.13.0", ] +[[package]] +name = "crossbeam-channel" +version = "0.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.6" @@ -915,7 +943,7 @@ version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" dependencies = [ - "generic-array", + "generic-array 0.14.7", "typenum", ] @@ -936,7 +964,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -948,6 +976,24 @@ dependencies = [ "cipher", ] +[[package]] +name = "cuda-config" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee74643f7430213a1a78320f88649de309b20b80818325575e393f848f79f5d" +dependencies = [ + "glob", +] + +[[package]] +name = "cuda-driver-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d4c552cc0de854877d80bcd1f11db75d42be32962d72a6799b88dcca88fffbd" +dependencies = [ + "cuda-config", +] + [[package]] name = "derivative" version = "2.2.0" @@ -970,11 +1016,11 @@ dependencies = [ [[package]] name = "derive_more" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" dependencies = [ - "derive_more-impl 2.0.1", + "derive_more-impl 2.1.1", ] [[package]] @@ -985,19 +1031,20 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "unicode-xid", ] [[package]] name = "derive_more-impl" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "rustc_version", + "syn 2.0.114", ] [[package]] @@ -1040,7 +1087,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1065,7 +1112,7 @@ checksum = "9556bc800956545d6420a640173e5ba7dfa82f38d3ea5a167eb555bc69ac3323" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1076,7 +1123,7 @@ checksum = "92455ee9d76bb8878b7900486c07e880cd019acf144144aa61c799fb6464fefe" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1121,6 +1168,8 @@ dependencies = [ "blake3", "criterion 0.7.0", "divan", + "ec-gpu", + "ec-gpu-gen", "either", "env_logger", "ff_ext", @@ -1144,13 +1193,51 @@ dependencies = [ "sumcheck", "sumcheck_generic", "sumcheck_macro 0.1.0", - "syn 2.0.111", + "syn 2.0.114", "thiserror 2.0.17", "tracing", "transcript 0.1.0 (git+https://github.com/Lagrange-Labs/gkr-backend.git?branch=deep-prove-extra-features)", "witness", ] +[[package]] +name = "ec-gpu" +version = "0.2.0" +source = "git+https://github.com/Lagrange-Labs/ec-gpu?branch=fvs-ark-bn254-support#e12e8c3ac3833af81eb849ebc6e091435e65d9a5" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std 0.5.0", +] + +[[package]] +name = "ec-gpu-gen" +version = "0.7.1" +source = "git+https://github.com/Lagrange-Labs/ec-gpu?branch=fvs-ark-bn254-support#e12e8c3ac3833af81eb849ebc6e091435e65d9a5" +dependencies = [ + "ark-bn254", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std 0.5.0", + "bitvec", + "crossbeam-channel", + "ec-gpu", + "execute", + "hex", + "home", + "log", + "num_cpus", + "once_cell", + "rayon", + "rust-gpu-tools", + "sha2", + "thiserror 1.0.69", + "yastl", +] + [[package]] name = "educe" version = "0.6.0" @@ -1160,7 +1247,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1216,7 +1303,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1255,7 +1342,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1264,6 +1351,43 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca81e6b4777c89fd810c25a4be2b1bd93ea034fbe58e6a75216a34c6b82c539b" +[[package]] +name = "execute" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0be3cc61fe54b4cae4463cdbda0401978ffe19d4dcc7a5201a312cddf64726dd" +dependencies = [ + "execute-command-macro", + "execute-command-tokens", + "generic-array 1.3.5", +] + +[[package]] +name = "execute-command-macro" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3e748391d89b43c52decaed8645b4a83a09d14f5ee868071c6813389e9e7036" +dependencies = [ + "execute-command-macro-impl", +] + +[[package]] +name = "execute-command-macro-impl" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57dd896da3fbb77138059b015c013459d96063c66bcdd3b9094ff2e9d3f19a47" +dependencies = [ + "execute-command-tokens", + "quote", + "syn 2.0.114", +] + +[[package]] +name = "execute-command-tokens" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "729eda2ea2f6c5ef85150c85a9b2ce0a8e01f040e59cdb32521eaa6c840c9d51" + [[package]] name = "eyre" version = "0.6.12" @@ -1309,11 +1433,23 @@ dependencies = [ "serde", ] +[[package]] +name = "fil-rustacuda" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40666d4072d5353fd2fd3aa26e4ddb225c38c6440e8c467cae9b17688ae6191c" +dependencies = [ + "bitflags 1.3.2", + "cuda-driver-sys", + "rustacuda_core", + "rustacuda_derive", +] + [[package]] name = "find-msvc-tools" -version = "0.1.5" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a3076410a55c90011c298b04d0cfa770b00fa04e1e3c97d3f6c9de105a03844" +checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41" [[package]] name = "fixedbitset" @@ -1323,14 +1459,23 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.1.5" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" +checksum = "b375d6465b98090a5f25b1c7703f3859783755aa9a80433b36e0379a3ec2f369" dependencies = [ "crc32fast", "miniz_oxide", ] +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "spin", +] + [[package]] name = "fnv" version = "1.0.7" @@ -1403,7 +1548,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -1458,11 +1603,21 @@ dependencies = [ "version_check", ] +[[package]] +name = "generic-array" +version = "1.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaf57c49a95fd1fe24b90b3033bee6dc7e8f1288d51494cb44e627c295e38542" +dependencies = [ + "rustversion", + "typenum", +] + [[package]] name = "getrandom" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" dependencies = [ "cfg-if", "js-sys", @@ -1526,9 +1681,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" +checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" dependencies = [ "atomic-waker", "bytes", @@ -1616,6 +1771,21 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "1.4.0" @@ -1711,9 +1881,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56" +checksum = "727805d60e7938b76b826a6ef209eb70eaa1812794f9424d4a4e2d740662df5f" dependencies = [ "base64", "bytes", @@ -1807,9 +1977,9 @@ checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" [[package]] name = "icu_properties" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" dependencies = [ "icu_collections", "icu_locale_core", @@ -1821,9 +1991,9 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" [[package]] name = "icu_provider" @@ -1869,9 +2039,9 @@ checksum = "964de6e86d545b246d84badc0fef527924ace5134f30641c203ef52ba83f58d5" [[package]] name = "indexmap" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2" +checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", "hashbrown 0.16.1", @@ -1896,7 +2066,7 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" dependencies = [ - "generic-array", + "generic-array 0.14.7", ] [[package]] @@ -1907,9 +2077,9 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iri-string" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f867b9d1d896b67beb18518eda36fdb77a32ea590de864f1325b294a6d14397" +checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" dependencies = [ "memchr", "serde", @@ -1923,7 +2093,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" dependencies = [ "hermit-abi", "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1961,15 +2131,15 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "jiff" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49cce2b81f2098e7e3efc35bc2e0a6b7abec9d34128283d7a26fa8f32a6dbb35" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" dependencies = [ "jiff-static", "log", @@ -1980,19 +2150,19 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "jolt-core" version = "0.1.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ "allocative", "anyhow", @@ -2010,7 +2180,7 @@ dependencies = [ "chrono", "clap", "common", - "derive_more 2.0.1", + "derive_more 2.1.1", "dirs", "dory-pcs", "eyre", @@ -2021,13 +2191,11 @@ dependencies = [ "jolt-inlines-sha2", "jolt-optimizations", "jolt-platform", - "lazy_static", "memory-stats", "num", "num-derive", "num-integer", "num-traits", - "once_cell", "paste", "postcard", "rand", @@ -2046,13 +2214,13 @@ dependencies = [ "tracer", "tracing", "tracing-chrome", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.22", ] [[package]] name = "jolt-inlines-keccak256" version = "0.1.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ "ctor 0.2.9", "tracer", @@ -2062,7 +2230,7 @@ dependencies = [ [[package]] name = "jolt-inlines-sha2" version = "0.1.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ "ctor 0.2.9", "tracer", @@ -2072,7 +2240,7 @@ dependencies = [ [[package]] name = "jolt-optimizations" version = "0.5.0" -source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#0ada1da696d851d3728e8c3a2d7f21313121d2c0" +source = "git+https://github.com/a16z/arkworks-algebra?branch=dev%2Ftwist-shout#76bb3a4518928f1ff7f15875f940d614bb9845e6" dependencies = [ "ark-bn254", "ark-ec", @@ -2090,18 +2258,18 @@ dependencies = [ [[package]] name = "jolt-platform" version = "0.1.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "getrandom 0.3.4", "rand", ] [[package]] name = "js-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" +checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8" dependencies = [ "once_cell", "wasm-bindgen", @@ -2127,9 +2295,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.177" +version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" [[package]] name = "libm" @@ -2139,11 +2307,11 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libredox" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +checksum = "3d0b95e02c851351f877147b7deea7b1afb1df71b63aa5f8270716e0c5720616" dependencies = [ - "bitflags", + "bitflags 2.10.0", "libc", ] @@ -2159,11 +2327,20 @@ version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" [[package]] name = "matchers" @@ -2235,9 +2412,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -2255,7 +2432,7 @@ dependencies = [ "clap", "ctr", "ff_ext", - "generic-array", + "generic-array 0.14.7", "itertools 0.13.0", "multilinear_extensions", "num-bigint", @@ -2268,7 +2445,7 @@ dependencies = [ "serde", "sumcheck", "tracing", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.22", "transcript 0.1.0 (git+https://github.com/Lagrange-Labs/gkr-backend.git?branch=deep-prove-extra-features)", "whir", "witness", @@ -2323,7 +2500,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2368,7 +2545,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2412,6 +2589,16 @@ dependencies = [ "libm", ] +[[package]] +name = "num_cpus" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "number_prefix" version = "0.4.0" @@ -2471,13 +2658,32 @@ version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +[[package]] +name = "opencl-sys" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de15dd01496ae90c5799f5266184ab020082b4065800ff0b732f489371d0e5cf" +dependencies = [ + "libc", +] + +[[package]] +name = "opencl3" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26ab4a90cb496f787d3934deb0c54fa9d65e7bed710c10071234aab0196fba04" +dependencies = [ + "cl3", + "libc", +] + [[package]] name = "openssl" version = "0.10.75" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" dependencies = [ - "bitflags", + "bitflags 2.10.0", "cfg-if", "foreign-types", "libc", @@ -2494,7 +2700,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -2785,6 +2991,29 @@ dependencies = [ "group", ] +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + [[package]] name = "pasta_curves" version = "0.5.1" @@ -2874,9 +3103,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.11.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" [[package]] name = "portable-atomic-util" @@ -2940,18 +3169,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.103" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -2996,7 +3225,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", ] [[package]] @@ -3029,13 +3258,22 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "redox_users" version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.16", + "getrandom 0.2.17", "libredox", "thiserror 1.0.69", ] @@ -3083,9 +3321,9 @@ checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" [[package]] name = "reqwest" -version = "0.12.24" +version = "0.12.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" dependencies = [ "base64", "bytes", @@ -3131,7 +3369,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.16", + "getrandom 0.2.17", "libc", "untrusted", "windows-sys 0.52.0", @@ -3139,22 +3377,19 @@ dependencies = [ [[package]] name = "rmp" -version = "0.8.14" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +checksum = "4ba8be72d372b2c9b35542551678538b562e7cf86c3315773cae48dfbfe7790c" dependencies = [ - "byteorder", "num-traits", - "paste", ] [[package]] name = "rmp-serde" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +checksum = "72f81bee8c8ef9b577d1681a70ebbc962c232461e397b22c208c43c04b67a155" dependencies = [ - "byteorder", "rmp", "serde", ] @@ -3184,10 +3419,44 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn 2.0.111", + "syn 2.0.114", "unicode-ident", ] +[[package]] +name = "rust-gpu-tools" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0ce78d5548a74fad25177825d0c20f4cfbc6eaf796bcee53afe792e39ede4e2" +dependencies = [ + "fil-rustacuda", + "hex", + "home", + "log", + "once_cell", + "opencl3", + "sha2", + "temp-env", + "thiserror 1.0.69", +] + +[[package]] +name = "rustacuda_core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3858b08976dc2f860c5efbbb48cdcb0d4fafca92a6ac0898465af16c0dbe848" + +[[package]] +name = "rustacuda_derive" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ce8670a1a1d0fc2514a3b846dacdb65646f9bd494b6674cfacbb4ce430bd7e" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "rustc-demangle" version = "0.1.26" @@ -3205,22 +3474,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] name = "rustls" -version = "0.23.35" +version = "0.23.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f" +checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b" dependencies = [ "once_cell", "rustls-pki-types", @@ -3231,9 +3500,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "708c0f9d5f54ba0272468c1d306a52c495b31fa155e91bc25371e6df7996908c" +checksum = "21e6f2ab2928ca4291b86736a8bd920a277a399bba1589409d72154ff87c1282" dependencies = [ "zeroize", ] @@ -3266,9 +3535,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" [[package]] name = "same-file" @@ -3288,13 +3557,19 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "security-framework" version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags", + "bitflags 2.10.0", "core-foundation", "core-foundation-sys", "libc", @@ -3344,20 +3619,20 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] name = "serde_json" -version = "1.0.145" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", - "ryu", "serde", "serde_core", + "zmij", ] [[package]] @@ -3390,7 +3665,7 @@ source = "git+https://github.com/nicholas-mainardi/Expander.git?branch=feat%2Fma dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3431,9 +3706,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "simd-adler32" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" [[package]] name = "slab" @@ -3462,6 +3737,9 @@ name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "stable_deref_trait" @@ -3503,7 +3781,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3575,7 +3853,7 @@ dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3588,7 +3866,7 @@ dependencies = [ "proc-macro2", "quote", "rand", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3604,9 +3882,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.111" +version = "2.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "390cc9a294ab71bdb1aa2e99d13be9c753cd2d7bd6560c77118597410c4d2e87" +checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" dependencies = [ "proc-macro2", "quote", @@ -3630,7 +3908,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3639,7 +3917,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags", + "bitflags 2.10.0", "core-foundation", "system-configuration-sys", ] @@ -3666,17 +3944,26 @@ version = "0.12.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" +[[package]] +name = "temp-env" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96374855068f47402c3121c6eed88d29cb1de8f3ab27090e273e420bdabcf050" +dependencies = [ + "parking_lot", +] + [[package]] name = "tempfile" -version = "3.23.0" +version = "3.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" dependencies = [ "fastrand", "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -3715,7 +4002,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3726,7 +4013,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3769,9 +4056,9 @@ dependencies = [ [[package]] name = "tokio" -version = "1.48.0" +version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ "bytes", "libc", @@ -3803,9 +4090,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.17" +version = "0.7.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" +checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", @@ -3816,18 +4103,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.3" +version = "0.7.5+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.7" +version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" +checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ "indexmap", "toml_datetime", @@ -3837,18 +4124,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.4" +version = "1.0.6+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" +checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" dependencies = [ "winnow", ] [[package]] name = "tower" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" dependencies = [ "futures-core", "futures-util", @@ -3861,11 +4148,11 @@ dependencies = [ [[package]] name = "tower-http" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf146f99d442e8e68e585f5d798ccd3cad9a7835b917e09728880a862706456" +checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" dependencies = [ - "bitflags", + "bitflags 2.10.0", "bytes", "futures-util", "http", @@ -3892,17 +4179,16 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracer" version = "0.2.0" -source = "git+https://github.com/a16z/jolt#4c0b621cd2e1f27db5a348a475bae632fdc4e6ff" +source = "git+https://github.com/a16z/jolt#1691651740e326304d8bea9599b7e65888bf5d43" dependencies = [ "addr2line", "ark-serialize", "clap", "common", - "derive_more 2.0.1", + "derive_more 2.1.1", "fnv", "itertools 0.10.5", "jolt-platform", - "lazy_static", "object 0.36.7", "paste", "postcard", @@ -3911,14 +4197,14 @@ dependencies = [ "strum", "strum_macros", "tracing", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.22", ] [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -3927,13 +4213,13 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -3944,14 +4230,14 @@ checksum = "bf0a738ed5d6450a9fb96e86a23ad808de2b727fd1394585da5cdd6788ffe724" dependencies = [ "serde_json", "tracing-core", - "tracing-subscriber 0.3.20", + "tracing-subscriber 0.3.22", ] [[package]] name = "tracing-core" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" dependencies = [ "once_cell", "valuable", @@ -3979,9 +4265,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" dependencies = [ "matchers", "nu-ansi-term", @@ -4097,9 +4383,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -4181,9 +4467,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" +checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd" dependencies = [ "cfg-if", "once_cell", @@ -4194,9 +4480,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.55" +version = "0.4.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" +checksum = "836d9622d604feee9e5de25ac10e3ea5f2d65b41eac0d9ce72eb5deae707ce7c" dependencies = [ "cfg-if", "js-sys", @@ -4207,9 +4493,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" +checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4217,31 +4503,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" +checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40" dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.105" +version = "0.2.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" +checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4" dependencies = [ "unicode-ident", ] [[package]] name = "web-sys" -version = "0.3.82" +version = "0.3.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" +checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" dependencies = [ "js-sys", "wasm-bindgen", @@ -4286,7 +4572,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] @@ -4310,7 +4596,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4321,7 +4607,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4592,9 +4878,9 @@ checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "winnow" -version = "0.7.13" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" +checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" dependencies = [ "memchr", ] @@ -4633,6 +4919,16 @@ dependencies = [ "tap", ] +[[package]] +name = "yastl" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ca6c5a4d66c1a9ea261811cf4773c27343de7e5033e1b75ea3f297dc7db3c1a" +dependencies = [ + "flume", + "scopeguard", +] + [[package]] name = "yoke" version = "0.8.1" @@ -4652,28 +4948,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.30" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea879c944afe8a2b25fef16bb4ba234f47c694565e97383b36f3a878219065c" +checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.30" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5" +checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4693,7 +4989,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", "synstructure", ] @@ -4708,13 +5004,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] [[package]] @@ -4747,5 +5043,11 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.111", + "syn 2.0.114", ] + +[[package]] +name = "zmij" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea" diff --git a/Cargo.toml b/Cargo.toml index 256be06..6526271 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,10 @@ ark-std = { version = "0.5.0", features = ["std","getrandom"]} dp-crypto = { path = "dp-crypto" } ark-ff = { version = "0.5.0", features = ["std"] } ark-bn254 = { version = "0.5.0", features = ["std"]} +ark-ec = { version = "0.5.0", features = ["std"]} sumcheck_macro = { path = "sumcheck_macro" } +ec-gpu = { git = "https://github.com/Lagrange-Labs/ec-gpu", branch = "fvs-ark-bn254-support", features = ["arkworks"] } +ec-gpu-gen = { git = "https://github.com/Lagrange-Labs/ec-gpu", branch = "fvs-ark-bn254-support", features = ["arkworks"] } [patch.crates-io] diff --git a/dp-crypto/Cargo.toml b/dp-crypto/Cargo.toml index dfddcda..66fe7c1 100644 --- a/dp-crypto/Cargo.toml +++ b/dp-crypto/Cargo.toml @@ -6,7 +6,7 @@ edition.workspace = true [dependencies] ark-bn254.workspace = true ark-std.workspace = true -ark-ec = { version = "0.5.0", features = ["std"]} +ark-ec.workspace = true ark-ff.workspace = true ark-poly = { version = "0.5.0", features = ["std"]} anyhow = "^1.0" @@ -37,6 +37,13 @@ expander-arith = { git = "https://github.com/nicholas-mainardi/Expander.git", br expander-poly = { git = "https://github.com/nicholas-mainardi/Expander.git", branch = "feat/make_mpi_dependency_optional", package = "polynomials", optional = true } expander-hasher = { git = "https://github.com/nicholas-mainardi/Expander.git", branch = "feat/make_mpi_dependency_optional", package = "gkr_hashers", optional = true } expander-sumcheck = { git = "https://github.com/nicholas-mainardi/Expander.git", branch = "feat/make_mpi_dependency_optional", package = "sumcheck_generic", optional = true } +ec-gpu = { workspace = true, optional = true } +ec-gpu-gen = { workspace = true, optional = true } + +[build-dependencies] +ec-gpu-gen = { workspace = true, optional = true } +ec-gpu = { workspace = true, optional = true } +ark-bn254 = { workspace = true } [features] default = ["mono"] @@ -51,6 +58,8 @@ nightly-benches = ["parallel", "dep:sumcheck", "dep:multilinear_extensions", "de all-stable = ["mono", "parallel"] asm = ["ark-ff/asm"] mono = [] +cuda = ["dep:ec-gpu", "dep:ec-gpu-gen", "ec-gpu-gen/cuda"] +opencl = ["dep:ec-gpu", "dep:ec-gpu-gen", "ec-gpu-gen/opencl"] [dev-dependencies] criterion = { version = "0.7.0", features = ["html_reports"]} @@ -82,5 +91,3 @@ harness = false [[bench]] name = "pcs" harness = false - - diff --git a/dp-crypto/benches/pcs.rs b/dp-crypto/benches/pcs.rs index 4f0ee67..888debc 100644 --- a/dp-crypto/benches/pcs.rs +++ b/dp-crypto/benches/pcs.rs @@ -1,5 +1,8 @@ +#[allow(unused_imports)] use ark_bn254::{Bn254, Fr}; +#[allow(unused_imports)] use ark_poly::DenseMultilinearExtension; +#[allow(unused_imports)] use ark_poly_commit::multilinear_pc::MultilinearPC; use ark_std::rand::thread_rng; use divan::Bencher; @@ -7,6 +10,7 @@ use dp_crypto::{ arkyper::{CommitmentScheme, HyperKZG}, poly::{dense::DensePolynomial as ADensePolynomial, slice::SmartSlice}, }; +#[allow(unused_imports)] use jolt_core::poly::{ commitment::{ commitment_scheme::CommitmentScheme as CScheme, hyperkzg::HyperKZG as JoltHyperKZG, @@ -16,7 +20,6 @@ use jolt_core::poly::{ }; fn main() { - // Run registered benchmarks. divan::main(); } @@ -164,12 +167,17 @@ mod commit { mod open { use ark_bn254::Fr; use ark_ff::AdditiveGroup; - use dp_crypto::arkyper::transcript::Transcript; use dp_crypto::arkyper::transcript::blake3::Blake3Transcript; + use dp_crypto::arkyper::transcript::Transcript; + #[allow(unused_imports)] use jolt_core::field::JoltField; + #[allow(unused_imports)] use jolt_core::poly::dense_mlpoly::DensePolynomial as JoltDense; + #[allow(unused_imports)] use jolt_core::poly::multilinear_polynomial::MultilinearPolynomial as JoltMLE; + #[allow(unused_imports)] use jolt_core::transcripts::Blake2bTranscript; + #[allow(unused_imports)] use jolt_core::transcripts::Transcript as T; use super::*; @@ -386,15 +394,18 @@ mod open { .map(|_| E::random(&mut thread_rng())) .collect::>(); let transcript = T::new(b"basefold_bench"); - let rmms = mles.iter().map(|mle| { - RowMajorMatrix::new_by_inner_matrix( - p3::matrix::dense::DenseMatrix::new( - transpose(vec![mle.get_base_field_vec().to_vec()]).concat(), - 1, - ), - witness::InstancePaddingStrategy::Default, - ) - }).collect::>(); + let rmms = mles + .iter() + .map(|mle| { + RowMajorMatrix::new_by_inner_matrix( + p3::matrix::dense::DenseMatrix::new( + transpose(vec![mle.get_base_field_vec().to_vec()]).concat(), + 1, + ), + witness::InstancePaddingStrategy::Default, + ) + }) + .collect::>(); let commitment = Pcs::batch_commit(&pp, rmms).unwrap(); let claims = mles .iter() @@ -403,12 +414,7 @@ mod open { (pp, claims, commitment, transcript) }) .bench_local_values(|(pp, claims, commitment, mut prove_transcript)| { - Pcs::batch_open( - &pp, - vec![(&commitment, claims)], - &mut prove_transcript, - ) - .unwrap() + Pcs::batch_open(&pp, vec![(&commitment, claims)], &mut prove_transcript).unwrap() }); } @@ -442,16 +448,19 @@ mod open { .map(|_| E::random(&mut thread_rng())) .collect::>(); let transcript = T::new(b"basefold_bench"); - let comms = mles.iter().map(|mle| { - let rmm = RowMajorMatrix::new_by_inner_matrix( - p3::matrix::dense::DenseMatrix::new( - transpose(vec![mle.get_base_field_vec().to_vec()]).concat(), - 1, - ), - witness::InstancePaddingStrategy::Default, - ); - Pcs::batch_commit(&pp, vec![rmm]).unwrap() - }).collect::>(); + let comms = mles + .iter() + .map(|mle| { + let rmm = RowMajorMatrix::new_by_inner_matrix( + p3::matrix::dense::DenseMatrix::new( + transpose(vec![mle.get_base_field_vec().to_vec()]).concat(), + 1, + ), + witness::InstancePaddingStrategy::Default, + ); + Pcs::batch_commit(&pp, vec![rmm]).unwrap() + }) + .collect::>(); let claims = mles .iter() .map(|mle| vec![(point.clone(), vec![mle.evaluate(&point)])]) diff --git a/dp-crypto/build.rs b/dp-crypto/build.rs new file mode 100644 index 0000000..561146c --- /dev/null +++ b/dp-crypto/build.rs @@ -0,0 +1,14 @@ +#[cfg(any(feature = "cuda", feature = "opencl"))] +fn main() { + use ark_bn254::{Fq, Fq2, Fr}; + use ec_gpu::arkworks_bn254::{G1Affine, G2Affine}; + use ec_gpu_gen::SourceBuilder; + + let source = SourceBuilder::new() + .add_multiexp::() + .add_multiexp::(); + ec_gpu_gen::generate(&source); +} + +#[cfg(not(any(feature = "cuda", feature = "opencl")))] +fn main() {} diff --git a/dp-crypto/src/arkyper/gpu_msm.rs b/dp-crypto/src/arkyper/gpu_msm.rs new file mode 100644 index 0000000..7bd0014 --- /dev/null +++ b/dp-crypto/src/arkyper/gpu_msm.rs @@ -0,0 +1,141 @@ +use std::sync::{Arc, Mutex}; + +use ark_bn254::{Fq, Fq2, Fr, G1Projective, G2Projective}; +use ark_ec::AffineRepr; +use ark_ff::PrimeField; + +use ec_gpu::arkworks_bn254::{G1Affine, G2Affine}; +use ec_gpu_gen::{ + program, rust_gpu_tools::Device, threadpool::Worker, G1AffineM, G2AffineM, MultiexpKernel, +}; +use rayon::prelude::*; + +pub static GPU_MSM_G1: std::sync::LazyLock> = + std::sync::LazyLock::new(|| Mutex::new(GpuMsmG1::new().expect("Failed to initialize GPU MSM"))); + +pub static GPU_MSM_G2: std::sync::LazyLock> = + std::sync::LazyLock::new(|| Mutex::new(GpuMsmG2::new().expect("Failed to initialize GPU MSM"))); + +pub struct GpuMsmG1 { + kernel: MultiexpKernel<'static, G1Affine>, + pool: Worker, +} + +pub struct GpuMsmG2 { + kernel: MultiexpKernel<'static, G2Affine>, + pool: Worker, +} + +impl GpuMsmG1 { + pub fn new() -> anyhow::Result { + let devices = Device::all(); + if devices.is_empty() { + return Err(anyhow::anyhow!("No GPU devices found")); + } + + let programs: Vec<_> = devices + .iter() + .map(|device| program!(device)) + .collect::>() + .map_err(|e| anyhow::anyhow!("Failed to create GPU program: {e}"))?; + + let kernel = MultiexpKernel::create(programs, &devices) + .map_err(|e| anyhow::anyhow!("Failed to create MSM kernel: {e}"))?; + + let pool = Worker::new(); + + Ok(Self { kernel, pool }) + } + + pub fn msm_arc( + &mut self, + bases: Arc>, + scalars: Arc::BigInt>>, + ) -> anyhow::Result { + self.kernel + .multiexp(&self.pool, bases, scalars, 0) + .map_err(|e| anyhow::anyhow!("GPU MSM failed: {e}")) + } +} + +impl GpuMsmG2 { + pub fn new() -> anyhow::Result { + let devices = Device::all(); + if devices.is_empty() { + return Err(anyhow::anyhow!("No GPU devices found")); + } + + let programs: Vec<_> = devices + .iter() + .map(|device| program!(device)) + .collect::>() + .map_err(|e| anyhow::anyhow!("Failed to create GPU program: {e}"))?; + + let kernel = MultiexpKernel::create(programs, &devices) + .map_err(|e| anyhow::anyhow!("Failed to create MSM kernel: {e}"))?; + + let pool = Worker::new(); + + Ok(Self { kernel, pool }) + } + + pub fn msm_arc( + &mut self, + bases: Arc>, + scalars: Arc::BigInt>>, + ) -> anyhow::Result { + self.kernel + .multiexp(&self.pool, bases, scalars, 0) + .map_err(|e| anyhow::anyhow!("GPU MSM failed: {e}")) + } +} + +fn fq_to_montgomery_bytes(x: &Fq) -> [u8; 32] { + let limbs = unsafe { std::mem::transmute::(*x) }; + + let mut out = [0u8; 32]; + for (i, limb) in limbs.iter().enumerate() { + let bytes = limb.to_le_bytes(); + out[i * 8..(i + 1) * 8].copy_from_slice(&bytes); + } + out +} + +fn fq2_to_montgomery_bytes(x: &Fq2) -> [u8; 64] { + let mut out = [0u8; 64]; + out[..32].copy_from_slice(&fq_to_montgomery_bytes(&x.c0)); + out[32..].copy_from_slice(&fq_to_montgomery_bytes(&x.c1)); + out +} + +fn g1_to_gpu(p: &ark_bn254::G1Affine) -> G1AffineM { + match p.xy() { + Some((x, y)) => G1AffineM { + x: fq_to_montgomery_bytes(&x), + y: fq_to_montgomery_bytes(&y), + }, + None => G1AffineM::default(), + } +} + +fn g2_to_gpu(p: &ark_bn254::G2Affine) -> G2AffineM { + match p.xy() { + Some((x, y)) => G2AffineM { + x: fq2_to_montgomery_bytes(&x), + y: fq2_to_montgomery_bytes(&y), + }, + None => G2AffineM::default(), + } +} + +pub fn convert_g1_bases_to_gpu(bases: &[ark_bn254::G1Affine]) -> Vec { + bases.par_iter().map(g1_to_gpu).collect() +} + +pub fn convert_g2_bases_to_gpu(bases: &[ark_bn254::G2Affine]) -> Vec { + bases.par_iter().map(g2_to_gpu).collect() +} + +pub fn convert_scalars_to_bigint(scalars: &[Fr]) -> Vec<::BigInt> { + scalars.par_iter().map(|s| s.into_bigint()).collect() +} diff --git a/dp-crypto/src/arkyper/mod.rs b/dp-crypto/src/arkyper/mod.rs index 2c8ee12..f27f7b0 100644 --- a/dp-crypto/src/arkyper/mod.rs +++ b/dp-crypto/src/arkyper/mod.rs @@ -25,6 +25,8 @@ use serde::Deserialize; use serde::Serialize; use std::borrow::Borrow; use std::marker::PhantomData; +#[cfg(any(feature = "cuda", feature = "opencl"))] +pub mod gpu_msm; pub mod interface; pub mod msm; pub mod transcript; @@ -637,3 +639,174 @@ mod tests { HyperKZG::verify(&vp, &comm, &opening_point, &eval, &proof, &mut transcript) } } + +#[cfg(all(test, any(feature = "cuda", feature = "opencl")))] +mod gpu_tests { + use super::*; + use crate::{arkyper::transcript::blake3::Blake3Transcript, poly::challenge}; + use ark_bn254::{Bn254, Fr, G1Affine, G2Affine}; + use ark_ec::{AffineRepr, CurveGroup}; + use ark_std::{UniformRand, rand::SeedableRng}; + + fn test_msm_gpu_vs_cpu_generic>( + bases: &[A], + poly: &DensePolynomial, + ell: usize, + ) where + A::Group: CurveGroup, + { + let cpu_result = msm::batch_poly_msm_cpu::(bases, &[poly]).unwrap(); + let gpu_result = msm::batch_poly_msm::(bases, &[poly]).unwrap(); + + assert_eq!(cpu_result.len(), gpu_result.len()); + for (cpu, gpu) in cpu_result.iter().zip(gpu_result.iter()) { + assert_eq!( + cpu.into_affine(), + gpu.into_affine(), + "MSM results differ for ell={ell}" + ); + } + } + + fn test_batch_msm_gpu_vs_cpu_generic>( + bases: &[A], + polys: &[DensePolynomial], + ) where + A::Group: CurveGroup, + { + let poly_refs: Vec<&DensePolynomial> = polys.iter().collect(); + + let cpu_results = msm::batch_poly_msm_cpu::(bases, &poly_refs).unwrap(); + let gpu_results = msm::batch_poly_msm::(bases, &poly_refs).unwrap(); + + assert_eq!(cpu_results.len(), gpu_results.len()); + for (i, (cpu, gpu)) in cpu_results.iter().zip(gpu_results.iter()).enumerate() { + assert_eq!( + cpu.into_affine(), + gpu.into_affine(), + "Batch MSM results differ for poly {i}" + ); + } + } + + #[test] + fn test_msm_gpu_vs_cpu_g1() { + for ell in [10, 12, 14] { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(ell as u64); + let n = 1 << ell; + + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + let poly = DensePolynomial::from(poly_raw); + + let srs = HyperKZGSRS::setup(&mut rng, n); + let (pk, _): (HyperKZGProverKey, HyperKZGVerifierKey) = srs.trim(n); + + test_msm_gpu_vs_cpu_generic::(pk.g1_powers(), &poly, ell); + } + } + + #[test] + fn test_msm_gpu_vs_cpu_g2() { + for ell in [10, 12, 14] { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(ell as u64 + 1000); + let n = 1 << ell; + + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + let poly = DensePolynomial::from(poly_raw); + + let bases: Vec = (0..n).map(|_| G2Affine::rand(&mut rng)).collect(); + + test_msm_gpu_vs_cpu_generic::(&bases, &poly, ell); + } + } + + #[test] + fn test_commit_gpu_vs_cpu() { + for ell in [10, 12, 14] { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(ell as u64 + 100); + let n = 1 << ell; + + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + let poly = DensePolynomial::from(poly_raw); + + let srs = HyperKZGSRS::setup(&mut rng, n); + let (pk, _): (HyperKZGProverKey, HyperKZGVerifierKey) = srs.trim(n); + + let cpu_commit = + msm::batch_poly_msm_cpu::(pk.g1_powers(), &[&poly]).unwrap()[0]; + let gpu_commit = HyperKZG::::commit(&pk, &poly).unwrap().0; + + assert_eq!( + cpu_commit.into_affine(), + gpu_commit.0, + "Commit results differ for ell={ell}" + ); + } + } + + #[test] + fn test_open_gpu_produces_valid_proof() { + for ell in [10, 12] { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(ell as u64 + 200); + let n = 1 << ell; + + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + let poly = DensePolynomial::from(poly_raw); + let point = (0..ell) + .map(|_| challenge::random_challenge::(&mut rng)) + .collect::>(); + let eval = poly.evaluate(&point).unwrap(); + + let srs = HyperKZGSRS::setup(&mut rng, n); + let (pk, vk): (HyperKZGProverKey, HyperKZGVerifierKey) = srs.trim(n); + + let (comm, _) = HyperKZG::commit(&pk, &poly).unwrap(); + + let mut prover_transcript = Blake3Transcript::new(b"GpuTest"); + let proof = HyperKZG::open(&pk, &poly, &point, &eval, &mut prover_transcript).unwrap(); + + let mut verifier_transcript = Blake3Transcript::new(b"GpuTest"); + HyperKZG::verify(&vk, &comm, &point, &eval, &proof, &mut verifier_transcript) + .expect("GPU-generated proof should verify"); + } + } + + #[test] + fn test_batch_msm_gpu_vs_cpu_g1() { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(42); + let ell = 12; + let n = 1 << ell; + let num_polys = 5; + + let polys: Vec> = (0..num_polys) + .map(|_| { + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + DensePolynomial::from(poly_raw) + }) + .collect(); + + let srs = HyperKZGSRS::setup(&mut rng, n); + let (pk, _): (HyperKZGProverKey, HyperKZGVerifierKey) = srs.trim(n); + + test_batch_msm_gpu_vs_cpu_generic::(pk.g1_powers(), &polys); + } + + #[test] + fn test_batch_msm_gpu_vs_cpu_g2() { + let mut rng = rand_chacha::ChaCha20Rng::seed_from_u64(43); + let ell = 12; + let n = 1 << ell; + let num_polys = 5; + + let polys: Vec> = (0..num_polys) + .map(|_| { + let poly_raw = (0..n).map(|_| Fr::rand(&mut rng)).collect::>(); + DensePolynomial::from(poly_raw) + }) + .collect(); + + let bases: Vec = (0..n).map(|_| G2Affine::rand(&mut rng)).collect(); + + test_batch_msm_gpu_vs_cpu_generic::(&bases, &polys); + } +} diff --git a/dp-crypto/src/arkyper/msm.rs b/dp-crypto/src/arkyper/msm.rs index f0250f7..74640d5 100644 --- a/dp-crypto/src/arkyper/msm.rs +++ b/dp-crypto/src/arkyper/msm.rs @@ -1,12 +1,13 @@ use std::borrow::Borrow; -use ark_ec::{AffineRepr, CurveGroup, scalar_mul::variable_base::VariableBaseMSM}; +use ark_ec::{scalar_mul::variable_base::VariableBaseMSM, AffineRepr, CurveGroup}; use ark_ff::PrimeField; use ark_std::cfg_iter; #[cfg(feature = "parallel")] use rayon::prelude::*; use crate::poly::dense::DensePolynomial; + pub fn poly_msm<'a, A: AffineRepr>( g1_powers: &[A], poly: &impl Borrow>, @@ -15,9 +16,33 @@ pub fn poly_msm<'a, A: AffineRepr>( Ok(r.remove(0)) } +#[cfg(not(any(feature = "cuda", feature = "opencl")))] pub fn batch_poly_msm<'a, A: AffineRepr>( g1_powers: &[A], polys: &[impl Borrow>], +) -> anyhow::Result> { + batch_poly_msm_cpu(g1_powers, polys) +} + +#[cfg(any(feature = "cuda", feature = "opencl"))] +pub fn batch_poly_msm<'a, A: AffineRepr>( + g1_powers: &[A], + polys: &[impl Borrow>], +) -> anyhow::Result> { + use std::any::TypeId; + + if TypeId::of::() == TypeId::of::() { + batch_poly_msm_gpu_g1_bn254(g1_powers, polys) + } else if TypeId::of::() == TypeId::of::() { + batch_poly_msm_gpu_g2_bn254(g1_powers, polys) + } else { + batch_poly_msm_cpu(g1_powers, polys) + } +} + +pub fn batch_poly_msm_cpu<'a, A: AffineRepr>( + g1_powers: &[A], + polys: &[impl Borrow>], ) -> anyhow::Result> { let coeffs = polys .iter() @@ -26,8 +51,6 @@ pub fn batch_poly_msm<'a, A: AffineRepr>( let r = cfg_iter!(coeffs) .map(|coeffs| { let msm_size = coeffs.len(); - // TODO: move to msm_bigint as they do in arkworks KZG - // https://github.com/arkworks-rs/poly-commit/blob/master/poly-commit/src/kzg10/mod.rs#L171-L204 ::msm(&g1_powers[..msm_size], coeffs) .map_err(|e| anyhow::anyhow!("MSM error: {e}")) }) @@ -35,6 +58,78 @@ pub fn batch_poly_msm<'a, A: AffineRepr>( Ok(r) } +#[cfg(any(feature = "cuda", feature = "opencl"))] +pub fn batch_poly_msm_gpu_g1_bn254<'a, A: AffineRepr>( + g1_powers: &[A], + polys: &[impl Borrow>], +) -> anyhow::Result> { + use std::sync::Arc; + + use super::gpu_msm::{convert_g1_bases_to_gpu, convert_scalars_to_bigint, GPU_MSM_G1}; + + let bases: &[ark_bn254::G1Affine] = unsafe { std::mem::transmute(g1_powers) }; + let bases_gpu = Arc::new(convert_g1_bases_to_gpu(bases)); + + let results: Vec = polys + .iter() + .map(|poly| { + let coeffs = poly.borrow().evals_ref(); + let scalars: &[ark_bn254::Fr] = unsafe { std::mem::transmute(coeffs) }; + let msm_size = scalars.len(); + let scalars_bigint = Arc::new(convert_scalars_to_bigint(&scalars[..msm_size])); + + let bases_slice = Arc::new(bases_gpu[..msm_size].to_vec()); + + let result: ark_bn254::G1Projective = GPU_MSM_G1 + .lock() + .unwrap() + .msm_arc(bases_slice, scalars_bigint) + .map_err(|e| anyhow::anyhow!("GPU MSM error: {e}"))?; + + let result_generic: A::Group = unsafe { std::mem::transmute_copy(&result) }; + Ok(result_generic) + }) + .collect::>>()?; + + Ok(results) +} + +#[cfg(any(feature = "cuda", feature = "opencl"))] +pub fn batch_poly_msm_gpu_g2_bn254<'a, A: AffineRepr>( + g2_powers: &[A], + polys: &[impl Borrow>], +) -> anyhow::Result> { + use std::sync::Arc; + + use super::gpu_msm::{convert_g2_bases_to_gpu, convert_scalars_to_bigint, GPU_MSM_G2}; + + let bases: &[ark_bn254::G2Affine] = unsafe { std::mem::transmute(g2_powers) }; + let bases_gpu = Arc::new(convert_g2_bases_to_gpu(bases)); + + let results: Vec = polys + .iter() + .map(|poly| { + let coeffs = poly.borrow().evals_ref(); + let scalars: &[ark_bn254::Fr] = unsafe { std::mem::transmute(coeffs) }; + let msm_size = scalars.len(); + let scalars_bigint = Arc::new(convert_scalars_to_bigint(&scalars[..msm_size])); + + let bases_slice = Arc::new(bases_gpu[..msm_size].to_vec()); + + let result: ark_bn254::G2Projective = GPU_MSM_G2 + .lock() + .unwrap() + .msm_arc(bases_slice, scalars_bigint) + .map_err(|e| anyhow::anyhow!("GPU MSM error: {e}"))?; + + let result_generic: A::Group = unsafe { std::mem::transmute_copy(&result) }; + Ok(result_generic) + }) + .collect::>>()?; + + Ok(results) +} + pub fn msm, F: PrimeField>( g_powers: &[G::Affine], coeffs: &[F], diff --git a/dp-crypto/src/sumcheck/macros.rs b/dp-crypto/src/sumcheck/macros.rs index b153767..0d4b41c 100644 --- a/dp-crypto/src/sumcheck/macros.rs +++ b/dp-crypto/src/sumcheck/macros.rs @@ -15,3 +15,8 @@ macro_rules! exit_span { $first.exit() }; } + +#[allow(unused_imports)] +pub(crate) use entered_span; +#[allow(unused_imports)] +pub(crate) use exit_span;