我正在尝试在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上。
答案 0 :(得分:1)
在你的循环中,你正在测量两个内存副本,事实证明它们每个都运行~10 us - 我实际上认为它根本不是太糟糕(记住内存副本的开销基本上与内核启动)。例如,以下两篇论文估计了大约10微秒的延迟:1)Reducing GPU Offload Latency via Fine-Grained CPU-GPU Synchronization; 2)Latency and Bandwidth Impact on GPU-systems