CUDA 編程的基本模式- IT閱讀 - ITREAD01.COM - 程式入門教學
文章推薦指數: 80 %
( 註: <<<>>>下方編譯器可能顯示語法錯誤,不用管). 5. 從顯存中獲取結果變量。
( cudaMemcpy,cublasGetVector 等函數實現). 6. 釋放申請的顯存空間。
CUDA編程的基本模式
首頁
最新
HTML
CSS
JavaScript
jQuery
Python3
Python2
Java
C
C++
Go
SQL
首頁
最新
Search
CUDA編程的基本模式
2018-06-10254
理解錯誤lobhtmlhttpPE編寫編號cudareproducedfrom:http://www.cnblogs.com/muchen/p/6306747.html
前言
本文將介紹CUDA編程的基本模式,所有CUDA程序都基於此模式編寫,即使是調用庫,庫的底層也是這個模式實現的。
模式描述
1.定義需要在device端執行的核函數。
(函數聲明前加_golbal_關鍵字)
2.在顯存中為待運算的數據以及需要存放結果的變量開辟顯存空間。
(cudaMalloc函數實現)
3.將待運算的數據傳輸進顯存。
(cudaMemcpy,cublasSetVector等函數實現)
4.調用device端函數,同時要將需要為device端函數創建的塊數線程數等參數傳遞進<<<>>>。
(註:<<<>>>下方編譯器可能顯示語法錯誤,不用管)
5.從顯存中獲取結果變量。
(cudaMemcpy,cublasGetVector等函數實現)
6.釋放申請的顯存空間。
(cudaFree實現)
PS:每個device端函數在被調用時都能獲取到調用它的具體塊號,線程號,從而實現並行(獲取方法請參考下面的編程規範說明以及代碼示例)。
編程規範說明
在CUDA標準編程模式中,增加了一些編程規範,在這裏簡要說明:
函數聲明關鍵字:
1.__device__
表明此函數只能在GPU中被調用,在GPU中執行。
這類函數只能被__global__類型函數或__device__類型函數調用。
2.__global__
表明此函數在CPU上調用,在GPU中執行。
這也是以後會常提到的"內核函數",有時為了便於理解也稱"device"端函數。
3.__host__
表明此函數在CPU上調用和執行,這也是默認情況。
內核函數配置運算符<<<>>>-這個運算符在調用內核函數的時候使用,一般情況下傳遞進三個參數:
1.塊數
2.線程數
3.共享內存大小(此參數默認為0)
內核函數中的幾個系統變量-這幾個變量可以在內核函數中使用,從而控制塊與線程的工作:
1.gridDim:塊數
2.blockDim:塊中線程數
3.blockIdx:塊編號(0-gridDim-1)
4.threadIdx:線程編號(0-blockDim-1)
知道這些已經足夠編寫CUDA程序了,更多的編程說明將在以後的文章中介紹。
代碼示例
該程序采用CUDA並行化思想來對數組進行求和:
1//相關CUDA庫
2#include"cuda_runtime.h"
3#include"cuda.h"
4#include"device_launch_parameters.h"
5
6#include
延伸文章資訊
- 1[07W310]《科管局補助80%》CUDA程式設計與深度學習
平行計算概論與CUDA基本語法。 2.GPU的硬體架構與CUDA程式優化。 3.TensorFlow與深度學習應用。 課程師資:. 自強基金會專業講師學歷:美國馬里蘭大學博士專長:數值 ...
- 2【平行運算】CUDA教學(一) 概念介紹 - 都會阿嬤
都會阿嬤- 現在大部份做深度學習的工程師視CUDA、GPU加速為黑盒子, ... 在CUDA 中,最基本的運算單元是thread,很多thread 組成一個block,很多block 組成一個g...
- 3NVIDIA CUDA 编程指南
nvcc 的基本工作流程在于从主机代码中分离出设备代码,并且编译设备代码成为一个二进制 ... 包含一个执行配置语法的转换,和进入必要的CUDA Runtime 的起始码(第4.2.3 ...
- 4CUDA 編程的基本模式- IT閱讀 - ITREAD01.COM - 程式入門教學
( 註: <<<>>>下方編譯器可能顯示語法錯誤,不用管). 5. 從顯存中獲取結果變量。( cudaMemcpy,cublasGetVector 等函數實現). 6. 釋放申請的顯存空間。
- 5CUDA基本语法 - 简书
示例:向量加的CUDA实现这里通过向量加计算这个例子介绍CUDA的基本知识,主要包括内存操作、核函数(kernel function)以及线程配置等。