使用cuda進行程式設計,主要目的就是時間上加速。為此,如何計時必不可少。在cuda中,我們可以使用cpu計時函式和gpu計時函式。對於cpu計時,我們在之前的文章(精確系統計時:秒、毫秒、微秒)中已經介紹在一般的c/c++程式設計中的計時方法。下面我們介紹在cuda中如何計時:
cpu計時
cuda中的核函式是非同步執行的,即呼叫核函式後(而非等待其執行結束)就繼續執行後面的語句。因此,使用cpu計時的時候,我們需要加上同步函式,這樣才能得到核函式的執行時間,否則就是呼叫時間。下面給出乙個簡單的例項,由於**簡單,這裡不再過多說明:
#include"cuda_runtime.h"
#include"device_launch_parameters.h"
#include#include#includeusing namespace std;
__global__ void kernel_function()
//timing using cpu
int main()
需要注意的是:在計時前最好先warming up一下,即先把要計時的函式執行一遍。
gpu計時
這裡我們可以使用cuda提供的事件管理api來實現計時,具體可以參考nvidia官方的文件。具體例項如下:
#include"cuda_runtime.h"
#include"device_launch_parameters.h"
#include#include#includeusing namespace std;
__global__ void kernel_function()
timing using gpu
int main()
cpu和gpu計時的結果分別如下:
另外,上述cpu和gpu計時上的主要區別在於是否需要同步:cpu計時需要在核函式後呼叫同步函式。為此,當需要同步時,我們可以使用cpu計時;當不能同步時,我們使用gpu計時。當然,gpu計時也能用於需要同步的場景,此時的同步函式cudadevicesynchronize()
需要放置在計時模組的後面。
GPU計算與CUDA程式設計
1.來自nvidia的 cuda 並行程式設計框架是 gpgpu 正規化的一種特定的實現。它提供了gpu程式設計的簡易介面,基於cuda程式設計可以構建基於gpu計算的應用程式。2.cuda 在技術上是一種異構計算環境,也就是說它利用了同時在 cpu 和 gpu 上的協調計算。cuda 架構由主機 ...
GPU與CPU簡單區別
gpu的運算速度取決於僱了多少小學生,cpu的運算速度取決於請了多麼厲害的教授。教授處理複雜任務的能力是碾壓小學生的,但是對於沒那麼複雜的任務,還是頂不住人多。當然現在的gpu也能做一些稍微複雜的工作了,相當於公升級成初中生高中生的水平。但還需要cpu來把資料喂到嘴邊才能開始幹活,究竟還是靠cpu來...
GPU 高效能程式設計 CUDA 執行緒協作
並行執行緒塊的分解 在向量加法中,為向量中的每乙個元素都啟動乙個執行緒塊 add dev a,dev b,dev c 尖括號中的第乙個引數建立的執行緒塊的數量,第二個引數表示每個執行緒塊中建立的執行緒數量,所以上述啟動的執行緒數量為 n n 1 使用執行緒實現 gpu 上的向量求和 需要修改兩個地方...