'

Компиляторы Интел для высокопроизводительных вычислений

Понравилась презентация – покажи это...





Слайд 0

Компиляторы Интел для высокопроизводительных вычислений 2009


Слайд 1

Упрощенная модель процессора Оперативная память (RAM) Системная шина Вычислительное устройство (ALU) Управляющее устройство (CU) Устройство взаимодействия с внешней памятью Внешняя память Шина ввода-вывода Процессор Команды Данные Регистры


Слайд 2

Упрощенная модель процессора Со времен изобретения микросхемы в мире было разработано большое число разных процессоров, но в любом процессоре можно выделить: устройство управления (Control Unit, CU) арифметико-логическое устройство (Arithmetic and Logic Unit,ALU) системные регистры Чтобы превратить все это в вычислительную систему необходимо как минимум добавить системную шину (Front Side Bus, FSB) память периферийные устройства Устройство управления (CU): проводит дешифрацию инструкций, поступающих из памяти компьютера. управляет ALU. осуществляет пересылку данных между регистрами ЦП, памятью, периферийными устройствами. и т.д. Арифметико-логическое устройство состоит из различных микросхем, позволяющих производить арифметические и логические операции над системными регистрами. Системные регистры – это определенный участок памяти внутри ЦП, используемый для промежуточного хранения информации, обрабатываемой процессором. Системная шина используется для пересылки данных между ЦП и памятью, а также между ЦП и периферийными устройствами. В современных компьютерах ЦП через шину связывается с системным контроллером ПК, а он уже управляет периферийными устройствами.


Слайд 3

Высокая производительность МП Высокая производительность МП –один из ключевых факторов в конкурентной борьбе производителей процессоров. Интуитивно понятно, что производительность процессора напрямую связана с количеством работы, вычислений, которые он может выполнить за единицу времени. Очень условно: Производительность = Кол-во инструкций / Время Мы будем беседовать о производительности на базе IA32 и IA32e архитектур. (IA32 with EM64T). Факторы влияющие на производительность процессора: Тактовая частота процессора Объем адресуемой памяти и скорость доступа к внешней памяти Скорость выполнения инструкций и полнота базового набора инструкций Использование внутренней памяти, распределение регистров Уровень конвейеризации Качество предсказания переходов Качество упреждающей выборки Суперскалярность Параллелизация и многоядерность


Слайд 4

Тактовая частота: Поскольку процессор состоит из разных микросхем, и каждая работает разное время, то в процессоре существует таймер, который отвечает за синхронизацию работы микросхем, посылая периодический синхроимпульс. Его частота и называется тактовой частотой процессора. Объем адресуемой памяти и скорость доступа к памяти: 8086 мог одновременно работать всего с 4 сегментами по 64 КБ каждый и всего мог адресовать 1МБ памяти. 80286 – добавились новые системные регистры и новый режим работы с памятью в котором процессор мог адресовать 16МБ памяти. 80386 – первый 32-битный процессор, позволяет адресовать 4ГБ памяти технология EM64T (Extended Memory 64 Technology) – сняла и это ограничение.


Слайд 5

Скорость выполнения инструкций и полнота базового набора инструкций: (качество ALU ?) Производительность зависит от того, насколько качественно реализованы инструкции, насколько полно базовый набор инструкций покрывает все возможные задачи. CISC,RISC (complex, reduced instruction set computing) Современные Интел процессоры представляют собой гибрид CISC и RISC процессоров, перед исполнением преобразуют CISC инструкции в более простой набор RISC инструкций. В Pentium III новая технология SSE (Streaming SIMD Extensions), которая добавила в МП 8 128 битных регистра (XMM0-XMM7) и 70 новых инструкций в том числе для работы с вещественными числами. SSE2,SSE3,SSEE3,SSE4 – последующие расширения этой идеи.


Слайд 6

