CUDA 纹理的使用
CUDA 紋理的使用
2013-01-25 10:09 閱讀(2782)評論(0)紋理綁定有兩種,一個是綁定到線性內(nèi)存就是用cudaMalloc();cudaMemcpy();開辟的內(nèi)存空間,另一種是綁定到cudaMallocArray,?cudaMemcpyToArray開辟到的二維數(shù)組或者三維數(shù)組。
先說比較簡單的就是綁定到cudamalloc開辟到的內(nèi)存空間。
首先是紋理聲明:關于紋理的聲明和綁定都要在cu文件進行,在其他文件進行會比較麻煩。
首先是開辟顯存和賦值給顯存。
首先是紋理聲明:
1、texture<float, 1, cudaReadModeElementType> texRef;
2、為顯存開辟空間,并初始化
cudaMalloc((void **)&rain_table,256*4*3);?
cudaMemcpy(rain_table ,table, 256*4*3,cudaMemcpyHostToDevice);
3、紋理綁定:
cudaBindTexture(0,texRef,rain_table );
4、_在global_ kernel函數(shù)使用紋理:
vterm = tex1Dfetch(texRef, 3*index);
5、解除紋理:
?cudaUnbindTexture(texRef);
?cudaFree(table)
?以上是一維紋理的使用,接著介紹二維紋理數(shù)組的使用:
?紋理聲明為二維紋理:
注:在1.x和3.x的卡使用紋理回比全局變量的要好,但2.x剛好相反,因為2.X有更大的L1緩存,所以2.x的卡建議不使用紋理,除非測出的速度要比使用全局變量的要快。?
1、texture<float, 2, cudaReadModeElementType> texRef;
?2、開辟顯存:
?cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc(32, 0, 0, 0,cudaChannelFormatKindFloat);
?cudaArray* cuArray;
?cudaMallocArray(&cuArray, &channelDesc, 3, 256); //為cuArray開辟空間
?cudaMemcpyToArray(cuArray, 0, 0, table,256*3*4,?????cudaMemcpyHostToDevice);???
?3、紋理綁定
cudaBindTextureToArray(texRef, cuArray, channelDesc);
?4、使用
?vterm = tex2D(texRef,? 0,index);
?5、解除綁定
?cudaBindTextureToArray(texRef,cuArray,channelDesc);
總結
以上是生活随笔為你收集整理的CUDA 纹理的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python第一课教案_Python第一
- 下一篇: updatebyprimarykeyse