2014-12-14 2 views
1

Что означает местный размер группы для OpenCL? Если work groupsize равно 1, означает ли это, что одновременно работает только один поток?Значение группы OpenCL

Я нашел, что мы можем установить NULL в cl_ndrange, чтобы программа автоматически выбирала размер группы, как мы можем узнать, какой размер группы выбран?

ответ

1

В OpenCL ядра

get_local_size (0); 

дает "8" для ядра 8x16 размером с работой группы, в то время как

get_local_size (1); 

дает "16" для того же исполнения ядра. Если это 3D-ядро, то «2» в качестве параметра дает размер третьего измерения. Для запроса количества измерений (1,2,3?),

get_work_dim(); 

используется.

Размер локальной рабочей группы дает количество потоков для каждой аппаратной синхронизации. Для AMD gpus максимум 256, а Nvidia и cpus - 1024. Когда вы даете «1» в качестве размера этой рабочей группы, получается только один поток на каждый узел вычисления синхронизации (если не ограничен минимальным значением из драйверов или аппаратного обеспечения) и достигается максимальная локальная память на поток (также на волну).

В то же время? Выполнение всего исполнения сводится к небольшому количеству вычислительных единиц, позволяя выполнять многократное выдачу и увеличивать занятие, особенно размер рабочей группы мал, и локальной памяти достаточно. если L = 1, волны MAX_VALUE сбрасываются на один и тот же вычислительный блок, L = 64 позволяет сбрасывать только 16 волн, L = 256 позволяет, например, сбрасывать только 4 волны. Да, в то же время, но не в той же области синхронизации.

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

Например, предстоящий r9 390x gpu будет иметь 64 вычислительных устройства, каждый из которых может иметь 4 векторных единицы, каждый из которых имеет 16 арифметических элементов & единиц fpu всего 4096 ядер. В вычислительном блоке AMD имеется всего 64 ядра, ядро ​​транслируется примерно 4-мя волнами, поэтому на каждый вычислительный блок приходится 256 потоков. Но эта система потоковой передачи может отличаться от тех, что на процессорах, поэтому ускорение контекста может быть быстрее, и конкуренция с кешем минимальна из-за переключения в группах.

+0

Но как размер группы может быть более сотни? Разве GPU не владеет только 32 ядрами? – ethanjyx

+1

- это вычислительные единицы, каждая из которых имеет множество векторных единиц или скалярных единиц. –

+0

Если я удвою размер группы, возможно ли, что время выполнения будет уменьшено до половины? – ethanjyx

Смежные вопросы