JuliaGPU/CUDA.jl

Don't sync during graph record

Open

#1,229 创建于 2021年11月3日

在 GitHub 查看
 (0 评论) (0 反应) (0 负责人)Julia (274 fork)batch import
buggood first issue

仓库指标

Star
 (1,408 star)
PR 合并指标
 (平均合并 5天 5小时) (30 天内合并 16 个 PR)

描述

We eagerly sync during copyto to avoid blocking, but that doesn't work when recording a graph:

julia> @captured CuArray([1])
ERROR: CUDA error: operation failed due to a previous error during capture (code 901, ERROR_STREAM_CAPTURE_INVALIDATED)
Stacktrace:
 [1] throw_api_error(res::CUDA.cudaError_enum)
   @ CUDA ~/Julia/pkg/CUDA/lib/cudadrv/error.jl:91
 [2] capture(f::var"#11#13"; flags::CUDA.CUstreamCaptureMode_enum, throw_error::Bool)
   @ CUDA ~/Julia/pkg/CUDA/lib/cudadrv/graph.jl:44
 [3] top-level scope
   @ ~/Julia/pkg/CUDA/lib/cudadrv/graph.jl:213
 [4] top-level scope
   @ ~/Julia/pkg/CUDA/src/initialization.jl:52

caused by: CUDA error: operation not permitted when stream is capturing (code 900, ERROR_STREAM_CAPTURE_UNSUPPORTED)
Stacktrace:
  [1] throw_api_error(res::CUDA.cudaError_enum)
    @ CUDA ~/Julia/pkg/CUDA/lib/cudadrv/error.jl:91
  [2] isdone
    @ ~/Julia/pkg/CUDA/lib/cudadrv/stream.jl:107 [inlined]
  [3] nonblocking_synchronize
    @ ~/Julia/pkg/CUDA/lib/cudadrv/stream.jl:137 [inlined]
  [4] macro expansion
    @ ~/Julia/pkg/CUDA/src/array.jl:388 [inlined]
  [5] macro expansion
    @ ~/Julia/pkg/CUDA/src/state.jl:182 [inlined]
  [6] unsafe_copyto!(dest::CuArray{Int64, 1, CUDA.Mem.DeviceBuffer}, doffs::Int64, src::Vector{Int64}, soffs::Int64, n::Int64)
    @ CUDA ~/Julia/pkg/CUDA/src/array.jl:384
  [7] copyto!
    @ ~/Julia/pkg/CUDA/src/array.jl:342 [inlined]

贡献者指南