Steps3d - tutorials - програмування на cuda (частина 2)

Робота з текстурної пам'яттю

CUDA підтримує роботу з текстурами, надаючи при цьому повний набір функціональності, доступної з графічних API. Робота з текстурами в CUDA йде за допомогою так званих текстурних посилань (texture reference).

Параметр Type позначає тип даних, що повертаються при читанні з текстури. Як Type можна використовувати базові цілочисельні типи, float. а також всі їх 1/2/3/4-мірні вектора.

Параметр Dim задає розмірність текстури і приймає значення від 1 до 3 включно.

Як значення параметра ReadMode виступає одна з наступних констант - cudaReadModeNormalizedFloat (для випадку, коли необхідно провести нормалізацію) і cudaReadModeElementType (коли ніякої нормалізації проводити не потрібно).

Як пам'яті для текстури можна використовувати будь-яку область як лінійної пам'яті (linear memory), так і так званий CUDA-масив (CUDA array). При цьому вибір в якості пам'яті лінійної пам'яті накладає наступні обмеження на текстуру:

Для читання з текстур, розміщених в лінійної пам'яті, використовується функція tex1Dfetch.

Для читання з текстур, розміщених в CUDA-масивах використовуються наступні функції:

Якщо текстура розміщена в лінійної пам'яті, то для виділення і звільнення цієї пам'яті використовуються розглянуті в попередній статті функції cudaMalloc і cudaFree.

Виділення і звільнення CUDA-масивів проводиться за допомогою функцій cudaMallocArray і cudaFreeArray. При виділенні пам'яті як CUDA-масиву в функцію cudaMallocArray необхідно крім розміру передати посилання на структуру cudaChannelFormatDesc. використовувану для опису структури текстури.

В основі типу texture лежить наступна структура: