2013-08-19 3 views
0

У меня есть 2D-матрица, где я хочу изменить каждое значение, применяя функцию, которая зависит только от координат в матрице и значений, установленных во время компиляции. Поскольку между каждым таким расчетом не требуется синхронизация, мне кажется, что размер рабочей группы действительно может быть 1, а количество рабочих групп равно числу элементов в матрице.Рабочие размеры для полностью независимых вычислений в OpenCL

Вопрос в том, действительно ли это приведет к желаемому результату или будут ли другие силы играть здесь, что может улучшить настройку этих значений?

ответ

2

Моя рекомендация: просто установите глобальный размер для размера вашей 2D-матрицы и местного размера в NULL. Это заставит компилятор выбрать для вас оптимальный локальный размер.

В вашем конкретном случае местный размер не должен иметь никакой формы. Фактически любое значение ценности будет работать, но производительность может отличаться. Вы можете настроить его вручную для разных HW. Но проще, чтобы компилятор выполнил эту работу для вас. И это еще более портативно.

+0

Хмм, какой эффект будет иметь на get_global_id vs get_local_id, чтобы получить координаты в общей матрице? –

+1

Вы можете использовать их, как всегда. get_global_id() всегда будет возвращать глобальный идентификатор. Независимо от местного размера. И get_local_id() вернет локальный идентификатор, который зависит от локального размера, выбранного компилятором. В этом случае вы можете использовать get_local_size(), чтобы получить локальный размер, используемый во время выполнения. Тем не менее, вы заявили, что ваши рабочие элементы не нуждаются в локальной синхронизации, поэтому это совсем не требуется. – DarkZeros