我想解釋一些使用CudaEvents的時機,通過CudaEvents執行時機內核還包括內核啓動的開銷時間?內核啓動的CudaEvent時機
不幸的是,我不再能夠訪問兼容Cuda的GPU來進行任何測試。
非常感謝
我想解釋一些使用CudaEvents的時機,通過CudaEvents執行時機內核還包括內核啓動的開銷時間?內核啓動的CudaEvent時機
不幸的是,我不再能夠訪問兼容Cuda的GPU來進行任何測試。
非常感謝
這當然捕捉一些樣的開銷,根據我的實驗。
我認爲應該明確的是,如果內核是由其他同步活動括號,那麼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()
,看起來很清楚主機線程將至少在start
和stop
標記之間被cudaEvent
系統捕獲的持續時間被阻塞,因此我認爲沒有理由情況下不要將其稱爲CPU開銷。
「開銷捕獲」不取決於您是否使用默認流? – einpoklum