В чем разница между типами изображений image2d_t и image2d_array_t в OpenCL? Я не мог найти много информации в спецификации.В чем разница между image2d_t и image2d_array_t в OpenCL?
ответ
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
местах.
2d_array_t должны быть отдельными изображениями, а 3d должен быть более оптимизирован в аппаратных средствах для фильтрации пикселей между изображениями, так что вычисление изображений отдельно, array_t может быть лучше и вычислять их вместе, 3d может быть лучше. Но я не пробовал их, просто предположение. –