Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭВМ лекции 2006.doc
Скачиваний:
186
Добавлен:
20.05.2014
Размер:
3.7 Mб
Скачать

Многоядерность — следующий этап развития

Избежать конфликтных ситуаций, возникающих при использовании технологии Hyper-Threading, можно в том случае, если изолировать в пределах одного процессора выполнение различных потоков инструкций. Фактически для этого потребуется использовать не одно, а два и более ядер процессора. Тогда в идеальном варианте каждый поток инструкций утилизирует отведенное ему ядро процессора (и исполнительные блоки), что позволяет избежать конфликтных ситуаций и увеличить производительность процессора за счет параллельного выполнения потоков инструкций.

В рассмотренном примере возникновения конфликтных ситуаций при использовании технологии Hyper-Threading применение двух независимых ядер для выполнения двух потоков инструкций позволило бы выполнить весь программный код не за семь (как в случае процессора с технологией Hyper-Threading), а за пять тактов (рис. 11.9).

Рис. 11.9 Преимущество двухъядерной архитектуры процессора

Конечно, говорить о том, что двухъядерные процессоры в два раза производительнее одноядерных, не приходится. Причина заключается в том, что для реализации параллельного выполнения двух потоков необходимо, чтобы эти потоки были полностью или частично независимы друг от друга, а кроме того, чтобы операционная система и само приложение поддерживали на программном уровне возможность распараллеливания задач. И в связи с этим стоит подчеркнуть, что сегодня далеко не все приложения удовлетворяют этим требованиям и потому не смогут получить выигрыша от использования двухъядерных процессоров. Должно пройти еще немало времени, чтобы написание параллельного кода приложений вошло в привычку у программистов, однако первый и самый важный камень в фундамент параллельных вычислений уже заложен. Впрочем, уже сегодня существует немало приложений, которые оптимизированы для выполнения в многопроцессорной среде, и такие приложения, несомненно, позволят использовать преимущества двухъядерного процессора.

Многопроцессорные архитектуры – параллелизм на уровне процессоров

Спрос на высокую производительность работы вычислительных систем повышается и повышается. Параллелизм на уровне команд помогает в какой то степени, но конвейеры и суперскалярная архитектура обычно увеличивают скорость работы в 5-10 раз, а нужно поднимать производительность в 50, 100 и более раз. Стало быть необходимо переходить к компьютерам с несколькими процессорами и реализовывать параллелизм верхнего уровня – множество независимых командных потоков.

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

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

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

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

процессор

Решетка 8х8

из элементов

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

память

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

Машины этого типа известны под именем векторного процессора и /или массивно-параллельного процессора или матричный процессор. Отличия между этими архитектурами кроятся на уровне организации суммирующих устройств и не очень значительны. Основным производителем является компания CrayResearch, основателем которой был легендарный Сеймур Крей (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] исходного цикла.