cuda做卷積計算初稿

2021-10-01 16:29:18 字數 2300 閱讀 9080

#include

"cuda_runtime.h"

#include

"device_launch_parameters.h"

#include

using

namespace std;

//返回thread和block

intgetthreadnum()

__global__ void

conv

(float

*imggpu,

float

*kernelgpu,

float

*resultgpu,

int width,

int height,

int kernelsize)

int row = id / width;

//獲取img 的行和列

int clo = id / height;

//每乙個執行緒處理一次卷積計算

for(

int i =

0; i < kernelsize;

++i)

else

resultgpu[id]

+= kernelgpu[i*kernelsize + j]

* im**alue;}}

}int

main()

}//宣告卷積核大小,大小為3*3

const

int kernelsize =3;

float

*kernel =

newfloat

[kernelsize*kernelsize]

;//卷積核賦值

//第一種方法

//for (int i = 0; i < kernelsize; ++i)

////}

//第二種

for(

int i =

0; i < kernelsize*kernelsize;

++i)

//輸出img的左上角

for(

int row=

0; row <10;

++row)

std::cout <<

'\n';}

for(

int i =

0; i < kernelsize*kernelsize;

++i)

float

*imggpu =0;

//將host值複製到device上面

float

*kernelgpu =0;

//將kernel也複製到device上

float

*resultgpu =0;

//卷積結果

cudamalloc

(&imggpu, height*width *

sizeof

(float))

;cudamalloc

(&kernel, kernelsize*kernelsize *

sizeof

(float))

;//這個地方捕捉錯誤,明天改

cudamemcpy

(imggpu, img, width*height*

sizeof

(float

), cudamemcpyhosttodevice)

;cudamemcpy

(kernelgpu, kernel, kernelsize*kernelsize*

sizeof

(float

), cudamemcpyhosttodevice)

;const

int threadnum =

getthreadnum()

;const

int blocknum =

(width*height + threadnum -1)

/ threadnum;

//這裡block使用一維

conv <<

>

>

(imggpu, kernelgpu, resultgpu, width, height, kernelsize)

;float

*showimg =

newfloat

[height*width]

;cudamemcpy

(showimg, resultgpu, width*height *

sizeof

(float

), cudamemcpydevicetohost)

;return0;

}

cuda做卷積運算最終版本

include device functions.h include cuda runtime.h include device launch parameters.h include stdlib.h include include using namespace std 返回thread和blo...

cuda 計算1維的卷積

1維卷積的公式如下.用c 序列計算,程式如下 void conv vector uin,vector vin,vector convout 1 32 endlastarr32 zeros 1,32 if iy 1 lastarr32 blocksstep1 33 64 endblocksstep2 ...

CUDA卷積加速 一

推出這個系列的目的呢,主要是因為cuda學習的乙個主要用途就是對影象處理進行加速,而處理影象的過程中經常要用到卷積。卷積的計算有多種形式,本系列主要研究的是二維矩陣的卷積計算。從最原始的計算方法 就是本科教科書上的那種 再到優化後的適用於大型資料的演算法,均提供並行化的設計思路。考慮到機器學習很火,...