2016-06-21 31 views
-1

正常CUDA程序:Can cudaDeviceSynchronize是否可以縮短記憶時間?

  1. 從主機分配內存空間,CUDA設備
  2. 存儲器複製到設備
  3. 調用內核
  4. 存儲器複製設備到主機
  5. ...等

所以如果我測量主機到設備時間

time = clock(); 
    2. mem host to device; 
    cudaDeviceSynchronize; 
    time = clock() - time ; 

在我的情況下,我會得到0.1秒的值。但是我的PCI總線速度實際上是24GB/s,假設產生1000倍小的時間值,所以我假定0.1秒是用於激活PCI總線的時間。

所以我試着循環1000次的主機到設備時間,第一次顯示0.1s,剩下的時間只有0.000秒(不能超過毫秒),而總計1000循環的時間僅爲0.12s。

所以我必須保持我的設備PCI總線激活,以減少主機到設備的時間。我嘗試使用cudaDeviceSynchronize如下所示:

cudaDeviceSynchronize; //---to keep PCI bus activate 
    time = clock(); 
    2. mem host to device; 
    cudaDeviceSynchronize; 
    time = clock() - time ; 

和我得到的時間是0.000s,其花費在主機到設備的時間被最小化。那是對的嗎?是0.1s =「激活」PCI總線的時間?

+2

0.1s可能是CUDA的初始化時間。 –

回答

1

由於Robert Crovella建議您在首次調用CUDA函數時測量的時間與CUDA初始化有關。

此外,如果你測量這麼短的時間段,你很可能只是測量函數調用的開銷。您應該嘗試增加要複製的內存大小以獲取更多重要數字。

如果您有興趣測量CPU和GPU之間的拷貝時間,您應該嘗試使用固定內存進行播放,如documentation中所述。