cuda graph_error ai_generated true

CUDA error: operation failed due to a previous error during capture (cudaErrorStreamCaptureMerge)

ID: cuda/stream-capture-merge

Also available as: JSON · Markdown
80%Fix Rate
84%Confidence
30Evidence
2023-06-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
12 active

Root Cause

During CUDA graph stream capture, an invalid merge of two stream capture graphs was attempted. This occurs when two streams being captured are synchronized (via events or stream wait) but belong to different capture graphs, or when a non-captured stream tries to synchronize with a captured stream. CUDA requires all captured streams in a single graph to originate from the same capture root.

generic

Workarounds

  1. 88% success Ensure all captured streams fork from and join back to the same root capture stream
    Start capture on one root stream: cudaStreamBeginCapture(rootStream). Fork work to child streams using cudaEventRecord on rootStream and cudaStreamWaitEvent on child streams. Join back with cudaEventRecord on child streams and cudaStreamWaitEvent on rootStream. End capture on rootStream. Never mix captured and non-captured streams.
  2. 85% success Replace device-wide synchronization with stream-level event synchronization during capture
    Replace cudaDeviceSynchronize with targeted event-based synchronization: record an event on the producing stream and wait on it from the consuming stream. This creates explicit graph edges instead of invalid device-wide barriers. Audit all synchronization calls inside the capture region.

Dead Ends

Common approaches that don't work:

  1. Using cudaDeviceSynchronize inside a stream capture region 95% fail

    cudaDeviceSynchronize synchronizes all streams on the device, including non-captured streams. This creates an invalid dependency between captured and non-captured streams, triggering the merge error. Device-wide synchronization cannot be represented in a CUDA graph.

  2. Synchronizing with a stream that is being captured in a different graph 90% fail

    Each stream capture produces an independent graph. Waiting on an event from a different capture graph attempts to merge two separate graphs, which is not allowed. All dependent streams must share the same capture root stream.

Error Chain

Leads to:
Preceded by:
Frequently confused with: