diff --git a/Cargo.lock b/Cargo.lock index 7e91a2d0..507141ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -287,7 +287,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -413,6 +413,17 @@ dependencies = [ "zeroize", ] +[[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.47" @@ -579,6 +590,24 @@ dependencies = [ "typenum", ] +[[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 = "debugid" version = "0.8.0" @@ -602,7 +631,7 @@ checksum = "74ef43543e701c01ad77d3a5922755c6a1d71b22d942cb8042be4994b380caff" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -613,7 +642,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -663,28 +692,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd63582de2b59ea1aa48d7c1941b5d87618d95484397521b3acdfa0e1e9f5e45" -[[package]] -name = "ec-gpu-gen" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2353854622ec1abfd22243eb958453b95f1502e2a56648bf9db49ccbfb55f01" -dependencies = [ - "bitvec", - "crossbeam-channel", - "ec-gpu", - "execute", - "ff", - "group", - "hex", - "log", - "num_cpus", - "once_cell", - "rayon", - "sha2", - "thiserror 1.0.69", - "yastl", -] - [[package]] name = "either" version = "1.15.0" @@ -720,7 +727,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -767,7 +774,7 @@ checksum = "ce8cd46a041ad005ab9c71263f9a0ff5b529eac0fe4cc9b4a20f4f0765d8cf4b" dependencies = [ "execute-command-tokens", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -793,6 +800,18 @@ dependencies = [ "subtle", ] +[[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.1" @@ -813,10 +832,13 @@ dependencies = [ [[package]] name = "flume" -version = "0.10.14" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ + "futures-core", + "futures-sink", + "nanorand", "spin 0.9.8", ] @@ -875,12 +897,34 @@ dependencies = [ "rand_core 0.6.4", ] +[[package]] +name = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "funty" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + [[package]] name = "generic-array" version = "0.14.7" @@ -1011,6 +1055,15 @@ dependencies = [ "digest", ] +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + [[package]] name = "incrementalmerkletree" version = "0.8.2" @@ -1174,7 +1227,7 @@ checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" [[package]] name = "masp_note_encryption" -version = "3.0.8" +version = "3.0.9" dependencies = [ "arbitrary", "borsh", @@ -1188,7 +1241,7 @@ dependencies = [ [[package]] name = "masp_primitives" -version = "3.0.8" +version = "3.0.9" dependencies = [ "aes", "arbitrary", @@ -1224,7 +1277,7 @@ dependencies = [ [[package]] name = "masp_proofs" -version = "3.0.8" +version = "3.0.9" dependencies = [ "blake2b_simd", "byteorder", @@ -1300,9 +1353,9 @@ dependencies = [ [[package]] name = "nam-bellperson" -version = "0.26.5-nam.1" +version = "0.26.6-nam.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2518744be8c4c7899e55f22df7f96e4ed02fd90d900e6df22eb13a9b239876a3" +checksum = "b2db0fa5a3cc38b4b835b7d20f032d1f1266d4db7932d63d20b667dc9fb20416" dependencies = [ "bellpepper-core", "bincode", @@ -1311,12 +1364,13 @@ dependencies = [ "crossbeam-channel", "digest", "ec-gpu", - "ec-gpu-gen", "ff", + "fs2", "group", "log", "memmap2 0.5.10", "nam-blstrs", + "nam-ec-gpu-gen", "pairing", "rand 0.8.5", "rand_core 0.6.4", @@ -1348,6 +1402,7 @@ checksum = "b9b31595611bdfcbe0880c411d325e6aae7bade26fcdc5dc4cc8aeec54a7db06" dependencies = [ "arbitrary", "byte-slice-cast", + "ec-gpu", "ff", "group", "nam-blst", @@ -1357,6 +1412,27 @@ dependencies = [ "subtle", ] +[[package]] +name = "nam-ec-gpu-gen" +version = "0.7.2-nam.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d34594d64c3d27e3a93de6821deb9a88c2b13dea173aa6b7c66503a1a4261af" +dependencies = [ + "bitvec", + "ec-gpu", + "execute", + "ff", + "flume", + "group", + "hex", + "log", + "num_cpus", + "rayon", + "rust-gpu-tools", + "sha2", + "thiserror 1.0.69", +] + [[package]] name = "nam-jubjub" version = "1.10.1-nam.1" @@ -1413,6 +1489,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom 0.2.16", +] + [[package]] name = "nix" version = "0.26.4" @@ -1511,6 +1596,25 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +[[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 = "option-ext" version = "0.2.0" @@ -1526,6 +1630,29 @@ dependencies = [ "group", ] +[[package]] +name = "parking_lot" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +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 = "password-hash" version = "0.5.0" @@ -1821,6 +1948,15 @@ 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.9.4", +] + [[package]] name = "redox_users" version = "0.4.6" @@ -1884,6 +2020,40 @@ dependencies = [ "windows-sys 0.52.0", ] +[[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" @@ -2016,7 +2186,7 @@ checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2130,6 +2300,17 @@ dependencies = [ "symbolic-common", ] +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.106" @@ -2147,6 +2328,15 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" +[[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.22.0" @@ -2186,7 +2376,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2197,7 +2387,7 @@ checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2283,7 +2473,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2362,7 +2552,7 @@ checksum = "d674d135b4a8c1d7e813e2f8d1c9a58308aee4a680323066025e53132218bd91" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2431,7 +2621,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.106", "wasm-bindgen-shared", ] @@ -2453,7 +2643,7 @@ checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2701,16 +2891,6 @@ 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 = "zcash_encoding" version = "0.2.2" @@ -2738,7 +2918,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] [[package]] @@ -2758,5 +2938,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.106", ] diff --git a/Cargo.toml b/Cargo.toml index 4ff331d4..8266dce3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,7 +8,7 @@ members = [ [workspace.package] -version = "3.0.8" +version = "3.0.9" [profile.release] lto = true diff --git a/masp_proofs/Cargo.toml b/masp_proofs/Cargo.toml index 458d4bfb..98e0ddac 100644 --- a/masp_proofs/Cargo.toml +++ b/masp_proofs/Cargo.toml @@ -19,7 +19,6 @@ masp_primitives = { version = "3.0.5", path = "../masp_primitives" } # Dependencies exposed in a public API: # (Breaking upgrades to these require a breaking upgrade to this crate.) -bellman = { package = "nam-bellperson", version="0.26.5-nam.1", features = ["groth16"] } bls12_381 = {package = "nam-blstrs", version = "0.7.1-nam.0" } ff = "0.13" group = "0.13" @@ -39,6 +38,17 @@ redjubjub = {package = "nam-redjubjub", version = "0.7.1-nam.0" } getrandom = { version = "0.2" } itertools = "0.14" +# Bellman is also used in the public API, so an update to it +# might warrant a major version bump +[target.'cfg(masp_proof_backend_cuda)'.dependencies] +bellman = { package = "nam-bellperson", version = "0.26.6-nam.1", features = ["groth16", "cuda"] } + +[target.'cfg(masp_proof_backend_opencl)'.dependencies] +bellman = { package = "nam-bellperson", version = "0.26.6-nam.1", features = ["groth16", "opencl"] } + +[target.'cfg(all(not(masp_proof_backend_cuda), not(masp_proof_backend_opencl)))'.dependencies] +bellman = { package = "nam-bellperson", version = "0.26.6-nam.1", features = ["groth16"] } + [dev-dependencies] byteorder = "1" criterion = "0.5" diff --git a/masp_proofs/src/lib.rs b/masp_proofs/src/lib.rs index b0213243..ce789072 100644 --- a/masp_proofs/src/lib.rs +++ b/masp_proofs/src/lib.rs @@ -2,6 +2,17 @@ //! //! `masp_proofs` contains the zk-SNARK circuits used by MASP based on Zcash Sapling, and the APIs for creating //! and verifying proofs. +//! +//! ## GPU acceleration +//! +//! CUDA and OpenCL backends are supported via [`bellperson`](bellman). To enable them, +//! set the `RUSTFLAGS` environment variable to `--cfg $backend`, where `$backend` assumes +//! the following values: +//! +//! - `masp_proof_backend_cuda` for CUDA. +//! - `masp_proof_backend_opencl` for OpenCL. +//! +//! These `cfg` flags are mutually exclusive. #![cfg_attr(docsrs, feature(doc_cfg))] // Catch documentation errors caused by code changes.