cuda程式設計入門 HelloWorld

2021-09-29 12:57:04 字數 2136 閱讀 9449

為了提高並行運算速度,開始接觸cuda程式設計,cuda 在安裝的時候提供了很多示例,一般位於home目錄下,可以作為學習的參考,同時官網提供的入門教程,就是很好的學習資料。

cuda程式設計首先要轉換與cpu 下程式設計的思想,在cpu 下,我們一般都是按照順序進行執行,或者開幾個執行緒處理幾個任務,而在gpu 下,是分block 和 thread的,gpu由多個block(x,y ,z )組成,每個block 下由多了thread組成,都是根據id進行區分操作,這樣可以把乙個任務拆分成很多個執行緒去執行。

作為學習,我新建了cuda 檔案專案,cmake 進行檔案管理,目錄結構如下:

入門的專案為helloworld,主程式在main.cu中

本例子對兩個整數求和。

最外層的cmakelists.txt 管理用到的包和標頭檔案

project(

"cuda"

)cmake_minimum_required(version 2.8)

# 查詢cuda 檔案

find_package(cuda required)

include_directories($)

#add_subdirectory(addvector)

add_subdirectory(helloworld)

helloworld 檔案中的cmakelists.txt

project(helloworld)

cuda_add_executable(helloworld main.cu)

main.cu 中的**:

#include

// cuda runtime

#include

// __global__ 宣告 gpu 執行緒呼叫

__global__ void

sum(

int*a,

int*b,

int*c )

intmain

(int argc,

char

**ar**)

,b[1]=

,c[1]=

;// 宣告 device 變數

int*gpu_a,

*gpu_b,

*gpu_c;

// 開闢空間

cudamalloc((

void**

)&gpu_a,

sizeof

(int))

;cudamalloc((

void**

)&gpu_b,

sizeof

(int))

;cudamalloc((

void**

)&gpu_c,

sizeof

(int))

;// 講host 資料上載到gpu上

cudamemcpy

(gpu_a, a,

sizeof

(int

), cudamemcpyhosttodevice)

;cudamemcpy

(gpu_b, b,

sizeof

(int

), cudamemcpyhosttodevice)

;// 執行

sum<<

<1,

1>>

>

(gpu_a, gpu_b, gpu_c)

;cudamemcpy

(c, gpu_c,

sizeof

(int

), cudamemcpydevicetohost)

;// 釋放空間

cudafree

(gpu_a)

;cudafree

(gpu_b)

;cudafree

(gpu_c)

;// 列印

printf

(" %d + %d = %d \n"

, a[0]

, b[0]

, c[0]

);return0;

}

最後 cmake make 執行結果:

socket網路程式設計入門寫hello world

1 伺服器端 include include include include include include include using namespace std void error handling const char message int main int argc,char ar in...

cuda程式設計 CUDA程式設計入門(四)並行歸約演算法

這一篇我們一起學習一下如何使用cuda實現並行歸約演算法。首先我們要知道什麼是並行歸約。並行歸約 reduction 是一種很基礎的並行演算法,簡單來說,我們有n個輸入資料,使用乙個符合結合律的二元操作符作用其上,最終生成1個結果。這個二元操作符可以是求和 取最大 取最小 平方 邏輯與或等等。我們以...

CUDA程式設計入門筆記1

要開始給專案中的程式做速度上的優化 由於cpu的計算速度比較慢 所以想用gpu來進行大量相同的計算 cuda c是對c c 語言進行拓展後形成的變種,相容c c 語法,檔案型別為 cu 檔案,編譯器為 nvcc 相比傳統的c c 主要新增了以下幾個方面 用來確定某個函式是在cpu還是gpu上執行,以...