CUDA程式計時

2022-03-27 16:33:57 字數 1185 閱讀 9244

之前寫的cuda程式,想測量一下效能,網上很多用的是cpu端計時,很不準確。翻了一下書,發現這裡應該使用事件來計時。

cuda中的事件本質上是乙個gpu時間戳,這個時間戳是在使用者指定的時間點上記錄的。由於gpu本身支援記錄時間戳,因此就避免了當使用cpu定時器來統計gpu執行的時間時可能遇到的諸多問題。

cudaevent_t start, stop;

cudaeventcreate(&start);

cudaeventcreate(&stop);

cudaeventrecord(start, 0);

cudaeventrecord(stop, 0);

由於核函式被呼叫後,gpu執行完之前,cpu會繼續執行程式中的下一行**,因此此時記錄的時間不準確,應該把這條語句放入gpu的未完成工作佇列中,使得直到gpu執行完了的呼叫cudaeventrecord()之前的所有語句時,事件才會被記錄下來。修復這個問題只需要在下面加一行**:

cudaeventsynchronize(stop);

記錄完畢後,計算總耗時:

float

elapsedtime;

cudaeventelapsedtime(&elapsedtime, start, stop);

這裡得到的elapsedtime就是執行gpu端**所需時間,單位ms。

總流程為:

cudaevent_t start, stop;

cudaeventcreate(&start);

cudaeventcreate(&stop);

cudaeventrecord(start, 0);

//在gpu上執行一些工作

cudaeventrecord(stop, 0);

cudaeventsynchronize(stop);

float

elapsedtime;

cudaeventelapsedtime(&elapsedtime, start, stop);

注意:

由於cuda事件時直接在gpu上實現的,因此它們不適用於對同時包含裝置**和主機**的混合**計時,也就是說,如果你試圖通過cuda事件對核函式和裝置記憶體複製之外的**進行計時,將得到不可靠的結果。

CUDA計時差別

統計時間問題 想記錄gpu核函式的計算耗時,不同方法得到的結果差別較大,暫不知何種原因 核函式 global void addkernel int c,const int a,const int b gpu核函式 if tid tid griddim.x 1 time.h中的clock函式計時 多次...

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...