CUDA計時差別

2021-07-13 20:49:50 字數 924 閱讀 1909

統計時間問題:想記錄gpu核函式的計算耗時,不同方法得到的結果差別較大,暫不知何種原因

核函式:

__global__ void addkernel(int *c, const int *a, const int *b)  //gpu核函式

if(!(tid}

tid += griddim.x;}}

(1)time.h中的clock函式計時:多次試驗結果為0毫秒

start_gpu=clock();

addkernel<<<1,256>>>( dev_c, dev_a, dev_b );

finish_gpu=clock();

totaltime=(double)(finish_gpu-start_gpu);///clocks_per_sec;

(2)事件event計時:多次試驗結果大約461毫秒

cudaeventcreate(&start1);

cudaeventcreate(&stop1);

cudaeventrecord(start1, null);

addkernel<<<1,256>>>( dev_c, dev_a, dev_b );

cudaeventrecord(stop1, null);

cudaeventsynchronize(stop1);

cudaeventelapsedtime(&msectotal, start1, stop1);

改正,

cpu端的api函式和核心啟動的結束,和gpu真正完成這些操作是非同步的,利用cpu函式計時時需要進行同步:

------

kernel<<>>(---)

cudatheadsynchronize();//阻塞cpu執行緒

cpufunction();//gpu真正完成操作,cpu執行緒繼續執行

------

CUDA程式計時

之前寫的cuda程式,想測量一下效能,網上很多用的是cpu端計時,很不準確。翻了一下書,發現這裡應該使用事件來計時。cuda中的事件本質上是乙個gpu時間戳,這個時間戳是在使用者指定的時間點上記錄的。由於gpu本身支援記錄時間戳,因此就避免了當使用cpu定時器來統計gpu執行的時間時可能遇到的諸多問...

CUDA程式設計 CPU計時與GPU計時

使用cuda進行程式設計,主要目的就是時間上加速。為此,如何計時必不可少。在cuda中,我們可以使用cpu計時函式和gpu計時函式。對於cpu計時,我們在之前的文章 精確系統計時 秒 毫秒 微秒 中已經介紹在一般的c c 程式設計中的計時方法。下面我們介紹在cuda中如何計時 cpu計時 cuda中...

CUDA中的計時函式

一 clock函式計時 在c和c 中有clock計時函式,由於cuda是包含c的,所以在cuda中我們也同樣可以使用這個函式。clock函式的定義 clock函式測的是在程式中從程式開始到呼叫clock函式之間在cpu上所經過的時鐘數 clocks clock函式的介紹 在c與c 的標頭檔案time...