CUDA 紋理的使用

2021-09-08 13:54:44 字數 1294 閱讀 3891

紋理繫結有兩種,乙個是繫結到線性記憶體就是用cudamalloc();cudamemcpy();開闢的記憶體空間,另一種是繫結到cudamallocarray, cudamemcpytoarray開闢到的二維陣列或者三維陣列。

先說比較簡單的就是繫結到cudamalloc開闢到的記憶體空間。

首先是紋理宣告:關於紋理的宣告和繫結都要在cu檔案進行,在其他檔案進行會比較麻煩。

首先是開闢視訊記憶體和賦值給視訊記憶體。

首先是紋理宣告:

1、texturetexref;

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函式使用紋理:

vterm = tex1dfetch(texref, 3*index);

5、解除紋理:

cudaunbindtexture(texref);

cudafree(table)

以上是一維紋理的使用,接著介紹二維紋理陣列的使用:

紋理宣告為二維紋理:

注:在1.x和3.x的卡使用紋理回比全域性變數的要好,但2.x剛好相反,因為2.x有更大的l1快取,所以2.x的卡建議不使用紋理,除非測出的速度要比使用全域性變數的要快。 

1、texturetexref;

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 二維紋理的建立和使用測試

cuda 複雜問題 細節問題 解答 見 cuda複雜問題 細節問題 解答 首先先把程式貼上 include cuda runtime.h include device launch parameters.h include include include define width 10 define...

CUDA優化例項(四)紋理記憶體

本文參考 本節的內容可能和標題不服,本節主要將紋理記憶體的使用,它到底有什麼有什麼速度的提公升,優化體現在 我下節會寫,本節主要寫乙個紋理記憶體的例子。紋理記憶體的使用有兩種方式,分別是texture object和texture reference,前者可在程式中動態生成,後者的部分在編譯期間靜態...

openGL 紋理使用

最近找了點資料學習了下opengl 紋理的使用 先有個 整體把握,然後再去看大部頭中的細節講解,感覺這樣的學習方式好些 總結下紋理使用總體流程 1 啟用紋理 glenable gl texture 2d 2 載入紋理 3 紋理 的顯示 載入紋理 1 讀取紋理影象高寬和畫素資料到記憶體中,老版本 op...