MATLAB GPU - CUDA 内存副本的延迟?
MATLAB GPU - Latency of CUDA memory copies?
我正在尝试测量 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 的问题吗?为了减少延迟,是否需要在 system/GPU 配置中进行设置?
更多详细信息:我在 Intel i7 和 GTX770 GeForce GPU 上使用 Windows 7,Matlab 2014a。
在你的循环中,你正在测量两个内存副本,结果是它们 运行 每个大约 10 us - 我实际上认为这一点也不差(记住内存副本有本质上与内核启动的开销相同)。例如,以下两篇论文估计延迟约为 10 微秒:1) Reducing GPU Offload Latency via Fine-Grained CPU-GPU Synchronization; 2) Latency and Bandwidth Impact on GPU-systems
我正在尝试测量 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 的问题吗?为了减少延迟,是否需要在 system/GPU 配置中进行设置?
更多详细信息:我在 Intel i7 和 GTX770 GeForce GPU 上使用 Windows 7,Matlab 2014a。
在你的循环中,你正在测量两个内存副本,结果是它们 运行 每个大约 10 us - 我实际上认为这一点也不差(记住内存副本有本质上与内核启动的开销相同)。例如,以下两篇论文估计延迟约为 10 微秒:1) Reducing GPU Offload Latency via Fine-Grained CPU-GPU Synchronization; 2) Latency and Bandwidth Impact on GPU-systems