Компиляторы Intel 10.0 C++ и Fortran
для Windows и Linux
- Краткая информация о продуктах на сайте Intel (новое в версиях, системные требования, совместимость)
- С++ для Linux [HTML, eng.]
- Fortran для Linux [HTML, eng.]
- Общая информация
- Оптимизация приложений
- Тесты
Общая информация
Профессиональная и стандартная версии
Компиляторы доступны как в виде профессиональных версий, снабженных набором специальных библиотек (например, в случае С++, Intel Threading Building Blocks, Intel Integrated Performance Primitives, Intel Math Kernel Library - Intel MKL), так и в виде стандартной версии. При этом и стандартная, и профессиональная версии обладают одинаковой производительностью, а вышеупомянутые библиотеки доступны и отдельно от профессиональной версии.
Для компиляторов под Linux доступно расширение Intel Cluster OpenMP, позволяющее простым способом расширить возможности применения OpenMP на кластерах, базирующихся на 64-битной архитектуре. Причем Сluster OpenMP для компиляторов Intel лицензируется отдельно и имеет отличные системные требования от требований компиляторов.
В случае ОС Windows для компилятора С++ необходимо иметь средства разработки Microsft. В случае языка Fortran все версии уже включают Microsoft Visual Studio 2005 Premier Partner Edition.
Основные и дополнительные возможности
Основные возможности:
Производительность - встроенные технологии оптимизации и поддержка параллелизма позволяют эффективно использовать новейшие многоядерные процессоры.
Дополнительные возможности:
- поддержка параллелизма в программах: использование OpenMP и автоматическое распараллеливание на уровне раскрутки циклов;
- высокопроизводительный оптимизатор для параллельных программ (HPO: High Performance, Parallel Optimizer): новая возможность версии 10.0, сочетающая в себе автоматическую векторизацию, автоматическое распараллеливание и преобразования циклов в один проход, что является более надежным и эффективным по сравнению с подходом в предыдущей версии, где это было реализовано по отдельности. Производятся такие операции как раскрутка, перестановка, разбиение циклов и т.п., так же как и другие оптимизационные действия для обеспечения эффективного использования архитектуры кэшей процессоров, наборов SIMD инструкций, многоядерности. Эти преобразования осуществляются автоматически и не требуют ручной правки кода;
- автоматическая векторизация: эта оптимизация анализирует цикл и определяет, когда возможно параллельно выполнять несколько его итераций, используя инструкции MMX, SSE, SSE2, SSE3. Функция поддерживает возможность расширенных, динамических стратегий распределения данных, включая чистку циклов для выравнивания загрузки и раскрутку циклов для наиболее полной загрузки кэша;
- межпроцедурная оптимизация (IPO): позволяет существенно увеличить производительность в программах, где часто используются одни и те же небольшие функции, особенно в программах, где такие вызовы осуществляются внутри циклов. Типичные оптимизационные действия IPO заключаются в подстановке и перестановке процедур, удалении недостижимого кода и подстановке констант вместо известных значений. Аналитические возможности IPO могут помочь при поиске уязвимых мест и ошибок кодирования, например, выявлении неинициализированных переменных, которые не могли бы быть найдены при анализе компилятором без такой промежуточной стадии;
- оптимизация, управляемая профилем (Profile-Guided Optimization - PGO): позволяет более эффективно использовать микроархитектуру процессора, проводить распределение инструкций, использовать кэш-память и делать более точное предсказание переходов. Она увеличивает производительность программы путем реорганизации кода для повышения эффективности работы кэша команд, снижения размера кода и уменьшения числа ситуаций с непредсказуемыми передачами управления. PGO состоит из трех стадий:
- компиляция кода с добавлением инструментария
- фаза генерации профиля, на которой приложение выполняется и ведется мониторинг за ходом выполнения
- фаза перекомпиляции с учетом данных, полученных на стадии мониторинга во второй фазе.
- обычная расстановка блоков и функций - помещает часто исполняемые блоки и функции вместе для увеличения эффективности работы кэша команд;
- подстановки - подставляет код часто используемых функций в местах их вызова, при этом увеличение размера кода окупается увеличением производительности;
- векторизация указателей длинных переходов и часто используемых циклов - аналогично, увеличение размера кода окупается ростом производительности.
- Оптимизированная отладка кода с помощью отладчика Intel. Предоставляет возможность оптимизированной отладки кода. Он предоставляет совместимую со стандартами отладочную информацию для оптимизированной отладки, доступную для всех отладчиков, которые поддерживают компиляторы Intel. Отладчик поддерживает многоядерные архитектуры, позволяя производить отладку параллельных приложений, обеспечивая следующие возможности:
- модель "все запущены"/"все приостановлены" (если хоть одна нить остановлена, остальные останавливаются, и все возобновляют выполнение, как только некоторая нить запускается)
- список всех запущенных нитей
- концентрация на некоторых из нитей
- детальное состояние конкретной нити
- установка контрольных точек (включая вариации общей остановки, отслеживания значений переменных, передачи управления) и отображение обратной трассировки всех или выбранных нитей
- встроенный GUI предоставляет панель, отображающую состояние нитей и позволяющую получить интересующую информацию о конкретных нитях.
Поддерживаемые архитектуры
- архитектура IA-32: системы на базе 32-разрядных процессоров, поддерживающих набор инструкций как минимум PentiumII (например, на базе архитектур Intel Core или процессор Intel Xeon) или процессоров других производителей, поддерживающих тот же набор инструкций и работающих на 32-разрядных операционных системах ("Linux x98")
- архитектура Intel 64 (ранее ЕМ64Т): относится к системам на базе 32-разрядных процессоров, которые имеют 64-разрядные архитектурные расширения (например, семейство Intel Core 2 или Intel Xeon), работающим на 64-разрядных операционных системах ("Linux x86_64"). Если же операционная система 32-разрядная, то применяется архитектура IA-32. Системы на базе AMD Athlon64 или Opteron, работающие на 64-разрядных операционных системах, также поддерживаются компиляторами Intel для приложений, ориентированных на архитектуру Intel 64.
© Лаборатория Параллельных информационных технологий НИВЦ МГУ