【发布时间】:2015-03-10 00:35:37
【问题描述】:
我正在尝试在 MATLAB 中测量 CUDA 内存副本的延迟。 我编写了以下例程,其中标量反复复制到 GPU 和从 GPU 复制。
a=single(randn(1,1));
tic;
for j=1:50*1000
aGpu=gpuArray(a);
a2=gather(aGpu);
end
toc;
执行时间约为一秒。鉴于循环中有 50,000 次迭代并且我的 CPU 工作在 3.4/3.7 GHz,这意味着来回复制标量平均需要大约 70,000 个 CPU 周期。我只是在复制一个标量,所以我猜传输数据的时间可以忽略不计,而且大部分时间都是延迟。 这种延迟对我来说似乎太高了。我在各个地方读到过,CUDA 内存副本的延迟预计低于 1,000 个 CPU 周期。 有人做过类似的实验吗?我的数字很奇怪吗? MATLAB有问题吗?是否需要在系统/GPU 配置中进行设置以减少延迟?
更多详细信息:我正在使用 Windows 7、Matlab 2014a、Intel i7 和 GTX770 GeForce GPU。
【问题讨论】:
-
有趣的问题。永远记住:GPU 的瓶颈在于 CPU-GPU 之间的通信。很多时候 GPU 是不值得的,因为 CPU 与 GPU 通信所花费的时间比实际计算问题所花费的时间要多。尝试向 GPU 询问计算成本更高的内容。
-
将一个标量传输到 GPU 的延迟是否值得关注?启动内核时,您可以包含在启动时传输到 GPU 的标量。这可能有助于隐藏延迟,但是如果您担心 GPU 内核的延迟,您可能需要在每个启动的内核中做更多的工作,正如 Ander Biguri 所暗示的那样。
标签: matlab cuda gpu gpgpu latency