CUDA Graph的捕获条件?哪些操作不能捕获?CUDA Graph的捕获条件?哪些操作不能捕获?
CUDA Graph 把一段 kernel 与 memcpy 序列录成一张图,一次性提交、减少 host 侧启动开销,适合固定计算图、反复执行的推理或训练 step。
在 stream 上 用 cudaStreamBeginCapture(stream) 开始、cudaStreamEndCapture(stream, &graph) 结束;期间在该 stream 上发的 kernel、memcpy 会被记录。要求:不能在捕获期间做依赖该 stream 结果的 host 同步(如 cudaStreamSynchronize)、不能做会阻塞或依赖未捕获操作的行为;子图、条件分支需用 stream 内可表达的方式。
cudaStreamSynchronize、cudaDeviceSynchronize、cudaMemcpy(同步版)、cudaMalloc 等会阻塞或非异步的 API 不能在捕获期间对「被依赖的 stream」调用。cudaLaunchHostFunc 在部分版本/场景下有限制。用 cudaMemcpyAsync、cudaMallocAsync(若可用)等异步接口即可纳入图。
| 返回模块 | 返回总览 |