我正在试验 DSP.jl -conv()
特别是这种方法。我正在使用CUDANative
andCuArrays
创建数组作为 的参数conv()
,以便使用fft()
等的 cuda 版本。我BenchmarkTools
用来获取性能数据。我发现 Julia 运行时抱怨在奇怪的情况下会耗尽 CPU 或 GPU 内存。这是我的测试设置:
using CUDAdrv, CUDAnative, CuArrays
using DSP
using FFTW
using BenchmarkTools
N = 120
A = rand(Float32, N, N, N);
B = rand(Float32, N, N, N);
A_d = cu(A);
B_d = cu(B);
function doConv(A, B)
C = conv(A, B)
finalize(C)
C = []
end
t = @benchmark doConv($A_d, $B_d)
display(t)
这是我提到的奇怪行为的一个例子。如果我设置N
为 120,我的脚本运行完成。如果我设置N
为 64,我会收到“内存不足”错误:ERROR: LoadError: CUFFTError(code 2, cuFFT failed to allocate GPU or CPU memory)
. 我可以先运行较小的情况,得到错误,然后碰到N
较大的值并成功完成脚本。
为了防止这种情况发生,我应该做些什么不同的事情吗?