Я работаю над оптимизацией разделительного масштабирования изображения. Следующим шагом является сокращение нескольких выборок (ближайших) одного и того же текселя путем считывания всех необходимых текселей в локальную память. Здесь начинается весело ...OpenCL: знать местный размер рабочей группы заранее?
The downscaler универсален, поэтому он может уменьшать все, что угодно, на что-либо меньшее и даже обрабатывать участки изображения и уменьшать их до целевого изображения. Таким образом, окончательный разделитель разрешения никогда не является целым числом. Большую часть времени это будет что-то около 3,97 или около того. Это означает: я не знаю требуемый размер для этого локального массива во время компиляции.
Для меня это означает: перед тем, как поставить задачу, мне придется создать локальный mem-объект требуемого размера.
Как узнать, какие размеры рабочей группы OpenCL выберет?
Если нет способа, существует ли «лучшая практика» для преодоления этой проблемы?
P.S .: Я пишу для совместимости с OpenCL 1.1.
Вы можете явно контролировать размер рабочей группы, который поможет решить вашу проблему. –
Извините, но я так не думаю. Универсальность может привести к нераздельным размерам (т. Е. Простому числу) в любом направлении. Таким образом, поскольку OpenCL 1.1 не позволяет данной локальной работе не быть делителем соответствующей глобальной работы dim - я не смогу это сделать. – St0fF
Вам необходимо заполнить ваши глобальные рабочие размеры кратным размеру рабочей группы и, при необходимости, реализовать любой специальный корпус для краевых условий. (Хотя обычно более эффективно обрабатывать структуры данных.) – pmdj