2016-08-24 2 views
1

Я работаю над оптимизацией разделительного масштабирования изображения. Следующим шагом является сокращение нескольких выборок (ближайших) одного и того же текселя путем считывания всех необходимых текселей в локальную память. Здесь начинается весело ...OpenCL: знать местный размер рабочей группы заранее?

The downscaler универсален, поэтому он может уменьшать все, что угодно, на что-либо меньшее и даже обрабатывать участки изображения и уменьшать их до целевого изображения. Таким образом, окончательный разделитель разрешения никогда не является целым числом. Большую часть времени это будет что-то около 3,97 или около того. Это означает: я не знаю требуемый размер для этого локального массива во время компиляции.

Для меня это означает: перед тем, как поставить задачу, мне придется создать локальный mem-объект требуемого размера.

Как узнать, какие размеры рабочей группы OpenCL выберет?

Если нет способа, существует ли «лучшая практика» для преодоления этой проблемы?

P.S .: Я пишу для совместимости с OpenCL 1.1.

+0

Вы можете явно контролировать размер рабочей группы, который поможет решить вашу проблему. –

+0

Извините, но я так не думаю. Универсальность может привести к нераздельным размерам (т. Е. Простому числу) в любом направлении. Таким образом, поскольку OpenCL 1.1 не позволяет данной локальной работе не быть делителем соответствующей глобальной работы dim - я не смогу это сделать. – St0fF

+0

Вам необходимо заполнить ваши глобальные рабочие размеры кратным размеру рабочей группы и, при необходимости, реализовать любой специальный корпус для краевых условий. (Хотя обычно более эффективно обрабатывать структуры данных.) – pmdj

ответ

1

Поскольку вы используете изображения, на кеш текстуры можно полагаться вместо использования общей локальной памяти.

+0

Спасибо, я забыл ответить на вопрос сам. Как вы говорите, профилирование показало прямое падение производительности при попытке считывать все необходимые пиксели в локальную память. Очевидно, что кэш текстуры действительно делает эти множественные чтения действительными, как локальная память. Таким образом, в моем тесте я просто добавил накладные расходы на выборку в локальную память. Кроме того, я увеличил локальное давление на мембрану, что могло вызвать еще одну часть замедления (почти фактор 4). – St0fF

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