2014-07-26 3 views
0

У меня есть ядро, которое обрабатывает изображения RGB. В настоящее время, Я принимаю каждый канал по одному, и запустить то же ядро ​​на этом каналеНедостаток использования образа против глобальной памяти?

Входного ядра представляет собой глобальный буфер памяти: данные перемещаются на кусках из глобального буфера в локальную память для обработки, затем сохраняются в другой глобальный буфер .

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

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

Спасибо!

+0

Вопросы: Как вы выбрали данные RGB? Плоский или чередующийся? Кроме того, какое оборудование вы используете для таргетинга? Различные аппаратные средства будут отличаться друг от друга. Наконец, сколько ALU использует ваш фильтр? Большой сложный фильтр или небольшой простой фильтр? – user2746401

+0

Спасибо, user2746401. Я могу выбрать, какой формат использовать - я предполагаю, что чередование - это способ пойти, если я переключусь на изображение. В настоящее время это плоский. Кроме того, я собираюсь настроить GPU на AMD Hawaii; Например, 290X. Кроме того, фильтр большой и сложный. – Jacko

ответ

0

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

Изменение объема данных, что каждый процесс WI или WG не обязательно приводит к снижению производительности - изменения алгоритма могут непредсказуемо влиять на производительность. Поэтому, чтобы сделать выводы, необходимы тщательные тесты.

Если вы используете таргетинг на определенное оборудование, использование SDK-инструментов - это всегда хорошая идея. Анализаторы производительности могут давать полезную статистику & подсказки по оптимизации (такие как разброс реестров, коэффициент попадания в кэш, процент использования и т. Д.)

+0

Спасибо, Роман. Я делаю дискретное вейвлет-преобразование: сначала преобразуются столбцы, затем строки, поэтому он не является простым алгоритмом сверточного типа. Я работаю один в этом проекте, и я новичок в opencl: у вас есть время для быстрого обзора кода, чтобы отметить любые очевидные ошибки с моей стороны? https://github.com/boxerab/ocldwt - это проект. В настоящее время на окнах, использующих процессор Intel в качестве устройства, он не быстрее, чем серийный код на процессоре, поэтому немного разочаровывает. Но я знаю, что это может быть улучшено .... – Jacko

Смежные вопросы