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 лежить наступна структура: