2014-09-11 5 views
1

На центральном процессоре я часто использую «суб-изображения» двухмерных изображений (pitch-linear), которые просто указывают на определенный ROI «основного» изображения. Таким образом, все модификации суб-изображения фактически меняют и «главный» образ.CUDA - Любые проблемы при работе с (не выровненными) суб-изображениями (для текстурной привязки, АЭС, ...)?

Существуют ли какие-либо проблемы с CUDA с суб-изображениями для двумерных изображений (pitch-linear) в памяти устройства? Например, может ли связать текстуру с ней или объект текстуры? Правильно ли выполняются подпрограммы АЭС? Я спрашиваю, из-за таких проблем некоторые определенные процедуры могут потребовать определенного выравнивания («начального адреса» буфера).

Обратите внимание, что меня интересуют вопросы стабильности. Я полагаю, что для этих суб-изображений могут быть незначительные штрафы за исполнение, но это не моя главная проблема.

В частности, было бы интересно, если ограничение выравнивания для буфера базового адреса, указанного в документации «cudaBindTexture2D» на

http://developer.download.nvidia.com/compute/cuda/4_1/rel/toolkit/docs/online/group__CUDART__HIGHLEVEL_g5ae4e8e2d6a28ed3e78caa9a7e853b76.html

также необходимо для «объектов Texture» (для CC> = 3,0 графических процессоров)?

ответ

1

Любая грань текстуры должны (будь то с помощью Texture Reference или текстуры API Object) удовлетворяет требование выравнивания (ов), предоставляемое cudaGetDeviceProperties, для того, чтобы иметь прямое отображение между координатами данных и координатами текстурой:

  1. Любым связанная текстура должна удовлетворять выравниванию, возвращаемому через textureAlignment (в байтах). Выделения, предоставленные cudaMalloc и аналогичные, удовлетворят это (для начального адреса распределения).
  2. 2D-связанная текстура должна (для каждой строки в текстуре) удовлетворять выравниванию, возвращенному через texturePitchAlignment. Распределение, предоставляемое (например) cudaMallocPitch, удовлетворит это.

АЭС должна работать должным образом с любым соответствующим образом заданным ROI.

Обратите внимание, что ссылка на документ довольно старая. Текущие документы можно найти here.

Этот question/answer также может представлять интерес.

+0

Ограничение 2 (относительно высоты тона) не является проблемой, потому что у моего суб-изображения есть, конечно, тот же шаг, что и основной образ, а мои основные изображения всегда создаются с помощью cudaMallocPitch. Но ограничение 1 (относительно базового адреса) не будет заполнено суб-изображением. Поэтому в качестве обходного пути я создам объект текстуры, передав его правильно выровненный базовый адрес и сохранит надлежащее смещение (к «реальному» базовому адресу суб-изображения), деленное на размер текселя, чтобы добавить затем в 'tex2d', чтобы исправить эту настройку базового адреса. На самом деле это кажется более или менее – user2454869