Работа dim в NDRange
Я не могу понять, для чего work_dim в clEnqueueNDRangeKernel ()?
Итак, в чем разница между work_dim=1 и work_dim=2? И почему рабочие элементы группируются в рабочие группы? Рабочий элемент или рабочая группа-это поток, работающий на устройстве (или ни один из них)?
спасибо вперед!
1 ответов
work_dim
- Это число измерений на clEnqueueNDRangeKernel()
исполнения.
если указать work_dim = 1
, потом глобальные и локальные размеры работы are одномерный. Таким образом, внутри ядра, вы можете получить доступ только к информации в первое измерение, например,get_global_id(0)
, etc.
если указать work_dim = 2
или 3
, тогда вы также должны указать 2 или 3 мерных мировой и местные worksizes; в таком случае, вы можете получить доступ к информации внутри ядра в 2 или 3 измерений, например,get_global_id(1)
или get_group_id(2)
.
на практике вы можете сделать все в 1D, но и для борьбы с 2Д или 3Д данные, возможно, проще напрямую использовать 2/3 мерного ядра; например, в случае 2Д данные, такие как изображения, если каждый поток / рабочий элемент должен иметь дело с одним пикселем, каждый поток/рабочий элемент может иметь дело с пикселем в координатах (x,y)
С x = get_global_id(0)
и y = get_global_id(1)
.
A работа-элемент это нить, а групп are группы рабочих элементов/потоков.
я считаю, что разделение рабочих групп / рабочих элементов связано с аппаратной архитектурой графических процессоров и других ускорителей (например, Cell/BE); вы можете отобразить выполнение рабочих групп для Многопроцессоров потока GPU (в Nvidia talk) или SPUs (в IBM/Cell talk), в то время как соответствующие рабочие группы будут выполняться внутри блоков выполнения Многопроцессоров потока и/или SPUs. Это не редкость иметь work group size = 1
если вы выполняете ядра в ЦП (например, для четырехъядерного ядра у вас будет 4 рабочие группы, каждая с одним рабочим элементом-хотя, по моему опыту, обычно лучше иметь больше рабочих групп, чем ядер ЦП).
Регистрация OpenCL справочное руководство, а также руководство OpenCl для любого устройства, которое вы программируете. The краткий справочник также очень полезно.