CUDA中記錄執行時間 GPU端

2022-05-01 03:48:07 字數 1305 閱讀 1368

事件event

cudaevent_t start,stop;

cudaeventcreate(&start);

cudaeventcreate(&stop);

cudaeventrecord(start,0);

cudaeventrecord(stop,0);

float costtime;

cudaeventelapsedtime(&costtime,start,stop);

cudaerror_t cudaeventcreate( cudaevent_t* event )---建立事件物件;

cudaerror_t cudaeventrecord( cudaevent_t event,custream stream )--- 記錄事件;

cudaerror_t cudaeventelapsedtime( float* time,cudaevent_t start,cudaevent_t end )---計算兩次事件之間相差的時間;

cudaerror_t cudaeventdestroy( cudaevent_t event )---銷毀事件物件。

計算兩次事件之間相差的時間(以毫秒為單位,精度為0.5微秒)。如果尚未記錄其中任何乙個事件,此函式將返回cudaerrorinvalidvalue。如果記錄其中任何乙個事件使用了非零流,則結果不確定。

該例子是cuda_c_best_practices_guide中的例子:

cudaevent_t start, stop;

float time;

cudaeventcreate(&start);

cudaeventcreate(&stop);

cudaeventrecord( start, 0 );

kernel<<>> ( d_odata, d_idata, size_x, size_y, num_reps);

cudaeventrecord( stop, 0 );

cudaeventsynchronize( stop );

cudaeventelapsedtime( &time, start, stop );

cudaeventdestroy( start );

cudaeventdestroy( stop );

需要注意的是函式cudaeventsynchronize() 不可或缺,因為cuda的kernel函式是以非同步方式執行的,呼叫後立刻返回,這會導致計時不準確。cudaeventsynchronize(stop)會使得直到gpu執行完cudaeventrecord(stop, 0)之前的所有語句時,事件stop才會被記錄下來,即起到同步的作用。

記錄執行時間

記錄乙個在device上執行的函式的執行時間時需要用到 事件 event cudaevent t timestartevent,timeendevent 宣告兩個cudaevent t變數 cudaeventcreate tartevent,0 第二個引數忘了幹嗎用的了 cudaeventcreat...

C 記錄執行時間

包含標頭檔案 ctime clock t start time,end time start time clock for double i 0 i 1000000000 i 放置需要測試時間的 end time clock cout double end time start time clock...

C 中記錄程式執行時間

關鍵語句 include clock t starttime,endtime starttime clock 計時開始 endtime clock 計時結束 cout the run time is double endtime starttime clocks per sec s endl 完整程...