CUDA基礎理解

2021-08-14 13:21:10 字數 1414 閱讀 4127

1、什麼是cuda

簡單的理解與我們普通在cpu上程式設計的區別就是將能夠並行加速的部分放到gpu上進行加速,再將加速後的資料傳給cpu進行後續處理。 傳統cpu只能序列執行,gpu可並行執行。gpu加速部分原理如下圖所示

2、cuda架構

執行緒塊及執行緒的組織結構如下圖:

3、cuda程式設計基本步驟

1)分配記憶體(cpu)空間和視訊記憶體(gpu)空間,並初始化記憶體空間

2)將要計算的資料從記憶體複製到視訊記憶體上

3)執行gpu上並行處理部分的kernel函式(在gpu上,每個執行緒都會執行一次核函式)

4)將計算後視訊記憶體上的資料複製到記憶體上,對複製到記憶體上的資料進行後續處理。

4、核函式舉例

__global__ void dot(float *a, float *b, float *c)

//設定cache中相應位置上的值

cache[cacheindex] = temp;

//對執行緒塊中的執行緒進行同步

__syncthreads();

}

dot函式表示的是a(x1, x2,.....xn)*b(y1, y2,.........yn)=x1*y1+x2*y2+.....+xn*yn。

若此時執行緒為第乙個執行緒中第乙個執行緒塊的第乙個元素。則tid += blockidx.x*blockdim.x表示第二個執行緒格中第乙個執行緒塊的第乙個元素。以此類推,每個執行緒格都相當於同樣的**。執行完上段程式後,所有的值將放在第乙個執行緒格中,再對這個執行緒格中的所有值進行求和。這是《gpu高效能程式設計cuda實戰裡》裡第五章的**,完整**就不給出了。

5

、基本函式

cudamalloc((void**)&dev_a,sizeof(int)); 在裝置上分配記憶體,後面引數為分配記憶體大小

cudafree(dev_a); 釋放裝置上的記憶體。

__syncthreads();對執行緒塊中的所有執行緒進行同步,職業執行緒塊中所有執行緒執行了它,才會執行下一條語句,否則將一直等待。

__shared__,變數儲存在共享記憶體快取區。為每個執行緒塊生成共享變數的乙個副本,根據每個執行緒塊中線程的數量分配記憶體。

__global__,被修飾的函式在gpu上執行,在cpu上被呼叫。

__device__,被修飾的函式在gpu上執行,可在__global__和__device__函式中被呼叫

如何理解CUDA中的cudaMalloc 的引數

對指標和位址比較熟悉的童鞋可以比較容易的理解這個概念,為了更好的讓更多的人理解cudamalloc的引數,寫這篇文章,以饗讀者。首先看下此執行時函式的原型 cudaerror t cudamalloc void devptr,size t size 此函式返回值是cuda中定義的乙個錯誤 主要的第乙...

CUDA 從GPU結構理解執行緒

在使用gpu執行緒時不是執行緒越多就越好,其實從硬體角度分析,支援cuda的nvidia 顯示卡,都是由多個multiprocessors 組成。每個 multiprocessor 裡包含了8個stream processors,其組成是四個四個一組,也就是兩組4d的處理器。每個 multiproc...

(Cuda)基礎知識(一)

本部分內容為 1 cuda c programming guide.pdf中筆記 限定符執行 呼叫 device device device global device host 計算能力3.x可device host host host 限定符變數位置 device訪問 host訪問 生命週期 d...