正常的CUDA计划:
所以,如果我测量主机到设备时间
time = clock ();
2. mem host to device;
cudaDeviceSynchronize;
time = clock () - time ;
在我的情况下,我将获得0.1秒的值。但我的PCI总线速度实际上是24GB / s,假设产生1000倍的时间值,所以我假设0.1秒是用来激活PCI总线的时间。
因此我尝试将主机循环到设备时间1000次,并且第一次显示0.1秒,其余时间仅为0.000秒(不能超过毫秒),并且1000循环的总时间仅为0.12秒。
所以我必须保持我的设备PCI总线激活,以减少主机到设备的时间。我尝试使用cudaDeviceSynchronize,如下所示:
cudaDeviceSynchronize; //---to keep PCI bus activate
time = clock ();
2. mem host to device;
cudaDeviceSynchronize;
time = clock () - time ;
我得到的时间是0.000秒,主机到设备的时间最小化。那是对的吗?是0.1s =时间到"激活" PCI总线?
答案 0 :(得分:1)
如Robert Crovella所示,第一次调用CUDA函数时测量的时间与CUDA初始化有关。
此外,如果您测量的是如此短的时间段,则很可能只是测量函数调用的开销。您应该尝试增加要复制的内存大小,以获得更重要的数字。
如果您对测量CPU和GPU之间的复制时间感兴趣,请务必尝试使用固定内存,如documentation中所述。