Вопрос

Я новичок в 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...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top