cuda程式設計

2021-09-25 02:25:19 字數 1067 閱讀 3672

參照 

一、gpu與cpu的聯絡與區別

gpu上可以進行資料結構統一的運算,gpu上整合大量相對cpu邏輯計算單元簡單的計算部件,利於序列。

cpu上可以邏輯計算、流程控制等複雜的過程,利於並行。

總而言之,gpu是乙個「人多力量大」的部件,而cpu是乙個「單兵作戰力強」的部件。

基於cpu+gpu的異構計算平台優勢互補,cpu負責處理邏輯複雜的序列程式,而gpu重點處理密集型的平行計算程式,從而發揮最大功效(異構計算指的是在cpu上控制,gpu上計算)。

cuda程式設計可支援的語言:c/c++ python  fortran

二、cuda程式設計

1、在cuda中cpu成為host,gpu稱為device,同時gpu和cpu直接可以相互通訊

2、典型的cuda程式的執行流程如下:

(1)分配host記憶體,並進行資料初始化

(2)分配device記憶體,同時將host的資料拷貝到device上

(3)在device上呼叫核函式完成指定運算

(4)將device運算結果拷貝到host上

(5)釋放host和device所申請的記憶體空間

3、核函式:核函式是可以在device上平行計算的函式,在呼叫的時候需要指明網格(grid)數和block數,同時函式內必須指明執行緒的id。核函式的關鍵字如下:

4、cuda中的層級結構

乙個核函式所啟動的所有執行緒稱為乙個網格(grid),乙個網格包含多個block,乙個block中包含著多個執行緒。

kernel中所有的執行緒在邏輯上是並行,但是在物理上能否並行取決於內部資源。當kernel被執行的時候,kernel中所有的執行緒數就會被分配到流式多處理器sm上(乙個執行緒塊只能在乙個sm上執行,乙個sm上可以處理多個執行緒塊)。

5、可以借助於cuda的統一記憶體來避免複雜且繁瑣的資料拷貝過程,但需要注意的一點是在使用了統一記憶體託管記憶體之後,需要呼叫 cudadevicesynchronize()函式使得host與device同步,保證正確訪問kernel的計算結果。

CUDA程式設計

cuda目前支援linux和windows作業系統。進行cuda開發需要依次安裝驅動 toolkit sdk三個軟體。在 安裝目錄 c src目錄下有很多的例程可以進行學習。cuda 的核心有三個重要抽象概念 執行緒組層次結構 共享儲存器 遮蔽同步 barrier synchronization 可...

cuda程式設計初探

指標有了一點心得,定義跟使用是有區別的,其實指標就是乙個位址變數,定義指標的時候會加乙個 使用的時候,p是指指標p指向的那個值,p就為位址。當然可以定義多重指標,原理都是一樣。指標從根本上來說就是一種索引的概念,從這個意義上說,將陣列理解成乙個指標就好理解了,a i 中i表示索引,a i 表示指向的...

CUDA程式設計 zero copy

zero copy 零複製 是一種特殊形式的記憶體對映,它允許你將host記憶體直接對映到裝置記憶體空間上。其實就是裝置可以通過直接記憶體訪問 direct memory access,dma 方式來訪問主機的鎖頁記憶體。現代作業系統都支援虛擬記憶體,作業系統實現虛擬記憶體的主要方法就是通過分頁機制...