2017-02-02 8 views
0

В чем разница между типами изображений image2d_t и image2d_array_t в OpenCL? Я не мог найти много информации в спецификации.В чем разница между image2d_t и image2d_array_t в OpenCL?

+0

2d_array_t должны быть отдельными изображениями, а 3d должен быть более оптимизирован в аппаратных средствах для фильтрации пикселей между изображениями, так что вычисление изображений отдельно, array_t может быть лучше и вычислять их вместе, 3d может быть лучше. Но я не пробовал их, просто предположение. –

ответ

2

image2d_t - это плоское 2D-изображение определенного формата и размера. Он также может содержать уровни mipmap, если доступно расширение cl_khr_mipmap_image (https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/cl_khr_mipmap_image.html).

image2d_array_t - это массив изображений одинакового размера и типа. Посмотрите на https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/cl_image_desc.html, как создать такой массив изображений. Из этой страницы:

Обратите внимание, что чтение и запись 2D-массивов изображений из ядра с помощью image_array_size = 1 может быть более низкой, чем 2D-изображения.

поэтому вам нужно использовать только массивы изображений, если это необходимо.

Для получения доступа к image2d_t и image2d_array_t см. https://www.khronos.org/registry/OpenCL/sdk/2.0/docs/man/xhtml/read_imagef2d.html. Для массивов изображений индекс требуемого изображения будет находиться в координате текстуры . Для обоих image2d_t и image2d_array_t уровень mipmap указан как параметр lod для read_image().

Массивы изображений полезны, если вам необходимо передать переменное количество изображений в ядро, то есть решить во время выполнения, так как в вашем ядре вы можете запросить, сколько изображений есть в image2d_array_t с get_image_array_size(), например. скажем, вы хотели усреднить все изображения в массиве изображений.

Они также полезны для индексирования изображений из вашего ядра, например. выбор маски резкости края (сохраненной в массиве изображений) на основе статистики локального изображения, вычисленной в вашем ядре.

В аппаратных средствах image2d_array_t обычно быстрее, чем image3d_t и более широко поддерживается. Однако image2d_array_t не может (автоматически) выборки между изображениями массива, тогда как image3d_t может пробовать на дробных z местах.