cuda歸約求和初級版

2021-10-01 17:27:17 字數 1609 閱讀 3722

當前**的缺點:

1、只能在同乙個block做運算

2、只能做所求個陣列數為偶數的計算

#include

"device_functions.h"

#include

"cuda_runtime.h"

#include

"device_launch_parameters.h"

#include

"stdlib.h"

#include

using

namespace std;

//返回thread和block

intgetthreadnum()

//形參:列舉型別

//判斷是否成功分配記憶體

void

getcudacalerror

(cudaerror err)

return;}

//這個函式有侷限性:不能放到多個block上執行

__global__ void

sumreduced

(float

*agpu,

float

*sumgpu,

int countnum)

__syncthreads()

;}if(id ==0)

}int

main()

//定義device上的記憶體

float

*agpu =0;

float

*sumgpu =0;

//為其開闢記憶體

getcudacalerror

(cudamalloc

(&agpu,16*

sizeof

(float))

);getcudacalerror

(cudamalloc

(&sumgpu,1*

sizeof

(float))

);//給agpu 賦值

cudamemcpy

(agpu, a,16*

sizeof

(float

), cudamemcpyhosttodevice)

;//開乙個block,每個block裡面有16個thread

sumreduced <<

<1,

16>>

>

(agpu, sumgpu,16)

;//將結果傳回host

cudamemcpy

(&asum, sumgpu,1*

sizeof

(float

), cudamemcpydevicetohost)

;cudafree

(agpu)

;cudafree

(sumgpu)

; cout <<

"cuda陣列和為:"

<< asum << endl;

float testsum =0;

for(

int i =

0; i <16;

++i)

cout <<

"for陣列和為:"

<< testsum << endl;

}

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

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

CUDA( ) 向量求和運算

問題描述 將兩組資料對應的元素兩兩相加,並將結果儲存在第三個陣列中。即向量求和運算 目錄 1.基於cpu的向量求和 分析 問題 索引取值範為0 到 n 1 下面兩種函式add 有什麼區別嗎?完整的 實現及執行結果 2.基於gpu的向量求和 分析 問題 裡面引數式什麼含義?問題 既然gpu將執行ker...

CUDA開發 CUDA Thrust 規約求和

thrust 是乙個開源的 c 庫,用於開發高效能並行應用程式,以 c 標準模板庫為藍本實現。官方文件見這裡 cuda thrust float fmatrix device 指向裝置視訊記憶體 int imatrixsize irow icol 矩陣元素個數 cudamalloc void fma...