當前**的缺點:
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...