logo
стр 103-113

Векторные компьютеры

Впервые в мире такой компьютер был реализован в Университете Иллинойса – ILLAC IV. Он изображен ниже.

Блок управления

Команды широковещания

п роцессор

Решетка 8х8

из элементов

процессор-память

память

Рис. 11.10 Массивно-параллельный процессор ILLIAC IV

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

Этот вид параллелизма, как правило, возникает в циклических программных конструкциях. Любой программист, разрабатывая программы на привычных языках высокого уровня типа FORTRAN, Pascal или C, наверняка неоднократно сталкивался с циклами этого типа, в которых одни и те же операции выполняются десятки, сотни, а иногда и тысячи раз.

Простейшим примером цикла DO может служить операция сложения двух одномерных матриц (векторов) A [1:N] и B [1:N]:

For i: = 1 to N

C(i) = A[i]+B[i]

Понятно, что для обработки цикла, взятого нами для примера, компьютер фон Неймана должен выполнить как минимум N сложений элементов векторов A и B, не считая 2N команд приращения индекса и условного перехода. Идея векторной обработки циклов такого рода заключается в том, что в систему команд компьютера вводится векторная операция сложения <A+B>, которая задает сложение всех элементов векторов-операндов. При этом реализуются сразу две возможности ускорения вычислений: во-первых сокращается число выполняемых процессором команд объектного кода, поскольку отпадает необходимость в пересчете индексов и организации условного перехода; и, во-вторых, все операции сложения элементов векторов-операндов могут быть выполнены одновременно в силу параллелизма этих операций. Действительно, в нашем примере результат любой i-ой операции цикла (A[i]+B[i])не влияет на результат выполнения остальных N-1 операций, и если представить себе компьютер, который "умеет" одновременно выполнять все N элементарных операций цикла, то исполнение векторной команды <A+B>потребует в N раз меньше времени, чем последовательная обработка всех операций A[i]+B[i] исходного цикла.