Память текстур OpenCL
-
21-09-2019 - |
Вопрос
Я новичок в OpenCL, поэтому, пожалуйста, потерпите.
В первой итерации моего кода я использовал базовые буферы памяти для больших наборов данных и объявил их глобальными.Однако теперь, когда я хочу улучшить синхронизацию, я хотел использовать для этого текстурную память.В версии CUDA мы используем cudaBindTexture и tex1Dfetch для получения данных для большого одномерного массива с плавающей запятой.Насколько я понимаю, память текстур — это то же самое, что и память изображений.Однако, поскольку существуют только объекты 2D- и 3D-изображений с максимальной высотой и шириной, я столкнулся с некоторыми проблемами.Мой массив больше максимальной высоты/ширины, но не максимальной высоты * максимальной ширины.Должен ли я преобразовать свой 1D-массив в 2D?Или есть лучший способ сделать это?
Или я совсем отключился?
я читал http://forums.nvidia.com/index.php?showtopic=151743 и http://forums.nvidia.com/index.php?showtopic=150454 но они не дали окончательного ответа на вопрос, является ли память текстур, упомянутая в «Рекомендациях и руководстве по программированию», фактически объектами изображений.
Спасибо и любая помощь/предложения приветствуются!
Решение
Лучший ответ я нашел в ответ на свое сообщение на форуме NVidia. здесь.
Другие советы
Мой массив больше максимальной высоты/ширины, но не максимальной высоты * максимальной ширины.Должен ли я преобразовать свой 1D-массив в 2D?
Да, текстурное оборудование имеет ограничения на максимальные значения индекса.Если вы превысите эти значения, вам придется перейти на использование нескольких значений индекса.
Тем не менее, я не имею в виду, что преобразование в доступ к текстурам ускорит вашу программу.
OpenCL 1.2 поддерживает 1D-текстуры.Проблема в том, что NVIDIA поддерживает только OpenCL 1.1, в отличие от AMD или Intel...