[問題] CUDA 程式的測時
大家好!請問大家,小弟寫了一個CUDA程式,包含有3個Kernel,程式的執行順序如下
所示:
CPU處理
↓
Kernel1 處理
↓
CPU處理
↓
Kernel2 處理
↓
CPU處理
↓
Kernel3 處理
↓
CPU處理
因為小弟的程式是CPU和CPU交替運算,也就是CPU處理好的資料給GPU運算,而GPU運算好
的資料再傳給CPU 運算,前一個步驟沒運算完成,下一個步驟無法進行,請問這種情形該
如何測時才會準呢?根據小弟的研究,目前只想到一種方式:
*****************方法A(針對GPU測時)**********************
float time;
cudaEvent_t start, stop;
cudaEventCreate (&start);
cudaEventCreate (&stop);
cudaEventRecord(start, 0);
Kernel1 ……
cudaThreadSynchronize();
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&time, start, stop);
cout << time << " ms\n";
*********************************************************
先用以上的方法測到 Kernel1 的時間,然後再用以下的方式測CPU處理的時間:
*******************方法B(針對CPU測時)****************************
LARGE_INTEGER frequency;
LARGE_INTEGER t1, t2;
float time;
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&t1);
CPU程式處理……
QueryPerformanceCounter(&t2);
time = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart;
cout << time << " ms\n";
*********************************************************************
輪流交替使用方法A及方法B,依序為每個步驟測時,最後再「手動」相加。
想請問的是,小弟這樣做測出來的時間可靠嗎?以及還有沒有更好的辦法呢?
方法A及方法B測時的方法,就小弟的理解及查到的資料,精度是相匹配的,不知對嗎?
請知道的大大們不吝指教,萬分感謝!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.240.229.167
推
06/08 18:54, , 1F
06/08 18:54, 1F
→
06/09 21:55, , 2F
06/09 21:55, 2F
→
06/09 22:00, , 3F
06/09 22:00, 3F
→
06/11 10:14, , 4F
06/11 10:14, 4F
→
06/11 10:15, , 5F
06/11 10:15, 5F
→
06/11 23:37, , 6F
06/11 23:37, 6F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章