Компилятор Intel C ++

редактировать
Компилятор Intel C ++
Разработчик (и) Intel
Стабильный выпуск 19.1.4 ( XE 2020) / 22 октября 2020 г.; 15 дней назад (2020-10-22)
Операционная система Windows, Mac, Linux, FreeBSD
Тип Компилятор
Лицензия Пробная версия
Веб-сайтпрограммное обеспечение.intel.com / en-us / intel-compilers
Компилятор Intel C ++ для Android
Разработчик Intel
Стабильный выпуск 14.0.1 / 12 ноября 2013 г.; 6 лет назад (12.11.2013)
Операционная система Windows, OS X
Тип Компилятор
Лицензия Пробная версия
Веб-сайтпрограммное обеспечение.intel.com / c-compiler-android

Компилятор Intel C ++, также известный как icc или icl, представляет собой группу компиляторов C и C++ из Intel, доступных для Windows, Mac, Linux, FreeBSD и устройства на базе Intel Android.

Содержание
  • 1 Обзор
  • 2 Оптимизация
  • 3 Архитектура
  • 4 Описание упаковки
  • 5 История с 2003 г.
  • 6 Флаги и руководства
  • 7 Отладка
  • 8 Прием
  • 9 См. Также
  • 10 Ссылки
  • 11 Внешние ссылки
Обзор

Компиляторы генерируют оптимизированный код для IA-32 и Intel 64 архитектуры и неоптимизированный код для не-Intel, но совместимых процессоров, таких как некоторые процессоры AMD. Специальная версия компилятора (11.1) доступна для разработки приложений на базе Linux для процессоров IA-64 (Itanium 2).

В компилятор 14.0 добавлена ​​поддержка устройств Android на базе Intel, а также оптимизирована векторизация и инструкции семейства SSE для повышения производительности. В выпуске 13.0 добавлена ​​поддержка сопроцессора Intel Xeon Phi. Он продолжает поддерживать автоматическую векторизацию, которая может генерировать SSE, SSE2, SSE3, SSSE3, Инструкции SSE4, AVX и AVX2 SIMD, а также встроенный вариант для Intel MMX и MMX 2. Использование такой инструкции через компилятор может привести к повышению производительности приложений в некоторых приложениях, работающих на архитектурах IA-32 и Intel 64, по сравнению с приложениями, созданными с помощью компиляторов, которые не поддерживают эти инструкции.

Компиляторы Intel поддерживают Cilk Plus (удалено в 19.1), который представляет собой возможность для написания векторизованного и параллельного кода, который может использоваться на процессорах IA-32 и Intel 64 или который может быть выгружен к сопроцессорам Xeon Phi. Они также продолжают поддерживать OpenMP 4.0, симметричную многопроцессорную обработку, автоматическое распараллеливание и управляемую автоматическую параллелизацию (GAP). С помощью надстройки Cluster OpenMP компиляторы могут также автоматически генерировать вызовы интерфейса передачи сообщений для многопроцессорной обработки с распределенной памятью из директив OpenMP.

Intel C ++ совместим с Microsoft Visual C ++ в Windows и интегрируется в Microsoft Visual Studio. В Linux и Mac он совместим с коллекцией компиляторов GNU (GCC) и набором инструментов GNU. Компилятор Intel C ++ для Android размещен в Windows, OS X или Linux и совместим с Android NDK, включая gcc и Eclipse IDE. Компиляторы Intel известны производительностью приложений, которую они могут обеспечить по результатам тестов, таких как тесты SPEC CPU.

Оптимизация

Компиляторы Intel оптимизированы для компьютерных систем, использующих процессоры, поддерживающие архитектуры Intel. Они предназначены для минимизации простоев и создания кода, который выполняется за минимально возможное количество циклов. Компилятор Intel C ++ поддерживает три отдельных высокоуровневых метода оптимизации скомпилированной программы: межпроцедурная оптимизация (IPO), профильная оптимизация (PGO) и высокоуровневая оптимизация (HLO).). Компилятор Intel C ++ в продуктах Parallel Studio XE также поддерживает инструменты, методы и языковые расширения для добавления и поддержки параллелизма приложений на процессорах IA-32 и Intel 64 и позволяет выполнять компиляцию для процессоров и сопроцессоров Intel Xeon Phi.

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

