Hey everyone, we’re putting in a Zcash Community Grants application for something we’ve been calling “tensor-accelerated Orchard proving,” and wanted to share it here for community feedback.
The short version: Zcash’s Orchard and Ironwood provers use the Pasta curves with a zero-trust setup (no more Groth16 trusted setups), which was a huge win for decentralisation but came with a MASSIVE performance penalty: proving times went from decimals to single-digit seconds, and throughput dropped to around 0.2 TPS on CPU. The bottleneck is the multi-scalar multiplication (MSM) and NTT inside the proving pipeline.
Not to mention there are no baseline SIMT provers for Orchard yet either, so we will write them too as a part of this grant.
The proposal is to take the WGMMA (warp-group matrix multiply-accumulate) optimisations from the TensorZKP paper and apply them to Pasta curves on Hopper H100s. The idea is to decompose each 255-bit Pallas field element into U8 sub-limbs, feed them through the tensor cores that normally do AI inference, then reconstruct clean field elements via Barrett reduction on the SIMT units.
The hard part: WGMMA gives you a dirty S32 accumulator with partial products, not a clean field element. The carry chain post-processing is the make-or-break step, since if the Barrett reduction is too expensive, it eats into the tensor core gains. We think the 8-limb Pallas layout keeps this manageable (~50% less sequential work vs 12-limb BLS curves), but we won’t know for sure until the kernel is running.
We’re targeting 1.5x-2x speedup on H100 GPUs, with an optional extension to consumer RTX cards if WMMA (the less-efficient but more available tensor core path) works out. If it doesn’t, and the bandwidth limits on consumer hardware might eat the gains… we’ll publish the bottleneck characterisation so the next person doesn’t waste time on the same dead end.
We already have a working baseline: a CUDA Pippenger MSM for BLS12-381 with per-stage profiling, and WGMMA sumcheck kernels using TMA descriptors. This grant would let us adapt that work to Pasta curves and deliver the optimised provers back to the ecosystem.
The full proposal is here: Grant Application - TensorZKP-based Orchard Prover to speed up zCash shielded transactions · Issue #355 · ZcashCommunityGrants/zcashcommunitygrants · GitHub
We’d love feedback on this.
Thanks in advance for any thoughts!