事件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 完整程...