Использование внутренней памяти, распределение регистров: Скорость доступа к внешней памяти значительно ниже скорости вычислений. Cоздание на процессоре кэш-памяти. Блоки оперативной памяти отображаются на быстрый кэш. «Попадание» и «промах» (cash miss). Различные виды кэш-памяти. полностью ассоциативная кэш-память (каждый блок может отображаться в любое место кэша) память с прямым отображением (каждый блок может отображаться в одно место) различные гибридные варианты (секторная память, память с множественно-ассоциативным доступом) Множественно-ассоциативный доступ – по младшим разрядам определяется строка кэша, где может отображаться данная память, но в этой строке может находиться несколько слов основной памяти, выбор из которых проводится на ассоциативной основе. Работа с регистрами: Технология EM64T – добавлены дополнительные системные регистры. Регистры – самая быстрая память процессора. Чем больше регистров, тем больше временных данных может быть размещено для вычислений в ALU.


Слайд 7

Конвейер Instruction fetch Register fetch Instruction decode Execution Data fetch Write back instr. 1 - - - - - instr. 2 instr. 1 - - - - instr. 3 instr. 1 - - - instr. 4 instr. 1 - - instr. 5 instr. 1 - instr. 1 instr. 2 instr. 2 instr. 2 instr. 2 instr. 2 instr. 3 instr. 3 instr. 3 instr. 3 instr. 4 instr. 4 instr. 4 instr. 5 instr. 5 instr. 6 instr. 6 instr. 7 tick 0 1 2 3 4 5 6 Качество работы командного устройства (CU)


Слайд 8

Качество конвейеризации, уровень параллелизма инструкций Конвейеризация предполагает, что последовательные инструкции будут перекрываться при выполнении. Выполнение типичной команды можно разделить на следующие этапы: выборка команды – IF; декодирование команды / выборка операндов из регистров - ID; выполнение операции / вычисление эффективного адреса памяти - EX; обращение к памяти - MEM; запоминание результата - WB. Конвейеризация улучшает пропускную способность процессора, но если инструкции зависят от результата предыдущих инструкций, то возникают задержки. Т.е. польза от конвейеризации определяется уровнем параллелизма инструкций.


Слайд 9

Качество предсказания переходов: Инструкции могут быть зависимыми по данным и по управляющей логике программы. (Data dependence and control flow dependence). Эффективность конвейерных механизмов ограничивается различными условными переходами внутри программы. Механизм предсказания переходов (branch prediction). МП выбирает один из возможных направлений потока управления и продолжает выбирать инструкции и нагружать конвейеры МП работой. Ошибка предсказания (branch misprediction) вызывает большую задержку при выполнении программы, поскольку вызывают необходимость заново заполнить конвейеры МП. Существует также механизм предсказания цели ветвления (branch target prediction), который предсказывает безусловные переходы.


Слайд 10

Качество упреждающей выборки: Поскольку программы часто работают с протяженными данными (структурами, массивами), то кэш оказывается неэффективным из-за большого количества промахов. Для преодоления этой проблемы был разработан механизм упреждающей выборки данных (data prefetching). МП, заметив тенденцию в обращении к памяти, пытается заранее закачать требуемую память в кэш. Помимо процессорного механизма упреждающей выборки есть программный механизм упреждающей выборки.


Слайд 11

Суперскалярность: Суперскалярный процессор – это процессор способный выполнять несколько операций за один такт. Несколько исполнительных устройств в ALU (execution unit) Основными компонентами суперскалярного процессора являются устройства для интерпретации команд, снабженные логикой, позволяющей определить, являются ли команды независимыми, и достаточное число исполняющих устройств. В исполняющих устройствах могут быть конвейеры. Первым суперскалярным процессором x86 архитектуры был Pentium. В нем исполнительный блок был реализован в виде двух параллельных конвейеров (U и V). U мог исполнять все инструкции, в то время как V – простейшие наиболее часто выполняемые инструкции. Выигрыш от суперскалярности также определяется уровнем параллелизма инструкций. Т.е. насколько последующая инструкция зависит от результатов выполнения предыдущей.


Слайд 12

Упрощенная модель процессора Оперативная память (RAM) Упреждающая выборка Вычислительное устройство (ALU) Управляющее устройство (CU) Устройство взаимодействия с внешней памятью Внешняя память Шина ввода-вывода Суперскалярность Конвейеризация, предсказание переходов Регистры Вычислительное устройство (ALU) Регистры Система кэшей


Слайд 13

