Как запустить две рабочие группы на один вычислительный блок на картах AMD GCN
Обычно один вычислительный блок может выполнять только одну рабочую группу. Но документ AMD говорит, что на одном вычислительном устройстве может работать несколько волновых фронтов. Как я могу это сделать? Это функция OpenCL для этого? Или мне нужно использовать инструкцию по сборке? Я хочу сделать это, потому что размер моей рабочей группы равен 20, и я хочу запустить 2 рабочие группы на вычислительную единицу, чтобы каждая группа могла использовать 32 КиБ LDS (всего 64 КиБ на CU, каждый волновой фронт может использовать до 32 КБ, поэтому я хочу запустить два волновых фронта, чтобы использовать полное количество LDS).
0 ответов
Вы можете попробовать расщепление устройства, чтобы выбрать некоторый подмассив вычислительных блоков, но я не думаю, что он поддерживается на графических процессорах. Если это так, то вы можете просто выбрать C число вычислительных единиц и поставить в очередь только 2 рабочие группы (2N глобальных потоков, N локальных потоков). Это работает на процессоре по крайней мере.
Возможно, вы можете просто поставить в очередь N общих глобальных потоков, но работать для 2N элементов по 2 на каждую рабочую группу, разделенных командой синхронизации уровня рабочей группы в ядре.