作者lopohsiung (年輕的心)
看板C_and_CPP
標題[問題] CUDA 程式的測時
時間Fri Jun 8 18:47:07 2012
大家好!請問大家,小弟寫了一個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
推 kazuto:用Nsight吧... 06/08 18:54
→ lopohsiung:謝謝k大的回覆!想請問NSIGHT該如何測時呢? 06/09 21:55
→ lopohsiung:能否請k大略述一下Nsight測時的方法?感謝!m(_ _)m 06/09 22:00
→ kazuto:先假設你可以用Nsight了,在Nsight裡面有個New Analysis 06/11 10:14
→ kazuto:之後設定Application跟 Trace Settings執行後看Time Line 06/11 10:15
→ lopohsiung:謝謝!來研究看看~ 06/11 23:37