Работа 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 мерного ядра; например, в случае данные, такие как изображения, если каждый поток / рабочий элемент должен иметь дело с одним пикселем, каждый поток/рабочий элемент может иметь дело с пикселем в координатах (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 краткий справочник также очень полезно.