From 455e0a925ed9f3211f76ecae7eee8b5bbe4953e9 Mon Sep 17 00:00:00 2001 From: Marvin Jones Date: Mon, 8 Jun 2026 18:09:20 -0400 Subject: [PATCH] GPU testing --- Cargo.lock | 632 +++++++++++++++++- bench_ppe_aggregation_cuda.sh | 72 ++ lee/state_machine/Cargo.toml | 1 + .../privacy_preserving_transaction/circuit.rs | 8 + 4 files changed, 685 insertions(+), 28 deletions(-) create mode 100755 bench_ppe_aggregation_cuda.sh diff --git a/Cargo.lock b/Cargo.lock index 9d526733..12b97d12 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -106,6 +106,16 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" +[[package]] +name = "alloy-rlp" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc90b1e703d3c03f4ff7f48e82dd0bc1c8211ab7d079cd836a06fcfeb06651cb" +dependencies = [ + "arrayvec", + "bytes", +] + [[package]] name = "amm_core" version = "0.1.0" @@ -209,6 +219,15 @@ version = "1.0.102" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + [[package]] name = "arbitrary" version = "1.4.2" @@ -348,6 +367,24 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint 0.4.6", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + [[package]] name = "ark-ff" version = "0.4.2" @@ -364,7 +401,7 @@ dependencies = [ "num-bigint 0.4.6", "num-traits", "paste", - "rustc_version", + "rustc_version 0.4.1", "zeroize", ] @@ -388,6 +425,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-asm" version = "0.4.2" @@ -408,6 +455,18 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "ark-ff-macros" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint 0.4.6", + "num-traits", + "quote", + "syn 1.0.109", +] + [[package]] name = "ark-ff-macros" version = "0.4.2" @@ -533,6 +592,16 @@ dependencies = [ "tracing-subscriber 0.2.25", ] +[[package]] +name = "ark-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + [[package]] name = "ark-serialize" version = "0.4.2" @@ -604,6 +673,16 @@ dependencies = [ "ark-std 0.5.0", ] +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.6", +] + [[package]] name = "ark-std" version = "0.4.0" @@ -760,7 +839,7 @@ dependencies = [ "futures-lite", "parking", "polling", - "rustix", + "rustix 1.1.4", "slab", "windows-sys 0.61.2", ] @@ -932,6 +1011,17 @@ dependencies = [ "serde", ] +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "autocfg" version = "1.5.1" @@ -1122,6 +1212,8 @@ dependencies = [ "cexpr", "clang-sys", "itertools 0.13.0", + "log", + "prettyplease", "proc-macro2", "quote", "regex", @@ -1213,6 +1305,18 @@ dependencies = [ "hybrid-array", ] +[[package]] +name = "blst" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcdb4c7013139a150f9fc55d123186dbfaba0d912817466282c73ac49e71fb45" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + [[package]] name = "bollard" version = "0.20.2" @@ -1334,6 +1438,12 @@ version = "3.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + [[package]] name = "bytemuck" version = "1.25.0" @@ -1414,7 +1524,7 @@ checksum = "dd5eb614ed4c27c5d706420e4320fbe3216ab31fa1c33cd8246ac36dae4479ba" dependencies = [ "camino", "cargo-platform", - "semver", + "semver 1.0.28", "serde", "serde_json", "thiserror 2.0.18", @@ -1558,6 +1668,35 @@ dependencies = [ "inout 0.2.2", ] +[[package]] +name = "circom-witnesscalc" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3fb734f91de7e7002678ea3238fddfd4ee7afd33e9ed975176f4a94794a55a" +dependencies = [ + "anyhow", + "ark-bn254 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "bindgen", + "byteorder", + "indicatif 0.17.11", + "libc", + "memmap2", + "num-bigint 0.4.6", + "num-traits", + "prost 0.13.5", + "prost-build", + "rand 0.8.6", + "ruint", + "serde", + "serde_json", + "tempfile", + "thiserror 2.0.18", + "winnow 0.7.15", + "wtns-file", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -1707,6 +1846,19 @@ dependencies = [ "winnow 1.0.3", ] +[[package]] +name = "console" +version = "0.15.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "054ccb5b10f9f2cbf51eb355ca1d05c2d279ce1804688d0db74b4733a5aeafd8" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.59.0", +] + [[package]] name = "console" version = "0.16.3" @@ -2074,7 +2226,7 @@ dependencies = [ "curve25519-dalek-derive", "digest 0.10.7", "fiat-crypto", - "rustc_version", + "rustc_version 0.4.1", "serde", "subtle", "zeroize", @@ -2091,6 +2243,52 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "cust" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6cc71911e179f12483b9734120b45bd00bf64fab085cc4818428523eedd469" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "cust_core", + "cust_derive", + "cust_raw", + "find_cuda_helper", +] + +[[package]] +name = "cust_core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039f79662cb8f890cbf335e818cd522d6e3a53fe63f61d1aaaf859cd3d975f06" +dependencies = [ + "cust_derive", + "glam", + "mint", + "vek", +] + +[[package]] +name = "cust_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3bc95fe629aed92b2423de6ccff9e40174b21d19cb6ee6281a4d04ac72f66" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "cust_raw" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf40d6ade12cb9828bbc844b9875c7b93d25e67a3c9bf61c7aa3ae09e402bf8" +dependencies = [ + "find_cuda_helper", +] + [[package]] name = "cycle_bench" version = "0.1.0" @@ -2333,11 +2531,20 @@ dependencies = [ "convert_case 0.10.0", "proc-macro2", "quote", - "rustc_version", + "rustc_version 0.4.1", "syn 2.0.117", "unicode-xid", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + [[package]] name = "digest" version = "0.10.7" @@ -2797,6 +3004,28 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + [[package]] name = "faucet_core" version = "0.1.0" @@ -2812,7 +3041,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce92ff622d6dadf7349484f42c93271a0d49b7cc4d466a936405bacbe10aa78" dependencies = [ "cfg-if", - "rustix", + "rustix 1.1.4", "windows-sys 0.59.0", ] @@ -2877,6 +3106,33 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "find_cuda_helper" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f9e65c593dd01ac77daad909ea4ad17f0d6d1776193fc8ea766356177abdad" +dependencies = [ + "glob", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.6", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "flate2" version = "1.1.9" @@ -3195,6 +3451,15 @@ dependencies = [ "stable_deref_trait", ] +[[package]] +name = "glam" +version = "0.20.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +dependencies = [ + "num-traits", +] + [[package]] name = "glob" version = "0.3.3" @@ -3370,7 +3635,7 @@ checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" dependencies = [ "atomic-polyfill", "hash32", - "rustc_version", + "rustc_version 0.4.1", "serde", "spin", "stable_deref_trait", @@ -3962,6 +4227,26 @@ dependencies = [ "xmltree", ] +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "include_bytes_aligned" version = "0.1.4" @@ -4077,13 +4362,26 @@ dependencies = [ "serde_core", ] +[[package]] +name = "indicatif" +version = "0.17.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "183b3088984b400f4cfac3620d5e076c84da5364016b4f49473de574b2586235" +dependencies = [ + "console 0.15.11", + "number_prefix", + "portable-atomic", + "unicode-width", + "web-time", +] + [[package]] name = "indicatif" version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25470f23803092da7d239834776d653104d551bc4d7eacaf31e6837854b8e9eb" dependencies = [ - "console", + "console 0.16.3", "portable-atomic", "unicode-segmentation", "unicode-width", @@ -4743,7 +5041,7 @@ dependencies = [ "rand 0.9.4", "reactive_graph", "rustc-hash", - "rustc_version", + "rustc_version 0.4.1", "send_wrapper", "serde", "serde_json", @@ -4863,7 +5161,7 @@ dependencies = [ "proc-macro2", "quote", "rstml", - "rustc_version", + "rustc_version 0.4.1", "server_fn_macro", "syn 2.0.117", "uuid", @@ -4900,7 +5198,7 @@ dependencies = [ "or_poisoned", "percent-encoding", "reactive_graph", - "rustc_version", + "rustc_version 0.4.1", "send_wrapper", "tachys", "thiserror 2.0.18", @@ -5209,7 +5507,7 @@ dependencies = [ "smallvec", "thiserror 2.0.18", "tracing", - "uint", + "uint 0.10.0", "web-time", ] @@ -5433,6 +5731,12 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + [[package]] name = "linux-raw-sys" version = "0.12.1" @@ -6449,6 +6753,12 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "mint" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" + [[package]] name = "mio" version = "1.2.1" @@ -6560,6 +6870,12 @@ dependencies = [ "unsigned-varint 0.8.0", ] +[[package]] +name = "multimap" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d87ecb2933e8aeadb3e3a02b828fed80a7528047e68b4f424523a0981a3a084" + [[package]] name = "multistream-select" version = "0.13.0" @@ -6909,6 +7225,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 = "num_enum" version = "0.7.6" @@ -6930,6 +7256,12 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "nvtx" version = "1.3.0" @@ -7197,6 +7529,34 @@ dependencies = [ "winapi", ] +[[package]] +name = "parity-scale-codec" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799781ae679d79a948e13d4824a40970bfa500058d245760dd857301059810fa" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34b4653168b563151153c9e4c08ebed57fb8262bebfa79711552fa983c623e7a" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.117", +] + [[package]] name = "parking" version = "2.2.1" @@ -7294,6 +7654,26 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" +[[package]] +name = "pest" +version = "2.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0848c601009d37dfa3430c4666e147e49cdcf1b92ecd3e63657d8a5f19da662" +dependencies = [ + "memchr", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset", + "indexmap 2.14.0", +] + [[package]] name = "pin-project" version = "1.1.13" @@ -7395,7 +7775,7 @@ dependencies = [ "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix", + "rustix 1.1.4", "windows-sys 0.61.2", ] @@ -7486,6 +7866,17 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "uint 0.9.5", +] + [[package]] name = "proc-macro-crate" version = "3.5.0" @@ -7648,6 +8039,7 @@ dependencies = [ "rand 0.9.4", "rand_chacha 0.9.0", "rand_xorshift", + "regex-syntax", "unarray", ] @@ -7671,6 +8063,26 @@ dependencies = [ "prost-derive 0.14.3", ] +[[package]] +name = "prost-build" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" +dependencies = [ + "heck", + "itertools 0.10.5", + "log", + "multimap", + "once_cell", + "petgraph", + "prettyplease", + "prost 0.13.5", + "prost-types 0.13.5", + "regex", + "syn 2.0.117", + "tempfile", +] + [[package]] name = "prost-derive" version = "0.13.5" @@ -8059,7 +8471,7 @@ dependencies = [ "paste", "pin-project-lite", "rustc-hash", - "rustc_version", + "rustc_version 0.4.1", "send_wrapper", "serde", "slotmap", @@ -8266,7 +8678,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "ruint", - "semver", + "semver 1.0.28", "serde", "tracing", ] @@ -8288,7 +8700,7 @@ dependencies = [ "risc0-zkp", "risc0-zkvm-platform", "rzup", - "semver", + "semver 1.0.28", "serde", "serde_json", "stability", @@ -8338,11 +8750,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8eae53a7bf1c09828dfd46ed5c942cefbf4bef3c4400f6758001569a834c462" dependencies = [ "cc", + "cust", "derive_more", "glob", "risc0-build-kernel", "risc0-core", "risc0-sys", + "sppark", ] [[package]] @@ -8354,6 +8768,7 @@ dependencies = [ "anyhow", "bytemuck", "cfg-if", + "cust", "downloader", "hex", "lazy-regex", @@ -8380,6 +8795,7 @@ dependencies = [ "risc0-build-kernel", "risc0-core", "risc0-sys", + "sppark", ] [[package]] @@ -8423,11 +8839,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69d677ec41e475534e18e58889ef0626dcdabf5e918804ef847da0c0bbf300b3" dependencies = [ "cc", + "cust", "derive_more", "glob", "risc0-build-kernel", "risc0-core", "risc0-sys", + "sppark", ] [[package]] @@ -8456,17 +8874,32 @@ dependencies = [ "ark-serialize 0.5.0", "bytemuck", "cfg-if", + "circom-witnesscalc", "hex", "num-bigint 0.4.6", "num-traits", "risc0-binfmt", "risc0-core", + "risc0-groth16-sys", "risc0-zkp", "rzup", "serde", "serde_json", "tempfile", "tracing", + "wtns-file", +] + +[[package]] +name = "risc0-groth16-sys" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "580750e1394c5a79b691c8197906263f17a1d3aa7bb46a934362f1ba1475b1a5" +dependencies = [ + "anyhow", + "blst", + "risc0-build-kernel", + "sppark", ] [[package]] @@ -8476,7 +8909,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "960c8295fbb87e1e73e332f8f7de2fba0252377575042d9d3e9a4eb50a38e078" dependencies = [ "anyhow", + "blst", + "cust", "risc0-build-kernel", + "sppark", ] [[package]] @@ -8501,6 +8937,7 @@ dependencies = [ "borsh", "bytemuck", "cfg-if", + "cust", "digest 0.10.7", "ff", "hex", @@ -8561,7 +8998,7 @@ dependencies = [ "rrs-lib", "rustc-demangle", "rzup", - "semver", + "semver 1.0.28", "serde", "sha2", "stability", @@ -8586,6 +9023,16 @@ dependencies = [ "stability", ] +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rustc-hex", +] + [[package]] name = "rocksdb" version = "0.24.0" @@ -8722,10 +9169,23 @@ version = "1.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c141e807189ad38a07276942c6623032d3753c8859c146104ac2e4d68865945a" dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "ark-ff 0.5.0", "borsh", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint 0.4.6", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", "proptest", "rand 0.8.6", "rand 0.9.4", + "rlp", "ruint-macro", "serde_core", "valuable", @@ -8750,13 +9210,28 @@ version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + [[package]] name = "rustc_version" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver", + "semver 1.0.28", ] [[package]] @@ -8768,6 +9243,19 @@ dependencies = [ "nom 7.1.3", ] +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.12.1", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.52.0", +] + [[package]] name = "rustix" version = "1.1.4" @@ -8777,7 +9265,7 @@ dependencies = [ "bitflags 2.12.1", "errno", "libc", - "linux-raw-sys", + "linux-raw-sys 0.12.1", "windows-sys 0.59.0", ] @@ -8896,7 +9384,7 @@ checksum = "5d2aed296f203fa64bcb4b52069356dd86d6ec578593985b919b6995bee1f0ae" dependencies = [ "hex", "rsa", - "semver", + "semver 1.0.28", "serde", "serde_with", "sha2", @@ -9015,6 +9503,15 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + [[package]] name = "semver" version = "1.0.28" @@ -9025,6 +9522,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + [[package]] name = "send_wrapper" version = "0.6.0" @@ -9317,7 +9823,7 @@ dependencies = [ "js-sys", "or_poisoned", "pin-project-lite", - "rustc_version", + "rustc_version 0.4.1", "rustversion", "send_wrapper", "serde", @@ -9347,7 +9853,7 @@ dependencies = [ "convert_case 0.11.0", "proc-macro2", "quote", - "rustc_version", + "rustc_version 0.4.1", "syn 2.0.117", "xxhash-rust", ] @@ -9543,6 +10049,16 @@ dependencies = [ "der 0.8.0", ] +[[package]] +name = "sppark" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfae3f3e0559cf04e9d9abce56d1db0dab58e03874cf4db5546540710740cfea" +dependencies = [ + "cc", + "which", +] + [[package]] name = "stability" version = "0.2.1" @@ -9749,7 +10265,7 @@ dependencies = [ "reactive_graph", "reactive_stores", "rustc-hash", - "rustc_version", + "rustc_version 0.4.1", "send_wrapper", "slotmap", "throw_error", @@ -9795,7 +10311,7 @@ dependencies = [ "fastrand", "getrandom 0.4.2", "once_cell", - "rustix", + "rustix 1.1.4", "windows-sys 0.59.0", ] @@ -9974,6 +10490,15 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + [[package]] name = "throw_error" version = "0.3.1" @@ -10631,6 +11156,24 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + [[package]] name = "uint" version = "0.10.0" @@ -10892,6 +11435,18 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vek" +version = "0.15.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8085882662f9bc47fc8b0cdafa5e19df8f592f650c02b9083da8d45ac9eebd17" +dependencies = [ + "approx", + "num-integer", + "num-traits", + "rustc_version 0.4.1", +] + [[package]] name = "version_check" version = "0.9.5" @@ -10928,7 +11483,7 @@ dependencies = [ "hex", "humantime", "humantime-serde", - "indicatif", + "indicatif 0.18.4", "itertools 0.14.0", "key_protocol", "keycard_wallet", @@ -11134,7 +11689,7 @@ dependencies = [ "bitflags 2.12.1", "hashbrown 0.15.5", "indexmap 2.14.0", - "semver", + "semver 1.0.28", ] [[package]] @@ -11184,6 +11739,18 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix 0.38.44", +] + [[package]] name = "wide" version = "0.7.33" @@ -11613,7 +12180,7 @@ dependencies = [ "id-arena", "indexmap 2.14.0", "log", - "semver", + "semver 1.0.28", "serde", "serde_derive", "serde_json", @@ -11627,6 +12194,15 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +[[package]] +name = "wtns-file" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d3b856452298f68a5879e3901918bac5d753ca9fa4be8a983a37a3d25dabf0a" +dependencies = [ + "byteorder", +] + [[package]] name = "wyz" version = "0.5.1" @@ -11672,7 +12248,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32e45ad4206f6d2479085147f02bc2ef834ac85886624a23575ae137c8aa8156" dependencies = [ "libc", - "rustix", + "rustix 1.1.4", ] [[package]] diff --git a/bench_ppe_aggregation_cuda.sh b/bench_ppe_aggregation_cuda.sh new file mode 100755 index 00000000..0c851820 --- /dev/null +++ b/bench_ppe_aggregation_cuda.sh @@ -0,0 +1,72 @@ +#!/usr/bin/env bash +# Runs the PPE aggregation test (CUDA-accelerated prover) across a range of fixture counts +# and prints a results table. +# +# Usage: +# ./bench_ppe_aggregation_cuda.sh +# +# Environment: +# PPE_FIXTURES - path to the fixture file (default: ppe_fixtures.bin) +# COUNTS - space-separated list of counts to test (default: powers of 2, 1..256) +# PPE_SEGMENT_LIMIT_PO2 - log2 of the max cycles per segment (default: 19). Lower values +# reduce peak GPU memory at the cost of more segments / proving time — +# needed on memory-constrained GPUs (risc0's default of 20 OOMs on an +# 8 GB card past n=1). Set to empty to use risc0's default. +# +# Example: +# PPE_FIXTURES=/path/to/ppe_fixtures.bin COUNTS="4 8 16" ./bench_ppe_aggregation_cuda.sh + +set -euo pipefail + +# This machine's distro CUDA toolkit (12.0) doesn't recognise the RTX 5050's +# Blackwell architecture (compute_120); point the build at the NVIDIA-provided +# CUDA 13.0 toolkit installed under /usr/local instead. +export NVCC=/usr/local/cuda-13.0/bin/nvcc +export CUDA_HOME=/usr/local/cuda-13.0 +export PATH="/usr/local/cuda-13.0/bin:$PATH" + +FIXTURES="$(realpath "${PPE_FIXTURES:-ppe_fixtures.bin}")" +COUNTS="${COUNTS:-1 2 4 6 8 10 12 14 16}" +SEGMENT_LIMIT_PO2="${PPE_SEGMENT_LIMIT_PO2-19}" + +if [ ! -f "$FIXTURES" ]; then + echo "ERROR: fixture file '$FIXTURES' not found." + echo "Generate it first:" + echo " RISC0_DEV_MODE=1 cargo run --release -p ppe_test_data_gen -- --output $FIXTURES" + exit 1 +fi + +printf "\n%-6s %14s %20s\n" "n" "proving_ms" "proof_size_bytes" +printf "%-6s %14s %20s\n" "------" "--------------" "--------------------" + +for count in $COUNTS; do + # Only forward PPE_SEGMENT_LIMIT_PO2 when set — the guest panics if it + # receives an empty value, whereas an absent var falls back to risc0's default. + segment_limit_env=() + if [ -n "$SEGMENT_LIMIT_PO2" ]; then + segment_limit_env=(PPE_SEGMENT_LIMIT_PO2="$SEGMENT_LIMIT_PO2") + fi + + line=$( + env \ + PPE_FIXTURES="$FIXTURES" \ + PPE_FIXTURES_COUNT="$count" \ + "${segment_limit_env[@]}" \ + cargo test -p lee --features cuda aggregate_ppe_proofs_from_fixtures -- --nocapture 2>&1 \ + | grep -v "^test_programs:" \ + | grep "\[lee::analytics\] ppe_aggregation" || true + ) + + if [ -z "$line" ]; then + printf "%-6s %14s %20s\n" "$count" "skipped" "-" + continue + fi + + n=$(echo "$line" | grep -o 'n=[0-9]*' | cut -d= -f2) + proving_ms=$(echo "$line" | grep -o 'proving_ms=[0-9]*' | cut -d= -f2) + proof_size=$(echo "$line" | grep -o 'proof_size_bytes=[0-9]*'| cut -d= -f2) + + printf "%-6s %14s %20s\n" "$n" "$proving_ms" "$proof_size" +done + +printf "\n" diff --git a/lee/state_machine/Cargo.toml b/lee/state_machine/Cargo.toml index 8777db09..e1dc4084 100644 --- a/lee/state_machine/Cargo.toml +++ b/lee/state_machine/Cargo.toml @@ -43,4 +43,5 @@ test-case = "3.3.1" [features] default = [] prove = ["risc0-zkvm/prove"] +cuda = ["risc0-zkvm/cuda"] test-utils = [] diff --git a/lee/state_machine/src/privacy_preserving_transaction/circuit.rs b/lee/state_machine/src/privacy_preserving_transaction/circuit.rs index ee968819..2724eb25 100644 --- a/lee/state_machine/src/privacy_preserving_transaction/circuit.rs +++ b/lee/state_machine/src/privacy_preserving_transaction/circuit.rs @@ -1026,6 +1026,14 @@ mod tests { } let mut env_builder = ExecutorEnv::builder(); + + // Smaller segments lower peak prover memory (handy on memory-constrained + // GPUs) at the cost of more segments and overall proving time. + if let Ok(po2_str) = std::env::var("PPE_SEGMENT_LIMIT_PO2") { + let po2: u32 = po2_str.parse().expect("PPE_SEGMENT_LIMIT_PO2 must be a number"); + env_builder.segment_limit_po2(po2); + } + env_builder.write(&PRIVACY_PRESERVING_CIRCUIT_ID).unwrap(); env_builder .write(&u32::try_from(fixtures.len()).expect("fixture count fits in u32"))