Реферат: К. т н. А. К. Ким, к т. н. В. Ю. Волконский, к т. н. Ф. А. Груздов, М. С
К.т.н. А.К. Ким, к.т.н. В.Ю. Волконский, к.т.н. Ф.А. Груздов, М.С. Михайлов,
Ю.Н. Парахин, д.т.н., проф. Ю.Х. Сахин, д.т.н., проф. С.В. Семенихин, М.В. Слесарев, к.т.н. В.М. Фельдман
МИКРОПРОЦЕССОРНЫЕ ВЫЧИСЛИТЕЛЬНЫЕ КОМПЛЕКСЫ
С АРХИТЕКТУРОЙ «ЭЛЬБРУС» И ИХ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Рассматриваются архитектурные особенности, принципы построения и технические характеристики российских вычислительных комплексов с архитектурой «Эльбрус». Для повышения производительности используется явный параллелизм операций, векторный параллелизм операций, параллелизм потоков управления, параллелизм задач. Явный параллелизм операций в сочетании со специальной аппаратной поддержкой применяется для обеспечения эффективной совместимости с архитектурной платформой Intel x86 (IA-32) на базе невидимой пользователю системы динамической двоичной трансляции. Наконец, параллелизм используется в аппаратуре для обеспечения защищенного исполнения программ, написанных на любых языках программирования, в том числе C и C++. Эти особенности поддерживаются средствами системного программного обеспечения – оптимизирующими компиляторами и операционной системой. Все это позволяет создавать универсальные вычислительные комплексы повышенной надежности и широкого диапазона применения, начиная от настольных компьютеров и встраиваемых ЭВМ и заканчивая мощными серверами и суперкомпьютерами.
Введение
Параллелизм, используемый в микропроцессорных архитектурах на протяжении более 20 последних лет, наряду с ростом тактовых частот, являлся одним их важнейших факторов повышения производительности вычислительных систем. В последнее время в связи с замедлением роста тактовых частот параллелизм становится определяющим фактором [1], поскольку оборудование в микропроцессорах продолжает удваиваться каждые 18 месяцев в точном соответствии с предсказаниями Гордона Мура.
Для повышения производительности используется параллелизм на разных уровнях: параллелизм операций, векторный параллелизм, параллелизм потоков управления, параллелизм задач. Все эти виды параллелизма применяются в современных микропроцессорных вычислительных системах. Параллелизм операций поддерживается в суперскалярных архитектурах и в архитектурах с явным параллелизмом операций. Векторный параллелизм поддерживается большинством современных микропроцессорных систем за счет введения специальных операций. Параллелизм потоков управления поддерживается в многоядерных микропроцессорных архитектурах и в многопроцессорных вычислительных комплексах, работающих на общей памяти. Параллелизм задач, взаимодействующих через обмен сообщениями, поддерживается в кластерных системах и многомашинных комплексах. Все эти виды параллелизма присутствуют в вычислительных комплексах (ВК) на базе универсальных микропроцессоров с архитектурой «Эльбрус», особенности которых рассматриваются далее.
Однако, наряду с упомянутыми выше методами, используемыми для повышения производительности, в созданной в России архитектуре микропроцессора «Эльбрус» параллелизм используется для решения еще двух очень важных задач. Во-первых, с его помощью обеспечивается полная и эффективная совместимость с распространенной архитектурной платформой Intel x86 (IA-32), хотя реализуется это с помощью технологии двоичной трансляции на базе полностью отличной от IA-32 архитектуры микропроцессора «Эльбрус» с явным параллелизмом команд. Во-вторых, он используется для создания аппаратных средств поддержки защищенного исполнения программ, реализованных на самых распространенных современных языках, таких как C и C++, а не только Java или C#, в которые введены специальные ограничения, чтобы сделать эти языки более надежными.
Микропроцессор «Эльбрус» используется в составе универсального вычислительного комплекса (ВК) «Эльбрус-3М». Диапазон возможного применения комплексов этой архитектурной линии достаточно широк за счет полной совместимости с архитектурой IA-32 и высокой логической скорости процессорного ядра, позволяющего исполнять до 23 операций за один машинный такт. Новые многоядерные системы на кристалле с архитектурой «Эльбрус» могут с успехом применяться для создания мощных серверов и суперкомпьютеров.
Особенности архитектуры «Эльбрус» отводят важную роль системному программному обеспечению – компиляторам и операционной системе. Они поддерживают все виды параллелизма, обеспечивают эффективную совместимость с IA-32 и защищенное исполнение программ.
^ 1. Особенности архитектуры микропроцессора «Эльбрус»
и вычислительного комплекса «Эльбрус-3М»
Наиболее полное применение идеи параллелизма нашли при реализации оригинальной микропроцессорной архитектуры «Эльбрус» и ВК «Эльбрус-3М», использующего этот микропроцессор. Параллелизм операций и возможность параллельной работы с упакованными данными используются для достижения высокой производительности микропроцессора. Эти же возможности в сочетании с аппаратными средствами поддержки технологии невидимой пользователю системой двоичной трансляции кодов IA-32 в коды микропроцессора «Эльбрус» обеспечивают эффективную совместимость с этой самой распространенной в мире архитектурной платформой на произвольных кодах, включая операционные системы. Параллельный контроль правильности выполнения операций обращения в память в сочетании с защитой указателей с помощью аппаратных тегов обеспечивает защищенную реализацию таких распространенных языков программирования как C и C++. Наконец, двухпроцессорный ВК «Эльбрус-3М» обеспечивает эффективное распараллеливание на уровне потоков управления на общей памяти.
^ 1.1. Явный параллелизм операций
Для достижения высокой производительности в основу архитектурной линии микропроцессора «Эльбрус» положен параллелизм, образующийся при выполнении отдельных операций – арифметико-логических, обращений в память, передачи управления. Параллелизм операций – это наиболее доступный вид параллелизма, который может быть извлечен из последовательной программы, написанный на традиционных языках высокого уровня, таких как C, C++ или Fortran. Автоматическое (программное или программно-аппаратное) извлечение других видов параллелизма – разбиение программы на слабо взаимодействующие потоки управления, работающие на общей памяти, или на еще более слабо взаимодействующие подзадачи, работающие на распределенной памяти, является значительно более сложной проблемой, которая до сих пор не нашла практического решения для многих классов задач.
Наиболее точно параллелизм операций выражается с помощью потоковой модели вычислений. В ней последовательность выполнения определяется только на основе явных зависимостей (зависимостей по данным) между операциями. Операции, не связанные между собой зависимостями, могут выполняться параллельно. Если исключить ложные зависимости между операциями, к которым относятся зависимости, возникающие из-за переиспользования памяти под результаты операций, то оставшиеся зависимости образуют параллельный поток зависимых по данным операций. Параллелизм операций позволяет существенно повысить производительность строго последовательных программ.
В суперскалярной процессорной архитектуре реализуется динамическая потоковая модель, в которой для нескольких десятков последовательных операций аппаратно исследуются зависимости между ними, находятся независимые операции, устраняются ложные зависимости путем переименования регистров для результатов операций и осуществляется планирование параллельного исполнения операций на параллельных устройствах по динамически вычисляемым условиям готовности.
В архитектурах с явным параллелизмом операций зависимости между операциями определяются при компиляции программ. При этом запуск на исполнение независимых операций также планируется компилятором, для чего в архитектуре процессора предусматривается возможность явно указать, что какие-то операции должны запускаться одновременно, в одном машинном такте.
Потенциал параллелизма операций, определяемый по трассам выполненных команд, достигает 6 – 8 операций на целочисленных, наиболее трудных с точки зрения распараллеливания программах [2, 3]. Эти оценки получены при условии, когда исключены команды управления, но сохранена основная структура программы в виде последовательности выполнения циклов и вызовов процедур. В этих же работах показано, что при отказе от переиспользования памяти и снятии ограничений на поддержание последовательности выполнения циклов и процедур, параллелизм достигает 70 – 100 операций на тех же целочисленных задачах. Это означает, что в большинстве программ заложен значительный потенциал параллелизма на уровне потоков управления, который может быть использован на многопроцессорных и многоядерных микропроцессорных системах.
Архитектура универсального 64-разрядного микропроцессора «Эльбрус» основана на явном представлении параллелизма операций с использованием для этого широкого командного слова [4 – 7]. В архитектурах с явным параллелизмом операций необходимо указывать какие операции должны запускаться одновременно. В микропроцессоре «Эльбрус» для этого используется широкое командное слово, размер которого может достигать 64 байтов.
Структура микропроцессора «Эльбрус» представлена на рис. 1. Шесть арифметико-логических устройств разделены между двумя группами, называемыми кластерами. Каждый кластер использует собственную копию регистрового файла и Кэш 1-го уровня. При этом содержимое обеих копий совпадает. Устройство операций над однобитовыми предикатами позволяет существенно сократить число операций управления и, тем самым, повысить параллелизм. Устройство предварительной асинхронной подкачки данных из памяти в специальный буфер позволяет скрыть задержки при использовании данных из оперативной памяти. Арифметические операции типа MMX и SSE в архитектуре IA-32 над упакованными данными, размещаемыми внутри 64-разрядного регистра, позволяют увеличить параллелизм для задач, работающих с данными меньшей разрядности. Дополнительным источником параллелизма является возможность запуска пары зависимых операций на одном арифметико-логическом устройстве с сохранением в регистре только результата выполнения пары. Эта же возможность, реализованная для предикатов, позволяет выполнить цепочку из двух зависимых операций за один такт, что сокращает критические пути для программ со сложной логикой управления.
Распараллеливание и планирование операций выполняется оптимизирующим компилятором [8], возможности которого более подробно рассмотрены в 2.1. Следует отметить, что этот подход позволяет в двух статистически значимых случаях достигать предельных результатов производительности для заданных объема оборудования и времен выполнения операций. В случае ограниченного параллелизма, присущего классу целочисленных задач со сложной логикой управления, время выполнения определяется критическим путем, т.е. наиболее длинной цепочкой зависимых операций. Если операции спланированы без превышения критического пути, этот результат является не улучшаемым на данной машине. В случае интенсивной обработки данных в циклах параллелизм, как правило, превышает имеющиеся аппаратные ресурсы, но при полной загрузке наиболее критического устройства исполнения достигается не улучшаемый результат для заданного парка устройств. Оба указанных случая практически достижимы при работе оптимизирующего компилятора для ВК «Эльбрус-3М», базирующегося на микропроцессоре «Эльбрус».
Рис. 1
Структурная схема микропроцессора «Эльбрус»
(устройство операций над предикатами (PLU); арифметико-логические устройства (ALU); устройство управления (CU); устройства ускоряющих передач данных (bypass); устройство асинхронной подкачки данных из памяти (AAU); предикатный файл (PF); Кэш данных 1-го уровня (D$L1); регистровый файл (RF); устройство преобразования виртуальных адресов в физические, включая Кэш адресов (MMU/TLB); Кэш команд (IB); Кэш данных
2-го уровня (D$L2); буфер для асинхронной подкачки данных из памяти (APB); устройство организации доступа в память (MAU))
Основные технические характеристики микропроцессора «Эльбрус» представлены в табл. 1. Следует отметить достаточно хорошую сбалансированность микропроцессора при взаимодействии с памятью. Хотя большинство операций выполняется непосредственно на регистрах, темп доступа данных из памяти в пересчете на одну 64-разрядную операцию составляет 7 байтов – для внутрипроцессорных Кэш-памятей и 2 байта – для оперативной памяти. Пиковые характеристики производительности микропроцессора – 23 операции за такт (и все прочие) демонстрируются на конкретных примерах, написанных на языке C и оттранслированных оптимизирующим компилятором. Возможности векторизации, реализованные в компиляторе, позволяют использовать аппаратные команды над упакованными данными и, тем самым, повышать производительность программ, использующих 32-, 16- и 8-разрядные данные.
Таблица 1
Основные технические характеристики микропроцессора «Эльбрус»
Характеристики
Значения
Технологический процесс КМОП, мкм
0,13
Тактовая частота, МГц
300
Количество транзисторов, млн.
78
Количество слоев металла
8
Количество выводов FC BGA (логических)
900 (470)
Размер кристалла, мм2
189
Рассеиваемая мощность, Вт
6
Кэш команд, Кбайт
64
Кэш данных 1-го уровня, Кбайт
64
Кэш 2-го уровня, Кбайт
256
Темп обмена с Кэш-памятью, Гбайт/с
16,8
Темп обмена с оперативной памятью, Гбайт/с
4,8
Пиковая производительность, Гоп/с | Гвещоп/с:
- 64-разрядные операции
- 32-раразрядные операции
- 16-разрядные операции
- 8-разрядные операции
6,9 | 2.4
9,5 | 4,8
24,4
45,2
ВК «Эльбрус-3М» представляет собой двухпроцессорный вычислительный комплекс, работающий на общей памяти с симметричным доступом. Основные технические характеристики ВК «Эльбрус-3М» представлены в табл. 2.
Таблица 2
Основные технические характеристики вычислительного комплекса «Эльбрус-3М1»
Характеристики
Значения
Тип микропроцессора
Эльбрус
Количество процессоров
2
Емкость оперативной памяти, Гбайт
до 32
Пропускная способность шин связи с памятью Гбайт/с:
- со стороны процессоров
- со стороны контроллеров памяти
9,6
11,2
Периферийные шины и каналы, слотов×Мбайт/с:
- PCI
- RDMA
- IDE
- USB 1.1
4×133
1×500
3×66
2×1,5
Встроенная внешняя память, Гбайт
160
Пиковая производительность, Гоп/с | Гвещоп/с:
- 64-разрядные операции
- 32-разрядные операции
- 16-разрядные операции
- 8-разрядные операции
13,3 | 4,8
19,1 | 9,6
24,4
45,2
Работа над реализацией архитектуры «Эльбрус» завершилась в ноябре 2007 года успешными государственными испытаниями микропроцессора «Эльбрус» и двухпроцессорного вычислительного комплекса «Эльбрус-3М» на его основе. ВК «Эльбрус-3М» работал под управлением перенесенной на него операционной системы Linux, а также ОС МСВС. В ходе испытаний была показана возможность эффективного исполнения на ВК «Эльбрус-3М» программных систем заказчика, разработанных различными организациями. При исполнении этих задач на ВК «Эльбрус-3М» с частотой 300 МГц было получено ускорение в среднем в 1,44 раза относительно Pentium 4 с частотой 1,4 ГГц (рис. 2).
Рис. 2
Сравнительная производительность ВК «Эльбрус-3М1» с микропроцессором «Эльбрус», 300 МГц и Pentium 4, 1400 МГц на задачах пользователей
Архитектурный уровень разработки характеризуется показателем производительности 16 Гвещоп/с∙ГГц, отношение производительности к мощности составляет
400 Мвещоп/с∙Вт. Такой высокий уровень параллелизма и производительности на рассеиваемую мощность стал возможен благодаря логической организации микропроцессора, что явилось прямым следствием исключения логики динамического распараллеливания операций из микропроцессора «Эльбрус» с передачей этих функций оптимизирующему компилятору.
^ 1.2. Двоичная совместимость с архитектурой IA-32
ВК «Эльбрус-3М» обеспечивает полную двоичную совместимость с архитектурой IA-32 на базе технологии скрытой (невидимой пользователю) динамической двоичной трансляции со специальной аппаратной поддержкой [8, 9]. Наряду с возможностью запуска любых программ под управлением любых операционных систем в кодах IA-32 предусмотрен запуск приложений в кодах IA-32 под управлением ОС Эльбрус-Linux. Это позволяет одновременно использовать ВК «Эльбрус-3М» для запуска программ в кодах IA-32 и в кодах архитектуры «Эльбрус».
Упрощенная схема работы динамической системы двоичной трансляции ВК «Эльбрус-3М» представлена на рис. 3. Основными ее компонентами являются:
интерпретатор кодов IA-32, который работает при первом исполнении, добавляя средства мониторинга;
двоичный транслятор, перекодирующий коды IA-32 в коды микропроцессора «Эльбрус», используя для этого несколько уровней оптимизации;
база кодов, обеспечивающая хранение и накопление оптимизированных кодов;
система динамической поддержки, которая обслуживает весь этот процесс.
Для ускорения исполнения оптимизирующая трансляция запускается на свободном процессоре, а хорошо оптимизированные регионы сохраняются в базе кодов и при повторном исполнении той же программы используются без потери времени на их перекомпиляцию и оптимизацию.
Рис. 3
Схема работы динамической, невидимой пользователю, двоичной трансляции
Современные суперскалярные микропроцессоры от Intel и AMD аппаратно преобразуют сложные команды переменной длины в более простые микрооперации. Затем анализируются зависимости, назначаются регистры и планируется выполнение микроопераций, а для некоторых реализаций (Pentium 4) формируется трасса микроопераций, которая помещается в специальную скрытую память (кэш трасс) для повторного использования. Такую реализацию вполне можно было бы назвать аппаратным двоичным транслятором.
При использовании программно-аппаратной двоичной трансляции перекодировка двоичных кодов исходной архитектуры в функционально-эквивалентные коды целевой архитектуры, анализ зависимостей, набор регионов планирования, назначение регистров и планирование операций исключаются из аппаратуры. Но в нее встраивается важный набор средств, обеспечивающих эффективность и надежность системы двоичной трансляции.
Ключевыми аппаратными средствами, обеспечивающими в ВК «Эльбрус-3М» эффективную и надежно работающую технологию двоичной трансляции, являются:
полная изоляция всех компонентов двоично-транслирующей системы от исполняемой программы и ее данных;
эффективное исполнение важнейших операций исходной платформы с соблюдением точной их семантики, в частности, операций обращения в память, для которых необходимо сохранение принятого порядка исполнения;
воспроизведение точного состояния контекста исходной платформы (регистров и памяти) в момент прерывания исполнения (как синхронного, так и асинхронного), гарантирующее отсутствие потерь прерываний;
полный контроль над возможными перемещениями и модификацией кодов исходной платформы при исполнении программы;
поддержка специфических для двоичной трансляции методов оптимизации.
Двоичная трансляция является высокопроизводительным и надежным средством обеспечения переносимости двоичных кодов между вычислительными машинами различных архитектур [10, 11]. Эффективность системы двоичной трансляции ВК «Эльбрус-3М» определяется наличием существенно большего числа устройств исполнения операций по сравнению с суперскалярными архитектурами (по крайней мере, в 2 раза), что является прямым следствием исключения из аппаратуры логики распараллеливания операций и передачи этих функций двоичному транслятору. Программные алгоритмы оптимизации обеспечивают просмотр значительно более крупных регионов кодов по сравнению с «окном» распараллеливания операций в суперскалярных архитектурах и позволяют задействовать всю номенклатуру исполняющих устройств. За счет этого на ВК «Эльбрус-3М» удается достигать более высокой логической скорости (время выполнения при одинаковых тактовых частотах) при выполнении программ в кодах IA-32, что было продемонстрировано при проведении Государственных испытаний. Так, например, ни на одной из 10 задач пакета SPECfp95 (рис. 4) производительность ВК «Эльбрус-3М» (300 МГц) не опускается ниже производительности Pentium II (300 МГц), а в среднем превосходит ее в 1,75 раза. При этом средняя производительность ВК «Эльбрус-3М» превышает в 1,17 раза производительность Pentium III (450 МГц). На более широком классе задач производительность ВК «Эльбрус-3М» при исполнении кодов IA-32 сравнима с производительностью процессоров типов Pentium II, Pentium III и Pentium 4, работающих в диапазоне частот 300 – 1500 МГц.
Рис. 4
Логическая скорость ВК «Эльбрус-3М1» при выполнении программ в кодах IA-32. Сравнительная производительность на пакете задач SPECint95
Система двоичной трансляции обладает высокой надежностью. Она обеспечила успешное исполнение на ВК «Эльбрус-3М» более 20 операционных систем в кодах IA-32, в т.ч. MS DOS, несколько версий Windows (95, NT, 2000, XP и др.), Linux, FreeBSD, QNX. Под управлением этих операционных систем успешно и эффективно работают свыше 1000 популярных приложений, в т.ч. интерактивные компьютерные игры, программы из состава пакета MS Office (MS Word, MS Excel, MS PowerPoint и др.), видео ролики, программы компрессии-декомпрессии данных, драйверы всех внешних устройств.
^ 1.3. Поддержка защищенного исполнения программ
Основная проблема ненадежности при реализации языков программирования типа C и C++ на современных вычислительных системах заключается в том, что в этих языках активно используются указатели в качестве ссылок на объекты обработки, а сами указатели представляют собой адреса, выраженные обычными числовыми значениями. При этом в данных языках над адресами разрешена адресная арифметика, а также преобразование целых чисел в адреса. Все это приводит к появлению указателей, которые нарушают языковые границы объектов, к образованию «зависших» ссылок на уничтоженные объекты, к возможности доступа в приватные области данных.
Попытка использовать вместо целых чисел в качестве указателя более сложные структуры данных, которые наряду с текущей позицией, содержали бы информацию об объекте, внутри которого действителен указатель, позволили бы решить часть проблем ненадежности. Но при этом возникают проблемы совместимости и существенного снижения производительности. Проблема совместимости связана с тем, что многие программисты подразумевают под указателем целое число и, зачастую, активно пользуются преобразованиями из адреса в целое и обратно. Проблема эффективности распадается на две составляющие: во-первых, структура данных, описывающая объект, требует существенно больше памяти, чем просто адрес, а, во-вторых, проверка попадания указателя в границы объекта требует дополнительных проверок при каждом обращении в память. И даже такое решение не позволяет избавиться от всех проблем ненадежности, поскольку структура, описывающая указатель, может быть сконструирована программистом, что делает программу практически столь же уязвимой, как и при использовании целого числа в качестве указателя.
В архитектуре микропроцессора «Эльбрус» реализовано решение этой проблемы с использованием аппаратных тегов для выделения всех указателей [12, 13]. Указатель (дескриптор) представляет собой структуру данных, описывающую объект и текущее положение указателя внутри него, а для типизированных объектов – еще и информацию о типе и правах доступа к полям (рис. 5). Эта структура данных защищена аппаратными тегами (дополнительными битами, которыми снабжается каждое слово в памяти машины). Таким образом, аппаратура отличает любое числовое значение от указателя и запрещает использование чисел в качестве адресов для обращения в память. Указатели не могут быть «сконструированы» программистом.
Рис. 5
Тегированные данные. Дескрипторы массивов и объектов, числа и неинициализированные данные легко различимы в памяти по своим тегам. Смещение в дескрипторе массива соответствует позиции указателя, области public и private данных в объекте разделены и защищены размерами, а поле t содержит номер класса объекта
Дескрипторы формируются операционной системой при произвольном заказе памяти или специальными аппаратными командами при выделении памяти в стеке процедур. Предусмотрены специальные аппаратные команды, которые позволяют сформировать указатель на подобъект из указателя на объект. Аппаратно-программными средствами также контролируются попытки обращения по «зависшим» ссылкам на уничтоженные объекты, а разнообразные типы указателей, в т.ч. указатели на типизированные объекты языка C++, обеспечивают контроль несанкционированного доступа в приватные данные.
Эффективность данного решения обеспечивается параллельными проверками, которые реализованы в аппаратуре. Аппаратура проверяет не только то, что обращение за данными осуществляется через указатель (это делается с помощью контроля тегов), но и что указатель находится в заданных границах объекта, и что доступ выполняется в разрешенные области. Все эти проверки выполняются параллельно с выполнением обращения за данными в память и никак его не замедляют.
Эти свойства архитектуры «Эльбрус» были в значительной мере проработаны уже в проекте многопроцессорного вычислительного комплекса «Эльбрус-2» [14]. При исполнении программ с языков С и С++, оттранслированных с использованием данной аппаратной поддержки, фиксируются любые нарушения защиты памяти, воспринимаемые в обычных системах как «неопределенное поведение». При этом опасные и сложные ошибки, отнимающие заметное время в традиционных системах даже у опытных программистов, хорошо локализуются. Благодаря режиму защищенного исполнения, на Государственных испытаниях ВК «Эльбрус-3М» была продемонстрирована высокая эффективность в части обнаружения ошибок (табл. 3), в т.ч. при переносе и исполнении задач пользователей, международного пакета SPEC95 и международного пакета SAMATE, который содержит собранные по всему миру ошибочные фрагменты широко распространенных программ. Основные типы обнаруженных ошибок – нарушение границ объектов (buffer overflow), использование неинициализированных данных, использование опасных конструкций языка или опасных отклонений от стандарта языка.
Таблица 3
Эффективность поддержки защищенного исполнения программ
^ Категории задач
Всего задач
Задач с найденными ошибками
Задачи пользователей
7
4
Пакет SPECint95
8
7
Пакет негативных тестов SAMATE на нарушение защиты
888
874
Таким образом обеспечиваются условия для создания надежного программного обеспечения при выполнении масштабных проектов с участием больших коллективов разработчиков и сжатыми сроками исполнения.
^ 2. Программное обеспечение ВК «Эльбрус-3М»
Программное обеспечение, в первую очередь оптимизирующие компиляторы и операционная система, играет важнейшую роль в производительности ВК «Эльбрус-3М», обеспечивая распараллеливание программ на всех уровнях параллелизма. Поскольку работа технологии двоичной трансляции была вкратце описана в 1.2, здесь будут рассмотрены оптимизирующий компилятор и операционная система, в основном, с точки зрения использования особенностей архитектуры «Эльбрус».
^ 2.1. Оптимизирующий компилятор
Оптимизирующий компилятор для ВК «Эльбрус-3М» поддерживает несколько входных языков: C, C++, Fortran-77, а также Gnu-расширения языков C и C++. Для них он может генерировать один из трех различных вариантов результирующего кода: для работы с 32-разрядными адресами, для работы с 64-разрядными адресами и для защищенного исполнения программ. Этот подход, с одной стороны, обеспечивает легкость переноса программ с 32- и 64-разрядных архитектурных платформ, а с другой – обеспечивает при желании пользователя возможность защищенного исполнения его программы. Основные компоненты и схема работы оптимизирующего компилятора для ВК «Эльбрус-3М» представлены на рис. 6.
Рис. 6
Основные компоненты и схема работы оптимизирующего компилятора
для ВК «Эльбрус-3М»
Важнейшим компонентом в компиляторе является блок анализа, оптимизации и генерации кода, основные функции которого представлены на рис. 6. В нем выполняется анализ промежуточного представления программы, ее оптимизация, а также распараллеливание операций компилируемой программы (более 150 различных алгоритмов).
^ Методы анализа программ. Анализ программы необходим для вычисления при компиляции некоторых ее свойств, которые затем используются для оптимизации и распараллеливания операций.
Основная задача, которую решают методы статического анализа программ в оптимизирующих компиляторах, – это определение отношения зависимости по данным и управлению между различными группами операций и отдельными операциями программы. Для обнаружения параллелизма в программах в компиляторе используются самые современные методы анализа зависимостей, многие из которых были значительно усовершенствованы, а некоторые – специально разработаны в компиляторе для архитектуры «Эльбрус».
Анализ управления выполняется на межпроцедурном и процедурном уровнях. На межпроцедурном уровне анализируется граф вызовов процедур, в нем находятся рекурсивные циклы, которые затем могут преобразовываться в обычные циклы. Основной задачей анализа управления на процедурном уровне является обнаружение циклов и ациклических регионов, в которых, в основном, работает программа. Именно эти регионы затем оптимизируются наиболее интенсивно.
Анализ потоков данных также выполняется на межпроцедурном и процедурном уровнях. На межпроцедурном уровне вычисляются свойства параметров и результатов функций, такие как константное значение или ссылка на конкретную переменную или функцию для указателей на переменные и функции. Эта информация затем используется в по-процедурном анализе для уточнения зависимостей между операциями или в оптимизациях, например, для клонирования процедур с последующей их непосредственной подстановкой. Анализ потока данных внутри процедуры, в основном, также анализирует зависимости между операциями, а кроме того, вычисляет свойства переменных, такие как константное значение, общие подвыражения, а для циклов – индуктивные переменные и возможность совпадения индексов при обращении к элементам массивов на разных итерациях. Все эти свойства также затем используются в оптимизациях и для распараллеливания операций.
В тех случаях, когда невозможно точно определить отношение зависимости между операциями, при компиляции программы используются достаточно мощные средства динамического анализа как программные, так и аппаратные, которые считаются оптимизациями.
^ Важнейшие оптимизации. Важнейшими оптимизациями, наряду с распараллеливанием операций, являются универсальные преобразования, устраняющие ненужные вычисления, а также оптимизации, сокращающие число блокировок при обращении за данными и кодами из-за наличия иерархии памяти.
Методы устранения избыточных вычислений включают свертку константных выражений, сбор общих подвыражений, удаление ненужных копирований данных, удаление лишних обращений в память за считыванием и записью данных, вынос инвариантов из циклов, упрощение индексных выражений, вычисление и сокращение индуктивных переменных, удаление «мертвого» (ненужного) кода и многое другое. Эти оптимизации, как правило, применяются во всех оптимизирующих компиляторах, но в компиляторе для ВК «Эльбрус-3М» они существенно развиты в части использования предикатов для управления операциями.
Оптимизации управления, увеличивающие параллелизм, – это непосредственная подстановка функции в точку вызова, которой может предшествовать клонирование (создание копии) функции, если она вызывалась через указатель, раскрутка цикла, конвейеризация цикла, формирование гиперблоков с преобразованием операций передачи управления в предикаты и многое другое.
К важнейшим аппаратным средствам борьбы с зависимостями, реализованным в микропроцессоре «Эльбрус», относятся предикатное и спекулятивное исполнение операций, аппаратные средства конвейеризации циклов, аппаратные средства сравнения адресов при изменении порядка обращений в память.
^ Предикатное исполнение операций позволяет компилятору планировать одновременно несколько путей управления в программе. Такие пути могут исполняться одновременно и бесконфликтно, поскольку каждая операция стоит под предикатом, в точности повторяющим условие, при котором операция была бы выполнена в исходной программе. Нулевое значение предиката отменяет выполнение операции, обеспечивая правильную семантику выполнения программы. Применение предикатных операций позволяет избавиться от многих локальных переходов в пределах региона планирования операций. Спекулятивное исполнение операций избавляет операции от предикатных зависимостей и позволяет выполнять их раньше, чем становится известно значение предиката. Аппаратные средства конвейеризации циклов позволяют исполнять одновременно операции с разных итераций цикла, а средства базирования регистров позволяют полностью избавиться от зависимостей, вызванных переиспользованием регистров. Аппаратные средства сравнения адресов при изменении порядка обращений в память позволяют компилятору выполнять операции чтения раньше операций записи, сокращая тем самым критические пути и ускоряя исполнение. В случае обнаружения реальной зависимости между переставленными операциями аппаратура вырабатывает признак, позволяющий передать управление на компенсирующий код, заранее подготовленный компилятором для восстановления правильного исходного порядка исполнения операций, после выполнения которого восстанавливается корректное исполнение программы.
Можно выделить три основных стратегии сокращения потерь производительности при обращении в память, которые составляют 20 – 50%, а на отдельных задачах – до 80%: сокращение числа обращений, заблаговременная подкачка данных и кода, оптимальное размещение данных.
Наряду с оптимизацией удаления повторных обращений в память в пределах региона оптимизации, число обращений в память сокращается за счет объединения нескольких обращений в одно при обработке расположенных смежно в памяти данных, совокупный размер которых не превышает размер аппаратного регистра (64 разряда). Такая оптимизация, дополненная операциями над упакованными значениями (операции типа MMX/SSE), позволяет существенно поднять производительность широкого класса задач, включая универсальные приложения.
Предварительная подкачка данных в буферные памяти или в Кэш является эффективным средством оптимизации обращений в память. Наряду с предварительной подкачкой данных в Кэш компилятором используются аппаратные средства предварительной асинхронной подкачки элементов массивов в специальный буфер. Эти средства полностью снимают проблему приостановки вычислений ввиду неизвестности времени доступа в память, поскольку асинхронная подкачка обеспечивает оптимальную адаптацию к произвольному времени доступа. Такой подход дает существенный прирост производительности, особенно на задачах с вещественной арифметикой, в которых доминируют циклы.
Еще одной стратегией уменьшения потерь от обращений в память является оптимальное размещение данных. Линейная память, использ
еще рефераты
Еще работы по разное
Реферат по разное
Статистические данные о выполнении требований гос впо 9 Показатели выполнения требований гос в целом по Российской Федерации по дисциплине «Уголовное право» 9
18 Сентября 2013
Реферат по разное
Програма економічного І соціального розвитку м. Миколаєва на 2009 рік
18 Сентября 2013
Реферат по разное
Правила землепользования и застройки дмитровского сельского поселения селижаровского районА
18 Сентября 2013
Реферат по разное
Управление промышленной компанией на основе формирования социальных стратегий: теория, методология, технологии реализации
18 Сентября 2013