В 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 потоков. Но эта система потоковой передачи может отличаться от тех, что на процессорах, поэтому ускорение контекста может быть быстрее, и конкуренция с кешем минимальна из-за переключения в группах.
Но как размер группы может быть более сотни? Разве GPU не владеет только 32 ядрами? – ethanjyx
- это вычислительные единицы, каждая из которых имеет множество векторных единиц или скалярных единиц. –
Если я удвою размер группы, возможно ли, что время выполнения будет уменьшено до половины? – ethanjyx