Здравствуйте: Действительно ли глобальная Работа измеряет (Размеры) Потребность быть Несколькими из Размера Рабочей группы (Размеры) в OpenCL?
Если так, есть ли стандартный способ обработать матрицы не несколько размеры рабочей группы? Я могу думать о двух возможностях:
Динамично установите размер размеров рабочей группы к фактору глобальных размеров работы. (это подверглось бы издержкам нахождения фактора и возможно установило бы рабочую группу на неоптимальный размер.)
Увеличьте размеры глобальной работы, чтобы быть ближайшими, несколько размеры рабочей группы, сохраняя весь ввод и вывод буферизуют тот же, но проверяя границы в ядро, чтобы избежать segfaulting, т.е. ничего не сделать на объектах работы из связанного из желаемого вывода. (Это походит на лучший путь.)
Второй путь работал бы? Существует ли лучший путь? (Или разве это не необходимо, потому что размеры рабочей группы не должны делить глобальные размеры работы?)
Спасибо!
Спасибо за ссылку Чад. Но на самом деле, если вы читаете:
Если указано local_work_size, значения, указанные в global_work_size [0],… global_work_size [work_dim - 1], должны быть одинаковыми делится на соответствующие значения, указанные в local_work_size [0],… local_work_size [рабочий_дим - 1].
Итак, ДА, размер локальной работы должен быть кратен глобальному размеру работы.
Я также думаю, что назначение глобального рабочего размера ближайшим кратным и осторожность с границами должны работать. Я отправлю комментарий, когда буду пытаться это сделать.
По стандарту это не обязательно должно быть из того, что я видел. Я думаю, что справился бы с этим с помощью ветки, но я точно не знаю, какую матричную операцию вы выполняете.
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
.