CUBLAS.jl
CUBLAS.jl copied to clipboard
Memory management
I was wondering if there was a way to modify the behaviour of CUBLAS.jl functions so that when a pointer is overridden in julia, the appropriate CUDArt.free(ptr) is called.
using CUBLAS
using CUDArt
N = 50
T = 193
V = 60 * 10^3
K = 100
hA = map(Float32, randn(N*T, K));
hS = map(Float32, randn(K, V));
dA = CudaArray(hA)
dS = CudaArray(hS)
for i in 1:10
dY = CUBLAS.gemm('N', 'N', dA, dS)
end
Results in an out of memory error:
julia> for i in 1:10
dY = CUBLAS.gemm('N', 'N', dA, dS)
end
WARNING: CUDA error triggered from:
[inlined code] from error.jl:26
in checkerror at /home/mcp50/.julia/v0.5/CUDArt/src/libcudart-6.5.jl:15
[inlined code] from essentials.jl:111
in cudaMalloc at /home/mcp50/.julia/v0.5/CUDArt/src/../gen-6.5/gen_libcudart.jl:260
in malloc at /home/mcp50/.julia/v0.5/CUDArt/src/pointer.jl:36
in call at /home/mcp50/.julia/v0.5/CUDArt/src/arrays.jl:99
[inlined code] from /home/mcp50/.julia/v0.5/CUDArt/src/arrays.jl:110
in gemm at /home/mcp50/.julia/v0.5/CUBLAS/src/blas.jl:928
[inlined code] from float.jl:24
in gemm at /home/mcp50/.julia/v0.5/CUBLAS/src/blas.jl:936
[inlined code] from none:2
in anonymous at no file:0ERROR: "out of memory"
[inlined code] from essentials.jl:111
in checkerror at /home/mcp50/.julia/v0.5/CUDArt/src/libcudart-6.5.jl:16
[inlined code] from essentials.jl:111
in cudaMalloc at /home/mcp50/.julia/v0.5/CUDArt/src/../gen-6.5/gen_libcudart.jl:260
in malloc at /home/mcp50/.julia/v0.5/CUDArt/src/pointer.jl:36
in call at /home/mcp50/.julia/v0.5/CUDArt/src/arrays.jl:99
[inlined code] from /home/mcp50/.julia/v0.5/CUDArt/src/arrays.jl:110
in gemm at /home/mcp50/.julia/v0.5/CUBLAS/src/blas.jl:928
[inlined code] from float.jl:24
in gemm at /home/mcp50/.julia/v0.5/CUBLAS/src/blas.jl:936
[inlined code] from none:2
in anonymous at no file:0
It is straightforward to call CUDArt.free in the loop, so this is a 'nice to have' point.