Принципиальное отличие параллельной обработки между процессором и графическим процессором состоит в том, что процессоры являются 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.