JuliaGPU / CUDAnative.jl

Julia support for native CUDA programming
https://juliagpu.org/cuda/
Other
392 stars 55 forks source link

Add a simple multi-threaded test. #605

Closed maleadt closed 4 years ago

maleadt commented 4 years ago
threading: Test Failed at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1056
  Expression: Array([100, 100]) == [3, 7]
   Evaluated: [100, 100] == [3, 7]
Stacktrace:
 [1] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1
 [2] eval at ./boot.jl:330 [inlined]
 [3] eval(::Expr) at ./client.jl:425
 [4] macro expansion at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1061 [inlined]
 [5] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:1107 [inlined]
 [6] macro expansion at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1045 [inlined]
 [7] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:1107 [inlined]
 [8] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:5
threading: Error During Test at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1056
  Test threw exception
  Expression: Array(threading: Error During Test at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1044
  Got exception outside of a @test
  CUDA error: an illegal memory access was encountered (code 700, ERROR_ILLEGAL_ADDRESS)
  Stacktrace:
   [1] throw_api_error(::CUDAdrv.cudaError_enum) at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CUDAdrv/5umUa/src/error.jl:110
   [2] macro expansion at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CUDAdrv/5umUa/src/error.jl:117 [inlined]
   [3] cuMemcpyDtoH_v2(::Ptr{Int64}, ::CuPtr{Int64}, ::Int64) at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CUDAapi/XuSHC/src/call.jl:93
   [4] #unsafe_copyto!#6 at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CUDAdrv/5umUa/src/memory.jl:314 [inlined]
   [5] unsafe_copyto! at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CUDAdrv/5umUa/src/memory.jl:307 [inlined]
   [6] unsafe_copyto! at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CuArrays/A6GUx/src/array.jl:289 [inlined]
   [7] copyto! at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CuArrays/A6GUx/src/array.jl:264 [inlined]
   [8] copyto! at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/GPUArrays/1wgPO/src/abstractarray.jl:118 [inlined]
   [9] Array{Int64,1}(::CuArray{Int64,1,Nothing}) at ./array.jl:498
   [10] Array at ./boot.jl:428 [inlined]
   [11] convert at ./array.jl:490 [inlined]
   [12] adapt_storage at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/CuArrays/A6GUx/src/array.jl:242 [inlined]
   [13] adapt_structure at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/Adapt/m5jFF/src/Adapt.jl:9 [inlined]
   [14] adapt at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/Adapt/m5jFF/src/Adapt.jl:6 [inlined]
   [15] convert_to_cpu at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/GPUArrays/1wgPO/src/abstractarray.jl:56 [inlined]
   [16] #5 at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/GPUArrays/1wgPO/src/abstractarray.jl:60 [inlined]
   [17] show_vector at /builds/JuliaGPU/CUDAnative.jl/.julia/packages/GPUArrays/1wgPO/src/abstractarray.jl:71 [inlined]
   [18] show at ./arrayshow.jl:418 [inlined]
   [19] show_unquoted(::Base.PipeEndpoint, ::CuArray{Int64,1,Nothing}, ::Int64, ::Int64) at ./show.jl:754
   [20] show_list(::Base.PipeEndpoint, ::Array{Any,1}, ::String, ::Int64, ::Int64, ::Bool) at ./show.jl:948
   [21] show_enclosed_list(::Base.PipeEndpoint, ::Char, ::Array{Any,1}, ::String, ::Char, ::Int64, ::Int64, ::Bool) at ./show.jl:956
   [22] show_enclosed_list at ./show.jl:955 [inlined]
   [23] show_call(::Base.PipeEndpoint, ::Symbol, ::Symbol, ::Array{Any,1}, ::Int64) at ./show.jl:982
   [24] show_unquoted(::Base.PipeEndpoint, ::Expr, ::Int64, ::Int64) at ./show.jl:1229
   [25] show_list(::Base.PipeEndpoint, ::Array{Any,1}, ::String, ::Int64, ::Int64, ::Bool) at ./show.jl:948
   [26] show_unquoted(::Base.PipeEndpoint, ::Expr, ::Int64, ::Int64) at ./show.jl:1214
   [27] print(::Base.PipeEndpoint, ::Expr) at ./show.jl:750
   [28] print(::Base.PipeEndpoint, ::String, ::Expr, ::Vararg{Any,N} where N) at ./strings/io.jl:46
   [29] println(::Base.PipeEndpoint, ::String, ::Vararg{Any,N} where N) at ./strings/io.jl:73
   [30] show(::Base.PipeEndpoint, ::Test.Error) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:180
   [31] print(::Base.PipeEndpoint, ::Test.Error) at ./strings/io.jl:35
   [32] print(::Test.Error) at ./coreio.jl:3
   [33] record(::Test.DefaultTestSet, ::Test.Error) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:764
   [34] do_test(::Test.Threw, ::Expr) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:519
   [35] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1
   [36] eval at ./boot.jl:330 [inlined]
   [37] eval(::Expr) at ./client.jl:425
   [38] macro expansion at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1061 [inlined]
   [39] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:1107 [inlined]
   [40] macro expansion at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:1045 [inlined]
   [41] macro expansion at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:1107 [inlined]
   [42] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/device/execution.jl:5
   [43] include at ./boot.jl:328 [inlined]
   [44] include_relative(::Module, ::String) at ./loading.jl:1105
   [45] include(::Module, ::String) at ./Base.jl:31
   [46] include(::String) at ./client.jl:424
   [47] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/runtests.jl:96
   [48] top-level scope at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.3/Test/src/Test.jl:1107
   [49] top-level scope at /builds/JuliaGPU/CUDAnative.jl/test/runtests.jl:11
   [50] include at ./boot.jl:328 [inlined]
   [51] include_relative(::Module, ::String) at ./loading.jl:1105
   [52] include(::Module, ::String) at ./Base.jl:31
   [53] include(::String) at ./client.jl:424
   [54] top-level scope at none:6
   [55] eval(::Module, ::Any) at ./boot.jl:330
   [56] exec_options(::Base.JLOptions) at ./client.jl:263
maleadt commented 4 years ago

Ah this is probably because we don't use the same GPU across all threads.