CUDA學習(十八)

2021-09-21 16:56:10 字數 2315 閱讀 9658

紋理物件api:

紋理物件是使用cudacreatetextureobject()從指定紋理的struct cudaresourcedesc型別的資源描述中建立的,也可以是從如此定義的紋理描述中建立的:

struct cudatexturedesc

;

// ****** transformation kernel

__global__ void transformkernel(float* output,

cudatextureobject_t texobj,

int width, int height,

float theta)

// host code

int main()

texturetexref;
當:

紋理引用只能被宣告為靜態全域性變數,不能作為引數傳遞給函式。

紋理引用的其他屬性是可變的,可以在執行時通過主機執行時更改。 如參考手冊中所述,執行時api具有低級別c風格介面和高階c ++風格介面。 紋理型別在高階api中定義為從低階api中定義的texturereference型別公開派生的結構,如下所示:

struct texturereference
struct cudachannelformatdesc ;
其中x,y,z和w等於返回值的每個分量的位數,f是:

texturetexref;

texturereference* texrefptr;

cudagettexturereference(&texrefptr, &texref);

cudachannelformatdesc channeldesc =

cudacreatechanneldesc();

size_t offset;

cudabindtexture2d(&offset, texrefptr, devptr, &channeldesc,

width, height, pitch);

使用高階api:

texturetexref;

cudachannelformatdesc channeldesc =

cudacreatechanneldesc();

size_t offset;

cudabindtexture2d(&offset, texref, devptr, channeldesc,

width, height, pitch);

以下**示例將2d紋理引用繫結到cuda陣列cuarray:

使用低階api:

texturetexref;

texturereference* texrefptr;

cudagettexturereference(&texrefptr, &texref);

cudachannelformatdesc channeldesc;

cudagetchanneldesc(&channeldesc, cuarray);

cudabindtexturetoarray(texref, cuarray, &channeldesc);

使用高階api:

texturetexref;

cudabindtexturetoarray(texref, cuarray);

將紋理繫結到紋理參考時指定的格式必須與宣告紋理參考時指定的引數相匹配; 否則,紋理提取的結果是不確定的。

如表所示,可以繫結到核心的紋理數量是有限制的

以下**示例將一些簡單的轉換核心應用於紋理。

CUDA學習(九十八)

流關聯示例 將資料與流關聯可以對cpu gpu併發性進行細粒度的控制,但是在使用低於6.x的計算能力的裝置時,必須記住哪些資料是可見的。檢視較早的同步示例 device managed int x,y 2 global void kernel int main 在這裡,我們明確地將y與主機可訪問性相...

CUDA學習(二十八)

多處理器級別 在更低層次上,應用程式應該最大化多處理器內各個功能單元之間的並行執行 如 硬體多執行緒 中所述,gpu多處理器依賴於執行緒級並行性來最大限度地利用其功能單元。因此利用率與駐留經線的數量直接相關。在每個指令發布時間,乙個warp排程器選擇乙個準備好執行下乙個指令的warp 如果有的話 然...

CUDA學習資源

之前沒有接觸過cuda,由於深度學習跟cuda的關係,本篇收集一些相關資料,有個認識,後面一點點學習吧 cuda,全名 compute unified device architecture,是nvidia公司基於圖形處理器gpus graphics processing units 開發的平行計算...