forked from JuliaGPU/CUDA.jl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CUDAdrv.jl
73 lines (55 loc) · 1.74 KB
/
CUDAdrv.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
module CUDAdrv
using CUDAapi
using CEnum
using Printf
## source code includes
# essential functionality
include("pointer.jl")
const CUdeviceptr = CuPtr{Cvoid}
# low-level wrappers
const libcuda = Sys.iswindows() ? :nvcuda : :libcuda
include("libcuda_common.jl")
include("error.jl")
include("libcuda.jl")
include("libcuda_aliases.jl")
# high-level wrappers
include("version.jl")
include("devices.jl")
include("context.jl")
include(joinpath("context", "primary.jl"))
include("stream.jl")
include("memory.jl")
include("module.jl")
include("events.jl")
include("execution.jl")
include("profile.jl")
include("occupancy.jl")
include("deprecated.jl")
## initialization
const __initialized__ = Ref(false)
functional() = __initialized__[]
function __init__()
precompiling = ccall(:jl_generating_output, Cint, ()) != 0
silent = parse(Bool, get(ENV, "JULIA_CUDA_SILENT", "false")) || precompiling
verbose = parse(Bool, get(ENV, "JULIA_CUDA_VERBOSE", "false"))
try
if haskey(ENV, "_") && basename(ENV["_"]) == "rr"
error("Running under rr, which is incompatible with CUDA")
end
cuInit(0)
if version() <= v"9"
silent || @warn "CUDAdrv.jl only supports NVIDIA drivers for CUDA 9.0 or higher (yours is for CUDA $(version()))"
end
__initialized__[] = true
catch ex
# don't actually fail to keep the package loadable
if !silent
if verbose
@error "CUDAdrv.jl failed to initialize" exception=(ex, catch_backtrace())
else
@info "CUDAdrv.jl failed to initialize, GPU functionality unavailable (set JULIA_CUDA_SILENT or JULIA_CUDA_VERBOSE to silence or expand this message)"
end
end
end
end
end