Оптимизация высокого уровня - это оптимизация, выполняемая в версии программы, которая более точно представляет исходный код. Сюда входят обмен петлями, слияние петель, деление петель, разворачивание петли, предварительная выборка данных и многое другое.

Межпроцедурная оптимизация применяет типичные оптимизации компилятора (например, распространение констант), но использует более широкую область действия, которая может включать несколько процедур, несколько файлов или всю программу.

Дэвид Монниа раскритиковал компилятор Intel за применение по умолчанию плавающей оптимизация точек, которая не разрешена стандартом C и требует специальных флагов с другими компиляторами, такими как gcc.

Architectures
Описание упаковки

За исключением компилятора Intel Bi-Endian C ++, Intel C ++ компиляторы недоступны в отдельной форме. Они доступны в наборах:

  • Intel Parallel Studio XE для разработки технических, корпоративных и высокопроизводительных вычислительных приложений в Windows, Linux и d Mac
  • Intel System Studio для разработки системного и прикладного программного обеспечения для встраиваемых систем или устройств под управлением Windows, Linux или Android

В комплекты входят другие инструменты сборки, такие как библиотеки, и инструменты для потоковой передачи и анализа производительности.

История с 2003 г.
Версия компилятораДата выпускаОсновные новые функции
Компилятор Intel C ++ 8.015 декабря 2003 г.Предварительно скомпилированные заголовки, инструменты покрытия кода.
Intel C ++ Compiler 8.1Сентябрь 2004 г.Архитектура AMD64 (для Linux).
Intel C ++ Compiler 9.014 июня 2005 г.Архитектура AMD64 (для Windows), программная оптимизация спекулятивных предварительных вычислений (SSP), улучшенные отчеты по оптимизации цикла.
Intel C ++ Compiler 10.05 июня 2007 г.Улучшенный распараллеливатель и векторизатор, Streaming SIMD Extensions 4 (SSE4 ), новые и улучшенные отчеты по оптимизации для расширенного цикла преобразования, новая оптимизированная реализация обработки исключений.
Intel C ++ Compiler 10.17 ноября 2007 г.Новая библиотека времени выполнения, совместимая с OpenMP *: если вы используете новый OpenMP RTL, вы можете смешивать и сопоставлять библиотеки и объекты, созданные Visual C ++. Чтобы использовать новые библиотеки, вам необходимо использовать новую опцию «-Qopenmp / Qopenmp-lib: compat» в Windows и «-openmp -openmp-lib: compat» в Linux. Эта версия компилятора Intel поддерживает больше встроенных функций из Visual Studio 2005.

Поддержка VS2008 - командная строка только в этом выпуске. Интеграция IDE пока не поддерживалась.

