Глобальный Размер Работы должен быть Несколькими из Размера Рабочей группы в OpenCL?

Здравствуйте: Действительно ли глобальная Работа измеряет (Размеры) Потребность быть Несколькими из Размера Рабочей группы (Размеры) в OpenCL?

Если так, есть ли стандартный способ обработать матрицы не несколько размеры рабочей группы? Я могу думать о двух возможностях:

Динамично установите размер размеров рабочей группы к фактору глобальных размеров работы. (это подверглось бы издержкам нахождения фактора и возможно установило бы рабочую группу на неоптимальный размер.)

Увеличьте размеры глобальной работы, чтобы быть ближайшими, несколько размеры рабочей группы, сохраняя весь ввод и вывод буферизуют тот же, но проверяя границы в ядро, чтобы избежать segfaulting, т.е. ничего не сделать на объектах работы из связанного из желаемого вывода. (Это походит на лучший путь.)

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

Спасибо!

10
задан Junier 30 June 2010 в 09:24
поделиться

2 ответа

Спасибо за ссылку Чад. Но на самом деле, если вы читаете:

Если указано local_work_size, значения, указанные в global_work_size [0],… global_work_size [work_dim - 1], должны быть одинаковыми делится на соответствующие значения, указанные в local_work_size [0],… local_work_size [рабочий_дим - 1].

Итак, ДА, размер локальной работы должен быть кратен глобальному размеру работы.

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

7
ответ дан 4 December 2019 в 01:55
поделиться

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

http://www.khronos.org/registry/cl/specs/opencl-1.1.pdf#page=131

global_work_size указывает на массив из work_dim значений без знака, которые опишите количество глобальных рабочие элементы в work_dim измерениях, которые выполнит функцию ядра. В общее количество глобальных рабочих элементов составляет вычисляется как global_work_size [0] * ... * global_work_size [рабочий_dim - 1] .

Значения, указанные в global_work_size + соответствующий значения, указанные в global_work_offset не может превышать диапазон, указанный sizeof (size_t) для устройства на которое будет выполняться ядром поставлен в очередь. sizeof (size_t) для устройство можно определить с помощью CL_DEVICE_ADDRESS_BITS в таблице 4.3. Если, например, CL_DEVICE_ADDRESS_BITS = 32, т. Е. устройство использует 32-битный адрес пробел, size_t - 32-битный беззнаковый целое число и значения global_work_size должно быть в диапазоне 1 .. 2 ^ 32 - 1. Значения вне этого диапазона возвращают Ошибка CL_OUT_OF_RESOURCES .

1
ответ дан 4 December 2019 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: