Segment 22
In this sub-session, the team conclusively resolved the mystery of GPU underutilization (~50%) by instrumenting the C++ gpu_prove_start function and identifying that the Host-to-Device transfer of synthesis vectors (a/b/c) was the bottleneck, running at 1-4 GB/s instead of the expected 50 GB/s due to standard heap allocations requiring staged copies through a pinned bounce buffer. The chosen solution was to implement a zero-copy pinned memory pool (PinnedPool) integrated with the MemoryBudget system, and to extend bellperson's ProvingAssignment to use a PinnedBacking struct that safely holds and releases cudaHostAlloc buffers. The core components were implemented and validated with cargo check, positioning the team to wire the pool into the engine and complete the integration.
Zero-Copy Pinned Memory: Resolving GPU Underutilization in the CuZK Proving Pipeline