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

Презентация:



Advertisements
Похожие презентации
1 Введение в оптимизацию приложений с использованием инструментов Intel® Андрей Ануфриенко Intel Compiler Group Ренат Идрисов.
Advertisements

Архитектура микропроцессора Intel и основные факторы, влияющие на его производительность Ануфриенко Андрей Идрисов Ренат.
Архитектура микропроцессоров И ее эволюция. Процессор и память: Команды и данные.
Архитетура компьютерных систем. Архитектура системы команд как интерфейс между программным и аппаратным обеспечением Архитектура системы команд.
Архитектура ЭВМ (лекция 7) проф. Петрова И.Ю. Курс Информатики.
Архитектуры с параллелизмом на уровне команд. Два класса Суперскалярные процессоры Процессоры с длинным командным словом.
Лекция 6 Понятие операционных систем Учебные вопросы: 1. Характеристики ОС 2. Свободные и проприетарные ОС.
Процессор – это блок, предназначенный для автоматического считывания команд программы, их расшифровки и выполнения.
Введение в параллельную обработку. Уровни параллелизма в процессорах Параллелизм данных (DLP – Data Level Parallelism) Параллелизм команд (ILP – Instruction.
Машинная команда Энциклопедия учителя информатики Газета «Первое сентября»
Тема 2. Способы адресации и система команд МП. Непосредственная адресация Суть способа. Требуемые данные (#data ̶ непосредственный операнд, константа)
Архитектуры с параллелизмом на уровне команд. Два класса Суперскалярные процессоры Процессоры с длинным командным словом.
RISC-архитектуры ( Reduced Instruction Set Computer)
Микропроцессор Центральный процессор (ЦПУ, CPU, от англ. Central Processing Unit) это основной рабочий компонент компьютера, который выполняет.
Структурная схема компьютера Взаимодействие устройств компьютера.
Лекция 6. Способы адресации в микропроцессорных системах.
Учебный курс Принципы построения и функционирования ЭВМ Лекция 11 Микрокоманды и микрооперации профессор ГУ-ВШЭ, доктор технических наук Геннадий Михайлович.
Схема компьютера Взаимодействие устройств компьютера.
Организация ЭВМ и систем Кафедра Параллельных вычислений (ИВМиМГ) Маркова Валентина Петровна, Киреев Сергей Евгеньевич,
Общая структура и состав персонального компьютера.
Транксрипт:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пошаговый алгоритм отладки/улучшения производительности программы 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. Нахождение горячих функций и мест, где тратиться наибольшее процессорное время.

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

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