Принцип: Программа разбивается на совокупность задач (блоков) с помощью программных средств, каждой из которых назначается свой процессорный элемент для исполнения.
Рис.6.23. ГУЗ
Отсюда видно, что программу можно структурировать. Все программы могут быть представлены в виде графа. Зависимость между операторами программы по управлению представляется как граф управляющих зависимостей или информационный граф. В вершинах этого ориентированного графа располагаются базисные блоки, где под базисным блоком понимается последовательность команд, исполняемая на одном процессорном элементе.
Рассмотрим схему процессора, имеющего мультискалярную архитектуру.
Рис.6.24. Структурная схема процессора, имеющего мультискалярную архитектуру
1). Каждый процессорный элемент выполняет команды своего базисного блока, находящегося в кэш-памяти команд.
2). Значение разделяемых процессорными элементами регистров копируется в каждый процессорный элемент:
В этом случае может оказаться, что не все процессорные элементы разделяют один и тот же регистр. Результат модификации регистра динамически направляется через однонаправленное кольцо множеству процессорных элементов, но модификация регистров осуществляется только в том процессорном элементе, который не замаскирован для этой операции. По однонаправленному кольцу проходят команды, имеющие следующий формат:
Рис.6.25. Формат команд, проходящих по однонаправленному кольцу
Маски генерируются статически компилятором, а динамически во время исполнения – планировщиком, — это оперативная связь между процессорными элементам.
3). Обращение к данным каждым процессорным элементом осуществляется параллельно через коммутационную среду, обеспечивающую его связь с требуемым банком данных.
Банк данных, помимо ЗУ, содержит кэш-данных и буфер адресов (очередь запросов). Планировщик выполняет назначение базисных блоков процессорным элементам и синхронизацию их исполнения.
Вывод: Использование мультискалярной архитектуры возможно только при наличие распараллеливающего компилятора с языков высокого уровня.