2013-10-15 75 views
2

我想解釋一些使用CudaEvents的時機,通過CudaEvents執行時機內核還包括內核啓動的開銷時間?內核啓動的CudaEvent時機

不幸的是,我不再能夠訪問兼容Cuda的GPU來進行任何測試。

非常感謝

回答

2

這當然捕捉一些樣的開銷,根據我的實驗。

我認爲應該明確的是,如果內核是由其他同步活動括號,那麼CPU開銷必須包括在內,作爲CPU開銷分離內核啓動之前的活動:

cudaEventRecord(start); 
cudaMemcpy(...);   // cudaMemcpy 1 
my_kernel<<<...>>>(...); 
cudaMemcpy(...); 
cudaEventRecord(stop); 

當然,它似乎很明顯,我認爲上述所描繪的時序必須捕捉cudaMemcpy 1和內核調用的CPU開銷(與不是由於內核本身其它各種一次性捐款一起)。

所以不太明顯的情況是,當內核是單獨或通過其他異步調用括號:根據我上面的圖案的測試

cudaEventRecord(start); 
my_kernel<<<...>>>(...); 
cudaEventRecord(stop); 
cudaEventSynchronize(stop); 

,並用一個空的內核:

__global__ void my_kernel(){ 
    } 

我的觀察時機至少幾微秒的Linux操作系統,這是相當多的比我的空內核執行兩條指令所需要的時間更長:

  Function : _Z8mykernelv 
    /*0000*/  /*0x00005de428004404*/  MOV R1, c [0x1] [0x100]; 
    /*0008*/  /*0x00001de780000000*/  EXIT; 

因此,我主張某種Ø f執行設置開銷被cudaEvent系統捕獲。如果有人想聲稱這個開銷是而不是 CPU開銷,但是別的東西,就這樣吧。

我的說法是,某種形式的開銷被捕獲,我沒有理由不把它稱爲CPU開銷。此外,典型的cudaEvent定時包括緊接stop標記後面的cudaEventSynchronize(),看起來很清楚主機線程將至少在startstop標記之間被cudaEvent系統捕獲的持續時間被阻塞,因此我認爲沒有理由情況下不要將其稱爲CPU開銷。

+0

「開銷捕獲」不取決於您是否使用默認流? – einpoklum