Читать «Архитектура компьютера» онлайн - страница 71

Эндрю Таненбаум

Современные графические процессоры (GPU) широко используют SIMD-обработку для обеспечения высокой вычислительной мощности при относительно небольшом количестве транзисторов. Обработка графики отлично подходит для SIMD-процессоров, потому что большинство алгоритмов имеет четкую структуру с повторением операций для пикселов, вершин, текстур и ребер. На рис. 2.6 изображен SIMD-процессор ядра графического процессора Nvidia Fermi. Он содержит до 16 потоковых мультипроцессоров (SM, Stream Multiprocessor) SIMD, каждый из которых содержит 32 процессора SIMD. За каждый цикл планировщик выбирает два потока для выполнения на процессоре SIMD. Затем следующая команда каждого потока выполняется на процессорах SIMD (до 16, хотя при отсутствии достаточного параллелизма данных используется меньшее количество процессоров). Если каждый поток способен выполнить 16 операций за цикл, полностью загруженное ядро графического процессора Fermi с 32 SM будет выполнять целых 512 операций за цикл. Это весьма впечатляющее достижение, если учесть, что четырехъядерный процессор общего назначения того же размера с трудом достигнет 1/32 такой вычислительной мощи.

С точки зрения программиста векторный процессор (vector processor) очень похож на SIMD-процессор. Он также чрезвычайно эффективен при выполнении последовательности операций над парами элементов данных. Однако в отличие от SIMD-процессора, все операции сложения выполняются в одном блоке суммирования, который имеет конвейерную структуру. Компания Cray Research, основателем которой был Сеймур Крей, выпустила множество моделей векторных процессоров, начиная с модели Cray-1 (1974).

Оба типа процессоров работают с массивами данных. Оба они выполняют одни и те же команды, которые, например, попарно складывают элементы двух векторов. Однако если у SIMD-процессора столько же суммирующих устройств, сколько элементов в массиве, векторный процессор содержит векторный регистр, состоящий из набора традиционных регистров. Эти регистры загружаются из памяти единственной командой, которая фактически делает это последовательно. Команда сложения попарно складывает элементы двух таких векторов, загружая

Рис. 2.6. SIMD-ядро графического процессора Fermi

их из двух векторных регистров в суммирующее устройство с конвейерной структурой. В результате из суммирующего устройства выходит другой вектор, который либо помещается в векторный регистр, либо сразу используется в качестве операнда при выполнении другой операции с векторами. Команды SSE (Streaming SIMD Extension) в архитектуре Intel Core используют эту модель расширения для ускорения вычислений с высокой степенью упорядоченности — например, обработки мультимедийных и научных данных. В этом отношении компьютер ILLIAC IV можно считать одним из прародителей процессора Intel Core.