Intel C ++ Compiler 11.0ноябрь 2008 г.Начальная поддержка C ++ 11. Интеграция VS2008 IDE в Windows. OpenMP 3.0. Source Checker для статической памяти / параллельной диагностики.
Intel C ++ Compiler 11.123 июня 2009 г.Поддержка последних версий Intel SSE SSE4.2, AVX и AES инструкции. Расширение параллельного отладчика. Улучшенная интеграция с Microsoft Visual Studio, Eclipse CDT 5.0 и Mac Xcode IDE.
Intel C ++ Composer XE 2011 до обновления 5 (компилятор 12.0)7 ноября 2010 г.языковые расширения Cilk Plus, управляемый автоматический параллелизм, улучшенный C ++ 11 поддержка.
Intel C ++ Composer XE 2011 Update 6 и выше (компилятор 12.1)8 сентября 2011 г.языковые расширения Cilk Plus обновлены для поддержки версии 1.1 спецификации и доступны на Mac OS X в дополнение к Windows и Linux, стандартные блоки потоков обновлены для поддержки версии 4.0, блоки Apple поддерживаются в Mac OS X, улучшено C ++ 11 поддержка, включая поддержку шаблонов Variadic, поддержку OpenMP 3.1.
Intel C ++ Composer XE 2013 (компилятор 13.0)5 сентября 2012 г.Поддержка сопроцессоров Intel Xeon Phi на базе Linux, поддержка Microsoft Visual Studio 12 (Desktop), поддержка gcc 4.7, поддержка инструкций Intel AVX 2, обновления существующих функций, направленные на повышение производительности приложений.
Intel C ++ Composer XE 2013 SP1 (компилятор 14.0)4 сентября 2013 г.Онлайн установщик; поддержка сопроцессоров Intel Xeon Phi; предварительная версия Win32 поддерживает только графику Intel; улучшенная поддержка C ++ 11
Intel C ++ Composer XE 2013 SP1 Update 1 (компилятор 14.0.1)18 октября 2013 г.Японская локализация 14.0; Поддержка Windows 8.1 и Xcode 5.0
Компилятор Intel C ++ для Android (компилятор 14.0.1)12 ноября 2013 г.Размещено в Windows, Linux или OS X, совместимо с Android NDK инструменты, включая компилятор gcc и Eclipse
Intel C ++ Composer XE 2015 (компилятор 15.0)25 июля 2014 г.Полная поддержка языка C ++ 11; Дополнительные улучшения OpenMP 4.0 и Cilk Plus
Intel C ++ Composer XE 2015 Update 1 (компилятор 15.0.1)30 октября 2014 г.поддержка AVX-512 ; Японская локализация
Intel C ++ 16.025 августа 2015 г.Доступность на основе пакета (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 17.015 сентября 2016 г.Доступность на основе набора (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 18.026 января 2017 г.Доступность на основе набора (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 19.03 апреля 2018 г.Доступность на основе набора (Intel Parallel Studio XE, Intel System Studio)
Флаги и руководства

Документацию можно найти на сайте технической документации Intel Software.

WindowsLinux, macOS и FreeBSDКомментарий
/ Od-O0Без оптимизации
/ O1-O1Оптимизировать для размера
/ O2-O2Оптимизировать по скорости и включить некоторую оптимизацию
/ O3-O3Включить все оптимизации как O2 и оптимизации с интенсивным циклом
/ arch: SSE3/ -msse3Включает SSE3, SSE2 и набор инструкций SSE s оптимизация для процессоров других производителей
/ fast-fastСокращение. В Windows это эквивалентно «/ O3 / Qipo / QxHost / Opred-div-»; в Linux "-O3 -ipo -static -xHOST -no-Prec-div". Обратите внимание, что флаг оптимизации для конкретного процессора (-xHOST) будет оптимизироваться для процессора, на котором скомпилирован - это единственный флаг -fast, который можно переопределить
/ Qprof-gen-prof_genСкомпилировать программу и настроить ее для прогона создания профиля
/ Qprof-use-prof_useМожет использоваться только после выполнения программы, которая ранее была скомпилирована с использованием prof_gen. Использует информацию профиля на каждом этапе процесса компиляции
Отладка

Компилятор Intel предоставляет отладочную информацию, которая является стандартной для общих отладчиков (DWARF 2 в Linux, аналогично gdb и COFF для Windows). Флаги для компиляции с отладочной информацией: / Ziв Windows и -gв Linux. Отладка выполняется в Windows с помощью отладчика Visual Studio, а в Linux - с помощью gdb.

Хотя компилятор Intel может генерировать выходные данные профилирования, совместимые с gprof, Intel также предоставляет общесистемный статистический профилировщик уровня ядра Intel VTune Profiler. VTune можно использовать из командной строки или через встроенный графический интерфейс в Linux или Windows. Его также можно интегрировать в Visual Studio в Windows или в Eclipse в Linux). В дополнение к профилировщику VTune существует Intel Advisor, который специализируется на оптимизации векторизации, моделировании разгрузки, проектировании потоковых графов и инструментах для проектирования потоков и создания прототипов.

Intel также предлагает инструмент для обнаружения ошибок памяти и потоков, который называется Intel Inspector XE. Что касается ошибок памяти, он помогает обнаруживать утечки памяти, повреждение памяти, распределение / освобождение несоответствий API и несогласованное использование памяти API. Что касается ошибок потоковой передачи, он помогает обнаруживать скачки данных (как в куче, так и в стеке), взаимоблокировки и ошибки API потоков и синхронизации.

Прием

Intel и третьи стороны опубликовали результаты тестов, чтобы подтвердить заявления о лидерстве в производительности по сравнению с другими коммерческими компиляторами и библиотеками с открытым исходным кодом и AMD на процессорах Intel и других производителей. Intel и AMD задокументировали флаги для использования в компиляторах Intel для достижения оптимальной производительности на процессорах Intel и AMD. Тем не менее компиляторы Intel, как известно, используют неоптимальный код для процессоров от поставщиков, отличных от Intel. Например, Стив Вестфилд написал в статье 2005 года на веб-сайте AMD:

Компилятор Intel 8.1 C / C ++ использует флаг -xN (для Linux) или -QxN (для Windows), чтобы воспользоваться преимуществами расширений SSE2. Для SSE3 переключатель компилятора - -xP (для Linux) и -QxP (для Windows).... С установленными флагами -xN / -QxN и -xP / -QxP он проверяет строку производителя процессора - и если это не «GenuineIntel», он останавливает выполнение, даже не проверяя флаги функций. Ой!

Датский разработчик и ученый Агнер Фог писал в 2009 году:

Компилятор Intel и несколько различных библиотек функций Intel имеют неоптимальную производительность на AMD и VIA. процессоры. Причина в том, что компилятор или библиотека могут создавать несколько версий фрагмента кода, каждая из которых оптимизирована для определенного процессора и набора инструкций, например SSE2, SSE3 и т. д. Система включает функцию, которая определяет тип ЦП, на котором она работает, и выбирает оптимальный путь кода для этого ЦП. Это называется диспетчером ЦП. Однако диспетчер ЦП Intel не только проверяет, какой набор инструкций поддерживается ЦП, но и проверяет строку идентификатора поставщика. Если строка поставщика - «GenuineIntel», то используется оптимальный путь кода. Если ЦП не от Intel, то в большинстве случаев он будет запускать самую медленную из возможных версий кода, даже если ЦП полностью совместим с лучшей версией.

Это диспетчеризация ЦП, зависящая от поставщика (функция управления несколькими версиями) снижает производительность на процессорах сторонних производителей программного обеспечения, созданного с использованием компилятора Intel или библиотеки функций Intel - возможно, без ведома программиста. Это якобы привело к введению в заблуждение тестов, включая один инцидент, когда изменение CPUID VIA Nano значительно улучшило результаты. Судебная тяжба между AMD и Intel по этому и другим вопросам была урегулирована в ноябре 2009 года. В конце 2010 года AMD завершила Федеральная торговая комиссия США антимонопольное расследование против Intel.

Соглашение FTC включало положение о раскрытии информации, согласно которому Intel должна:

четко опубликовать, что его компилятор дискриминирует процессоры сторонних производителей (например, разработки AMD), не полностью использует их функции и производит некачественный код.

Соответствует В соответствии с этим правилом Intel добавила «уведомление об оптимизации» к описаниям своих компиляторов, в которых говорится, что они «могут или не могут оптимизировать в той же степени для микропроцессоров других производителей» и что «определенные оптимизации, не относящиеся к микроархитектуре Intel, зарезервированы для микропроцессоров Intel». В нем говорится, что:

Компиляторы Intel могут или не могут оптимизировать в той же степени для микропроцессоров других производителей для оптимизаций, которые не являются уникальными для микропроцессоров Intel. Эти оптимизации включают наборы инструкций SSE2, SSE3 и SSSE3, а также другие оптимизации. Intel не гарантирует доступность, функциональность или эффективность любой оптимизации микропроцессоров, произведенных не Intel. Оптимизация, зависящая от микропроцессора, в этом продукте предназначена для использования с микропроцессорами Intel. Некоторые оптимизации, не относящиеся к микроархитектуре Intel, зарезервированы для микропроцессоров Intel. Дополнительные сведения о конкретных наборах инструкций, охватываемых этим уведомлением, см. В соответствующих руководствах пользователя и справочных руководствах.

Как сообщал The Register в июле 2013 года, Intel подозревалась в «эталонном мастерстве», когда Было показано, что объектный код, созданный компилятором Intel для AnTuTu Mobile Benchmark, не включал части теста, которые показали повышенную производительность по сравнению с платформами ARM.

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-24 03:56:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте