【问题标题】:MATLAB GPU - Latency of CUDA memory copies?MATLAB GPU - CUDA 内存副本的延迟?
【发布时间】: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


【解决方案1】:

在您的循环中,您正在测量两个内存副本,事实证明它们每个都在约 10 us 中运行 - 我实际上认为这并不算太糟糕(请记住,内存副本的开销与内核启动)。例如,以下两篇论文估计延迟约为 10 微秒:1)Reducing GPU Offload Latency via Fine-Grained CPU-GPU Synchronization; 2)Latency and Bandwidth Impact on GPU-systems

【讨论】:

  • 嗯,我在第一篇文章中看到的时间以微秒为单位,而不是 CPU 周期......
  • @user4422 根据这个参考,你的 10us 实际上是相当快的。
猜你喜欢
  • 2012-02-22
  • 2017-02-19
  • 2018-09-06
  • 2017-10-09
  • 2014-09-25
  • 2014-11-12
  • 2012-08-10
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多