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

В якості основи для такого типу пам'яті виступає спеціальний контейнер cudaArray, який є чорним ящиком для додатків. Використання cudaArray обгрунтовано тоді, коли ми хочемо створити двох або тривимірну структуру, або нас важливі перетворення, які графічний процесор може здійснювати апаратно з вихідними даними:

§ Нормалізація координат (переклад [W, H] => [0,1]).

- Clamp - координата обрізається по межі;

- Wrap - координата загортається.

§ Фільтрація (при зверненні по float координаті):

- Point - повертається найближчим задане значення;

- Linear - проводиться билинейная інтерполяція.

Для використання cudaArray текстурной пам'яті потрібно оголосити змінну-покажчик на cudaArray:

cudaMallocArray (struct cudaArray ** arrayPtr, const struct cudaChannelFormatDesc * channelDesc, size_t width, size_t height);

- arrayPtr - покажчик на cudaArray;

- channelDesc - опис каналу;

- width - ширина масиву;

- height - висота масиву.

Потім скопіювати в виділену пам'ять дані:

cudaMemcpyToArray (struct cudaArray * dst, size_t wOffset, size_t hOffset, const void * src, size_t count, enum cudaMemcpyKind kind);

- arrayPtr - покажчик на cudaArray;

- wOffset - зміщення по горизонталі при прив'язці до масиву;

- hOffset - зміщення по вертикалі при прив'язці до масиву;

- src - масив в пам'яті хоста, до який копіюється;

- count - розмір даних в байтах;

- kind - напрямок копіювання.

Після того як дані скопійовані, можна здійснювати прив'язку cudaArray масиву до текстури:

cudaBindTextureToArray (const struct textureReference * tex, const struct cudaArray * array, const struct cudaChannelFormatDesc * desc);

- tex - оголошена текстура;

- array - масив в cudaArray, до якого прив'язується текстура;

- channelDesc - опис каналу.

На пристрої використовуються функції, які дістають значення з текстури:

tex1D (texRef tex, float x);

- tex - оголошена текстура;

- x - індекс, що виймається значення в лінійному масиві.

tex2D (texRef tex, float x, float y);

- tex - оголошена текстура;

- x, y - індекси, що виймається значення в двомірному масиві.

tex3D (texRef tex, float x, float y, float z);

- tex - оголошена текстура;

- x, y, z - індекси, що виймається значення в тривимірному масиві.

Після використання необхідно відв'язати текстуру точно так само як і лінійну.

Схожі статті