3
我正在使用以下代碼來撥打電話cudaMalloc()
。我很好奇:CUDA事件是否僅僅是我們的內核時間,或者他們也是「內置內核」的時間。換句話說,以下方法對於時間cudaMalloc()
有效嗎?做CUDA事件時間cudaMalloc和cudaMemcpy執行?
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
for(int t =0 ; t < 100 ; t++){
float* test;
cudaMalloc((void**)&test, 3000000 * sizeof(float));
cudaFree(test);
}
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
float elapsedTime;
cudaEventElapsedTime(&elapsedTime , start, stop);
printf("time elapsed on the GPU: %f ms", elapsedTime/100);
但是它的時間cudaMalloc?換句話說,如果只需要執行內核執行的時間,是否應該確保在第一個cudaEventRecord和第二個cudaEventRecord之間不會調用其他任何內容,如cudaMalloc,cudaMemcpy或cudaFree? – user2023370
異步CUDA memcpy是公平的遊戲,但cudaMalloc()/ cudaFree()可能會導致圖形處理器停頓,而驅動程序則會使用頁表亂動。 CUDA事件仍然會按照答案中所描述的那樣愉快地記錄時間,但是他們的時間信息將不會有用。 – ArchaeaSoftware