cuda及常用計時方式

2021-07-13 20:42:25 字數 2494 閱讀 8079

cuda中的計時方式:#include

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

注意:此處記錄的時間單位為毫秒。

clock的計時方式:#include

clock_t start,end;  

start = clock();

cudathreadsynchronize();//執行緒同步,gpu是非同步進行的 

end = clock();

printf("time=%f\n",((double)end-start)/clock_per_sec);

另外,此處引用了nvidia論壇中橫掃千軍版主的原話:windows 慎用clock()

(1)clock()在windows上的精確度可能無法滿足要求。(clocks_per_sec的值是1000不假,但一般得不到

1ms的精度,一般可能會得到幾個到10幾個ms的精度)

(2)clock()存在嚴重的移植性問題。

(3)使用clock()來測時是windows "專用"的做法,在*nix下無法這麼用(和精度無關,是clock()的含義不同)。

可以使用queryperformancecounter()和queryperformancefrequency()來替代。

queryperformancecounter()這個函式返回高精確度效能計數器的值,它可以以微妙為單位計時.但是queryperformancecounter()確切的精確計時的最小單位是與系統有關的,所以,必須要查詢系統以得到queryperformancecounter()返回的嘀噠聲的頻率.queryperformancefrequency()提供了這個頻率值,返回每秒嘀噠聲的個數.

#include
large_integer t1,t2,tc;

queryperformancefrequency(&tc);

queryperformancecounter(&t1);

foo();//dosomething

queryperformancecounter(&t2);

printf("use time:%f\n",(t2.quadpart - t1.quadpart)*1.0/tc.quadpart);

在kernel中的clock()和clock64()還是值得使用的。

gettickcount返回(retrieve)從作業系統啟動到現在所經過(elapsed)的毫秒數,它的返回值是dword

#include
dword t1,t2;

t1 = timegettime();

foo();//dosomething

t2 = timegettime();

printf("use time:%f\n",(t2-t1)*1.0/1000);

arrayfire中的計時方式:

timer::start();

printf("elapsed seconds: %g\n", timer::stop());

linux計時方式:
gettimeofday() linux環境下的計時函式,int gettimeofday ( struct timeval * tv , struct timezone * tz ),gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的資訊則放到tz所指的結構中.

//timeval結構定義為:

struct timeval;

//timezone 結構定義為:

struct timezone;

void test7()

參考:

常用計時器實現

專案開發中常常會用到計時器 例如,獲取驗證碼的時候,類應用的限時搶購,考試類應用的考試計時 提供以下方法 開始倒計時 starttime 重新整理計時 refreshtime long second 停止計時 stoptime 獲取現在時間 getnowtime 獲取message.what的tag...

軟考常用計算公式及理解

系統可靠度 串聯 r r1r2 rx 併聯 r 1 1 r1 1 r2 1 rx 串聯系統失效率 p p1 p2 平均無障礙時間 1 p 單利計算 利息 本金 利率 時間,即ir p i n 終值f p 1 i n 複利計算 折現率與折現係數 若n 年後能收入f 元,那麼這些錢現在的價值 現值 稱為...

Map集合常用方法及常用遍歷方式

public v put k key,v value 把鍵與值新增到map集合中public v remove object key 刪除key對應的值public v get object key 根據指定的鍵,獲取對應的值public v containkey object key 判斷是否包含...