Выполнение GPU "поток" против процессора - PullRequest
1 голос
/ 10 января 2020

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

Каков поток выполнения на GPU от загрузки данных до отправки результатов в CPU? Каковы основные различия между выполнением на графическом процессоре и выполнением на процессоре?

Должны ли мы рассматривать графический процессор как «тип процессора с большим (большим) числом меньших ядер» или есть дополнительные различия в природе?

1 Ответ

2 голосов
/ 11 января 2020

Принципиальное отличие параллельной обработки между процессором и графическим процессором состоит в том, что процессоры являются MIMD (Multi-Instruction-Multi-Data), а GPU - SIMD (Single-Instruction-Multi-Data). В многоядерном процессоре каждое ядро ​​выбирает свои инструкции и данные независимо от других, тогда как в графическом процессоре имеется только один поток команд для группы ядер (обычно 32 или 64). Хотя для ядер 32/64 существует только один поток инструкций, каждое из них работает с различными элементами данных (обычно расположенными вместе в памяти; подробнее ниже). Такое выполнение SIMD означает, что ядра графического процессора работают ступенчато.

По вышеупомянутой причине графический процессор нельзя рассматривать как «тип процессора с большим (большим) числом меньших ядер». ».

Чтобы поддерживать выполнение SIMD (также иногда называемое широким выполнением), нам нужна широкая выборка входных данных. Для 32-разрядного исполнения мы получаем непрерывный 4B x 32 блок = 128B, который полностью (как правило) потребляется каналом 32-шириной. Сравните это с многоядерным MIMD, где каждое из 32 ядер ЦП будет извлекать отдельную инструкцию, а затем загружаться из 32 различных кеш-линий. Такая SIMD-природа (широкого) извлечения команд / данных приводит к огромной экономии энергии по сравнению с MIMD. В результате при одном и том же бюджете мощности мы можем разместить больше ядер на GPU (=> больше параллелизма HW), чем многоядерный процессор.

SIMD-природа графических процессоров определяется приложениями, которые выполняют одну и ту же операцию над очень многими входными элементами (например, обработка изображений, когда мы применяем фильтр к каждому пикселю, скажем, для изображения 1024x768), так что широкая инструкция / выборка данных работает хорошо. В то же время приложения, в которых вычисления каждого ядра различны (например, take if (), когда входные данные равны нулю, или else (), если входные данные равны 1), или каждое ядро ​​должно получать данные с другой страницы, не могут воспользоваться преимуществами SIMD-природа графических процессоров.

Частично связанный факт заключается в том, что графические процессоры поддерживают приложения (например, изображения / видео), которые выполняют потоковую передачу (почти нулевое повторное использование данных) и имеют большой параллелизм данных. Потоковая передача означает, что нам не нужны огромные кэши, такие как процессоры, а массивный параллелизм данных почти полностью устраняет необходимость в механизмах когерентности HW.

...