Параллелизация и многоядерность: Многозадачность, многопоточность. Одновременно выполняющиеся потоки конкурируют за ресурсы микропроцессора. Ммногоядерные МП (multi-core). Это процессор, который содержит несколько ядер (более или менее независимых процессоров) в одном пакете. Эти ядра содержат всю функциональность обычного процессора, но совместно используют системную шину и кэши. Также для увеличения производительности используются многопроцессорные решения. Современные системы имеют по паре двух, а то и четырехядерных МП.


Слайд 14

Основные характеристики влияющие на производительность МП Эффективность работы с кэш-памятью. Правильное предсказание переходов. Эффективность использования векторных инструкций. Эффективность параллелизации. Уровень параллелилизма.


Слайд 15

Измерение производительности Потребителям необходимы критерии определения производительности вычислительной системы. Репрезентативная выборка типичных задач. Универсальная схема тестирования Независимость от производителей МП Spec.org (Standart Performance Evaluated Corporation) – некоммерческая организация для подготовки, поддержки и сопровождения стандартного набора тестов для сравнения производительности различных вычислительных систем. Эта организация разрабатывает стандартные сюиты и публикует результаты измерений. CPU2006 – разработана для измерения производительности. Может быть использована для сравнения работы программ выполняемых на различных вычислительных системах. CINT2006 для целочисленных вычислений. CFP2006 для сравнения производительности работы с вещественными числами. OMP2001 – измеряет производительность тестов использующих OpenMP стандарт для параллельных вычислений с совместно используемой памятью (shared-memory parallel processing).


Слайд 16

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


Слайд 17

Программа должна быть: Легко читаемой и модифицируемой Легко отлаживаемой Быстро исполняемой Cовременный компилятор должен уметь: создавать исполняемый модуль под любую архитектуру варьировать уровни отладки и быстродействия. Чтобы использовать умело средства компилятора, программист должен как минимум: иметь представления о архитектуре, на которой будет использоваться его программа. ознакомиться с флагами компилятора. ознакомиться с основными техниками улучшения производительности, которые использует компилятор. ознакомиться с основными проблемами вызывающими замедление работы программы. знать примерные данные, с которыми будет работать программа. уметь пользоваться инструментами для анализа производительности программы.


Слайд 18

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


Слайд 19

Скорость выполнения инструкций и полнота базового набора инструкций. В общем случае, одни и те же конструкции языка высокого уровня могут быть по разному реализованы в машинных кодах. Скалярные оптимизации Цикловые оптимизации Векторизация Межпроцедурный анализ … - все эти оптимизации призваны создать оптимальный набор машинных инструкций соответствующих коду программы.


Слайд 20

Использование внутренней памяти, распределение регистров. Трансформация данных Оптимизации циклов (Перестановка циклов, объединение циклов // Loop interchange, loop fusion) Уровень конвейеризации За счет улучшения инструкционного параллелизма. Оптимизации циклов (Объединение циклов) Качество предсказания переходов Статический и динамический профилировщик Оптимизации циклов Межпроцедурный анализ, инлайнинг функций Качество упреждающей выборки Программная упреждающая выборка (Software prefetch) Суперскалярность Улучшение параллелизма инструкций Параллелизация и многоядерность Автоматическая параллелизация


Слайд 21

Интеловские компиляторы Интел имеет С/C++ и Фортран для операционных платформ Windows, Linux и Mac OS. Для Windows INTEL компилятор сделан как настройка к Microsoft Visual Studio. Главной целью корпорации является высокая производительность компиляторов и совместимость с Microsoft Visual Studio на Windows платформе и gcc на Linux и Mac OS.


Слайд 22

Оптимизации: 1.) Скалярные оптимизации Свертка констант, протяжка констант, протяжка копий (Constant folding, constant propagation, copy propagation) Удаление общих подвыражений (Common subexpression elimination) Удаление мертвого кода (Dead code elimination)


Слайд 23

2.) Цикловые оптимизации Вынесение инвариантов цикла (Loop invariant code motion) Вынесение условных переходов (Loop unswitching) Развертка цикла (Loop unrolling) Перестановка циклов (Loop interchange) Разбиение, объединение циклов (Loop distribution, loop fusion)


