cudaDeviceSynchronize可以减少记忆时间吗?

时间:2016-06-21 02:12:55

标签: c++ cuda pci

正常的CUDA计划:

  1. 在CUDA设备中分配内存空间
  2. 从主机到设备的内存复制
  3. 调用内核
  4. 要托管的内存复制设备
  5. ...等
  6. 所以,如果我测量主机到设备时间

        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总线?

1 个答案:

答案 0 :(得分:1)

Robert Crovella所示,第一次调用CUDA函数时测量的时间与CUDA初始化有关。

此外,如果您测量的是如此短的时间段,则很可能只是测量函数调用的开销。您应该尝试增加要复制的内存大小,以获得更重要的数字。

如果您对测量CPU和GPU之间的复制时间感兴趣,请务必尝试使用固定内存,如documentation中所述。