Универсальные процессоры (CPU) созданы для исполнения одного потока последовательных инструкций с максимальной производительностью, а графические процессоры (GPU) проектируются для быстрого исполнения большого числа параллельно выполняемых потоков инструкций.
Для увеличения производительности CPU стараются добиться выполнения как можно большего числа инструкций параллельно. Начиная с процессоров Intel Pentium, появилось суперскалярное выполнение, обеспечивающее выполнение двух инструкций за такт. Но у параллельного выполнения последовательного потока инструкций есть определённые базовые ограничения и увеличением количества исполнительных блоков кратного увеличения скорости не добиться.
Алгоритмы, реализуемые видеочипами, обладают естественным параллелизмом. Видеочип принимает на входе группу полигонов, проводит все необходимые операции, и на выходе выдаёт пиксели. Обработка полигонов и пикселей независима, их можно обрабатывать параллельно, отдельно друг от друга. Высокая степень параллелизма в GPU вызывает необходимость использования большого количества исполнительных блоков, которые легко загрузить, в отличие от последовательного потока инструкций для CPU. Кроме того, современные GPU также могут исполнять больше одной инструкции за такт.
В универсальных процессорах большая часть транзисторов и площади чипа идут на буферы команд, аппаратное предсказание ветвления и огромные объёмы внутри чиповой кэш-памяти. Все эти аппаратные блоки нужны для ускорения исполнения немногочисленных потоков команд. Видеочипы тратят транзисторы на массивы исполнительных блоков, разделяемую память небольшого объёма и контроллеры памяти на несколько каналов. Вышеперечисленное не ускоряет выполнение отдельных потоков, оно позволяет чипу обрабатывать нескольких тысяч потоков, одновременно исполняющихся чипом и требующих высокой пропускной способности памяти.
CPU снижают задержки доступа к памяти при помощи кэш-памяти большого размера. Видеочипы обходят проблему задержек доступа к памяти за счет готовности исполнения тысяч потоков. В то время, когда один из потоков ожидает данных из памяти, видеочип может выполнять вычисления другого потока без ожидания и задержек. Можно сказать, что в отличие от современных универсальных CPU, видеочипы предназначены для параллельных вычислений с большим количеством арифметических операций. И значительно большее число транзисторов GPU работает по прямому назначению - обработке массивов данных, а не управляет исполнением немногочисленных последовательных вычислительных потоков. На рисунке показаны соотношения объема чипа занимаемого разнообразной логикой в CPU и GPU.
Основой эффективного использования мощи GPU в научных и иных неграфических расчётах является распараллеливание алгоритмов на сотни исполнительных блоков, имеющихся в видеочипах. К примеру, множество приложений по молекулярному моделированию отлично приспособлено для расчётов на видеочипах, они требуют больших вычислительных мощностей и поэтому удобны для параллельных вычислений. А использование нескольких GPU даёт ещё больше вычислительных мощностей для решения подобных задач.
Выполнение расчётов на GPU показывает отличные результаты в алгоритмах, использующих параллельную обработку данных. При этом лучшие результаты достигаются, если отношение числа арифметических инструкций к числу обращений к памяти достаточно велико.
Области применения параллельных расчётов на GPU. Это анализ и обработка изображений и сигналов, моделирование физических процессов, выполнение финансовых расчётов, ведение баз данных, моделирование динамики газов и жидкостей, криптография, астрономия, биоинформатика, цифровое кино и телевидение, геоинформационные системы, магнитно-резонансная томография, нейросети, искусственный интеллект, анализ спутниковых данных, сейсмическая разведка.