Слайд 24

Помимо этих оптимизаций существуют и другие, порой очень разнообразные: Strength reduction Scalar expansion Loop tiling Loop skewing Loop coalescing Loop collapsing и многие другие. Одна из основных проблем и задач компилятора – доказательство правомерности тех или иных оптимизаций и оценка их выгодности.


Слайд 25

3.) Векторизация Векторизация, в компьютерной науке, это процесс конвертации программы из скалярного вида, который выполняет операции с парой операндов в векторизованную программу в которой каждая инструкция выполняется с парой векторных операндов. DO I=1,100 A(I)=B(I) END DO Векторизация DO I=1,25 A(I:I+4)=B(I:I+4) END DO Влияние выравнивания (alignment) на производительность. Компилятор выполняет векторизацию, условную векторизацию.


Слайд 26

4.)Автоматическая параллелизация Автоматическая параллелизация – это процесс автоматического преобразования последовательного программного кода в многопоточный (multi-threaded) код для того чтобы использовать несколько вычислительных устройств одновременно. Актуально для современных многопроцессорных и многоядерных машин. OpenMP (Open Multi-Processing) – это программный интерфейс, который поддерживает многоплатформенное многопроцессорное программирование с общей памятью на C/C++ и Фортране на многих архитектурах.


Слайд 27

5.)Оптимизация вызовов функций, межпроцедурный анализ. Инлайнинг – эта оптимизация вставляет код функции вместо вызова функции. Частичный инлайнинг (partial inlining) – инлайнинг части вызываемой функции внутрь вызывающей. Протяжка аттрибутов функций. Протяжка аттрибутов переменных. Изменение области видимости переменных. LPT анализ Анализ потока данных Функции, используемые только в одной программе получают атрибут static. Удаление неиспользуемых глобальных переменных. Удаление мертвого кода. Протяжка информации о выравнивании аргументов. Быстрый анализ типов. (Rapid type analysis)


Слайд 28

Статический и динамический профилировщики. Подсчет «весовых» характеристик – вероятность перехода, вес базового блока. Используется при многих оптимизациях (трансформация данных). Статический профилировщик вычисляет характеристики анализируя исходный код программы. Динамический профилировщик работает в два прохода: создает инструментированную версию программы и прогоняет ее с неким репрезентативным набором данных, использует собранную динамическую информацию для оптимизации программы. Некоторые оптимизации работают только при наличии динамической информации (трансформация данных).


Слайд 29

Зависимость основных характеристик компиляции. Производительность программы Время компиляции Размер кода Отладка, надежность


Слайд 30

Пошаговый алгоритм отладки/улучшения производительности программы 1.) Проверка корректности (/Od, -O0) Версия 11.0 по умолчанию включает векторизатор. Для того чтобы выполнять программу на старых процессорах “-mia32” 2.) Отладка. -g или –debug [keyword] (all,full,minimal) 3.) Используйте стандартные опции оптимизации –O1, -O2, -O3 4.) Использование процессорно специфических опций -xSSE3, -xSSSE3, -xSSE4.2 Можно так-же использовать –xhost и в этом случае компилятор будет использовать наиболее продвинутые опции процессора на котором выполняется компиляция. 5.) Использование VTune Performance Analyzer. Нахождение горячих функций и мест, где тратиться наибольшее процессорное время.


Слайд 31

Инструменты и методы используемые для оптимизации производительности программы. Intel VTune Performance Analyzer – это инструмент предназначенный для анализа производительности программ. Он позволяет легко найти проблемные узкие места и проанализировать их. Для этого нужен только исполняемый файл. Желательно, чтобы он содержал информацию о строках кода.


Слайд 32


Слайд 33


Слайд 34

6.) Добавление межпроцедурных оптимизаций –ipo 7.) Использование динамического профилировщика. построение программы с опцией -prof-gen (программа с инструментированием) прогон с представительным набором данных (несколькими наборами) построение программы с опцией –prof-use 8.) использование автоматической параллелизации –parallel для автоматической распараллелизации циклов. 9.) использовать OPENMP директивы и опцию –openmp для генерации многопоточного кода


×

HTML:





Ссылка: