3

我正在试验 DSP.jl -conv()特别是这种方法。我正在使用CUDANativeandCuArrays创建数组作为 的参数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较大的值并成功完成脚本。

为了防止这种情况发生,我应该做些什么不同的事情吗?

4

0 回答 0