СКИПОДы 2007 полная версия (1127795), страница 20
Текст из файла (страница 20)
Значение переменной А будет разным взависимости от порядка, в котором вычисляются эти выражения (сначала А, а потом В, илинаоборот), но ведь в программе подразумевается только одно определенное значение. Иесли теперь вычислить эти выражения параллельно, то на правильный результат можнорассчитывать лишь с определенной вероятностью, а не гарантировано.Планирование порядка вычислений — довольно трудная задача, которую приходитсярешать при проектировании современного процессора. В суперскалярных архитектурах дляраспознавания зависимостей между машинными инструкциями применяется специальноедовольно сложное аппаратное решение (например, в P6- и post-P6-архитектуре от Intel дляэтого используется буфер переупорядочивания инструкций — ReOrder Buffer, ROB).Однако размеры такого аппаратного планировщика при увеличении количествафункциональных модулей обработки возрастают в геометрической прогрессии, что, в концеконцов, может занять весь кристалл процессора.
Поэтому суперскалярные проектыостановились на отметке 5-6 обрабатываемых за цикл инструкций. На самом же деле,текущие реализации VLIW тоже далеко не всегда могут похвастаться 100% заполнениемпакетов — реальная загрузка около 6-7 команд в такте — примерно столько же, сколько илидеры среди RISC-процессоров. При другом подходе можно передать все планированиепрограммному обеспечению, как это делается в конструкциях с VLIW. «Умный»компилятор должен выискать в программе все инструкции, которые являются совершеннонезависимыми, собрать их вместе в очень длинные строки (длинные инструкции) и затемотправить на одновременное исполнение функциональными модулями, количествокоторых, как минимум, не меньше, чем количество операций в такой длинной команде.Очень длинные инструкции (VLIW) обычно имеют размер 256-1024 bit, однако, бывает именьше.
Сам же размер полей, кодирующих операции для каждого функциональногомодуля, в такой метаинструкции намного меньше.Вновь вспыхнувший в последнее время интерес к VLIW как к архитектуре, которую можноиспользовать для реализации вычислений общего назначения, дал существенный толчокразвитию техники VLIW-компиляции. Такой компилятор упаковывает группы независимыхопераций в очень длинные слова инструкций таким способом, чтобы обеспечить быстрыйзапуск и более эффективное их исполнение функциональными модулями. Компилятор63сначала обнаруживает все зависимости между данными, а затем определяет, как ихразвязать. Чаще всего это делается путем переупорядочивания всей программы — разные ееблоки перемещаются с одного места в другое. Данный подход отличается от применяемогов суперскалярном процессоре, который для определения зависимостей используетспециальное аппаратное решение прямо во время выполнения приложения(оптимизирующие компиляторы, безусловно, улучшают работу суперскалярногопроцессора, но не делают его «привязанным» к ним).
Большинство суперскалярныхпроцессоров может обнаружить зависимости и планировать параллельное исполнениетолько внутри базовых программных блоков (группа последовательных операторовпрограммы, не содержащих внутри себя останова или логического ветвления, допустимыхтолько в конце). Некоторые переупорядочивающие системы положили начало расширениюобласти сканирования, не ограничивая ее базовыми блоками. Для обеспечения большегопараллелизма VLIW-компьютеры должны наблюдать за операциями из разных базовыхблоков, чтобы поместить эти операции в одну и ту же длинную инструкцию (их «областьобзора» должна быть шире, чем у суперскалярных процессоров) — это обеспечиваетсяпутем прокладки «маршрута» по всей программе (трассировка).
Трассировка — наиболееоптимальный для некоторого набора исходных данных маршрут по программе (дляобеспечения правильного результата гарантируется не пересечение этих данных), т.е.маршрут, который «проходит» по участкам, пригодным для параллельного выполнения (этиучастки формируются, кроме всего прочего, и путем переноса кода из других местпрограммы), после чего остается упаковать их в длинные инструкции и передать навыполнение. Планировщик вычислений осуществляет оптимизацию на уровне всейпрограммы, а не ее отдельных базовых блоков. Для VLIW, так же как и для RISC, ветвленияв программе являются «врагом», препятствующим эффективному ее выполнению. В товремя как RISC для прогнозирования ветвлений использует аппаратное решение, VLIWоставляет это компилятору. Сам компилятор использует информацию, собранную им путемпрофилирования программы, хотя у будущих VLIW-процессоров предполагаетсянебольшое аппаратное расширение, обеспечивающее сбор для компилятора статистическихданных непосредственно во время выполнения программы, что принципиально важно прициклической работе с переменным набором.
Компилятор прогнозирует наиболееподходящий маршрут и планирует прохождение, рассматривая его как один большойбазовый блок, затем повторяет этот процесс для всех других возникших после этогопрограммных веток, и так до самого конца программы. Он также умеет делать при анализекода и другие «интеллектуальные шаги», такие как развертывание программного цикла иIF-преобразование, в процессе которого временно удаляются все логические переходы изсекции, подвергающейся трассировке.
Там, где RISC может только просмотреть код впередна предмет ветвлений, VLIW-компилятор перемещает его с одного места в другое дообнаруженного ветвления (согласно трассировке), но предусматривает при необходимостивозможность отката назад, к предыдущему программному состоянию. Формально ничего немешает это же сделать и RISC процессору, просто соотношение «цена/эффективность»оказывается слишком высоким. Соответствующее аппаратное обеспечение, добавленное кVLIW-процессору, может оказать определенную поддержку компилятору.
Например,операции, имеющие по несколько ветвлений, могут входить в одну длинную инструкцию и,следовательно, выполняться за один машинный такт. Поэтому выполнение условныхопераций, которые зависят от предыдущих результатов, может быть реализованопрограммным способом, а не аппаратным. Цена, которую приходится платить заувеличение быстродействия VLIW-процессора, намного меньше стоимости компиляции —именно поэтому основные расходы приходятся на сами компиляторы.64Архитектура параллельных вычислительных системАрхитектура параллельных вычислительных системSMP (symmetric multiprocessing) – симметричная многопроцессорная архитектура.
Главнойособенностью систем с архитектурой SMP является наличие общей физической памяти,разделяемой всеми процессорами.Рис. 3.1. Схематический вид SMP-архитектурыПамять служит, в частности, для передачи сообщений между процессорами, при этом всевычислительные устройства при обращении к ней имеют равные права и одну и ту жеадресацию для всех ячеек памяти.
Поэтому SMP-архитектура называется симметричной.Последнее обстоятельство позволяет очень эффективно обмениваться данными с другимивычислительными устройствами. SMP-система строится на основе высокоскоростнойсистемной шины (SGI PowerPath, Sun Gigaplane, DEC TurboLaser), к слотам которойподключаются функциональные блоки типов: процессоры (ЦП), подсистема ввода/вывода(I/O) и т. п. Для подсоединения к модулям I/O используются уже более медленные шины(PCI, VME64). Наиболее известными SMP-системами являются SMP-cерверы и рабочиестанции на базе процессоров Intel (IBM, HP, Compaq, Dell, ALR, Unisys, DG, Fujitsu и др.)Вся система работает под управлением единой ОС (обычно UNIX-подобной, но для Intelплатформ поддерживается Windows NT). ОС автоматически (в процессе работы)распределяет процессы по процессорам, но иногда возможна и явная привязка.Основные преимущества SMP-систем:простота и универсальность для программирования.
Архитектура SMP не накладываетограничений на модель программирования, используемую при создании приложения:обычно используется модель параллельных ветвей, когда все процессоры работаютнезависимо друг от друга. Однако можно реализовать и модели, использующиемежпроцессорный обмен. Использование общей памяти увеличивает скорость такогообмена, пользователь также имеет доступ сразу ко всему объему памяти. Для SMP-системсуществуют довольно эффективные средства автоматического распараллеливания;простотаэксплуатации.Какправило,SMP-системыиспользуютсистемукондиционирования, основанную на воздушном охлаждении, что облегчает их техническоеобслуживание;относительно невысокая цена.Недостатки:системы с общей памятью плохо масштабируются.Этот существенный недостаток SMP-систем не позволяет считать их по-настоящемуперспективными.
Причиной плохой масштабируемости является то, что в данный моментшина способна обрабатывать только одну транзакцию, вследствие чего возникаютпроблемы разрешения конфликтов при одновременном обращении нескольких процессоров65к одним и тем же областям общей физической памяти. Вычислительные элементыначинают друг другу мешать. Когда произойдет такой конфликт, зависит от скорости связии от количества вычислительных элементов. В настоящее время конфликты могутпроисходить при наличии 8-24 процессоров. Кроме того, системная шина имеетограниченную (хоть и высокую) пропускную способность (ПС) и ограниченное числослотов. Все это очевидно препятствует увеличению производительности при увеличениичисла процессоров и числа подключаемых пользователей.
В реальных системах можнозадействовать не более 32 процессоров. Для построения масштабируемых систем на базеSMP используются кластерные или NUMA-архитектуры. При работе с SMP-системамииспользуют так называемую парадигму программирования с разделяемой памятью (sharedmemory paradigm).MPP (massive parallel processing) – массивно-параллельная архитектура. Главнаяособенность такой архитектуры состоит в том, что память физически разделена. В этомслучае система строится из отдельных модулей, содержащих процессор, локальный банкоперационной памяти (ОП), коммуникационные процессоры (рутеры) или сетевыеадаптеры, иногда – жесткие диски и/или другие устройства ввода/вывода. По сути, такиемодули представляют собой полнофункциональные компьютеры (см.
рис.3.2). Доступ кбанку ОП из данного модуля имеют только процессоры (ЦП) из этого же модуля. Модулисоединяются специальными коммуникационными каналами. Пользователь можетопределить логический номер процессора, к которому он подключен, и организовать обменсообщениями с другими процессорами. Используются два варианта работы операционнойсистемы (ОС) на машинах MPP-архитектуры. В одном полноценная операционная система(ОС) работает только на управляющей машине (front-end), на каждом отдельном модулефункционирует сильно урезанный вариант ОС, обеспечивающий работу толькорасположенной в нем ветви параллельного приложения.