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

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

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

Обзор

Компиляторы генерируют оптимизированный код для 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.[5] Использование такой инструкции через компилятор может привести к повышению производительности приложений в некоторых приложениях, работающих на архитектурах IA-32 и Intel 64, по сравнению с приложениями, созданными с помощью компиляторов, которые не поддерживают эти инструкции.

Поддержка компиляторов Intel Силк Плюс (удалено в 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.

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

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

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

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

Архитектура

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

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

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

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

История с 2003 года

Версия компилятораДата выходаОсновные новые функции
Компилятор Intel C ++ 8.015 декабря 2003 г.Предварительно скомпилированные заголовки, инструменты покрытия кода.
Компилятор Intel C ++ 8.1Сентябрь 2004 г.AMD64 архитектура (для Linux).
Компилятор Intel C ++ 9.014 июня 2005 г.AMD64 архитектура (для Windows), оптимизация спекулятивных предварительных вычислений (SSP) на основе программного обеспечения, улучшенные отчеты по оптимизации цикла.
Компилятор Intel C ++ 10.05 июня 2007 г.Улучшенный распараллеливатель и векторизатор, Streaming SIMD Extensions 4 (SSE4 ), новые и улучшенные отчеты по оптимизации для расширенных преобразований циклов, новая оптимизированная реализация обработки исключений.
Компилятор Intel C ++ 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 ++ 11.0Ноябрь 2008 г.Исходный C ++ 11 поддерживать. Интеграция VS2008 IDE в Windows. OpenMP 3.0. Source Checker для статической памяти / параллельной диагностики.
Компилятор Intel C ++ 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 г.Силк Плюс языковые расширения, управляемый автоматический параллелизм, улучшенный C ++ 11 поддерживать.[9]
Intel C ++ Composer XE 2011 Update 6 и выше (компилятор 12.1)8 сентября 2011 г.Силк Плюс языковые расширения обновлены для поддержки версии 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 (для настольных ПК), поддержка gcc 4.7, поддержка инструкций Intel AVX 2, обновления существующих функций, направленные на повышение производительности приложений.[10]
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.

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

Отладка

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

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

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

Прием

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

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

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

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

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

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

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

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

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

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

Смотрите также

Рекомендации

  1. ^ «Примечания к выпуску компилятора Intel® C ++ и новые функции». software.intel.com.
  2. ^ «Примечания к выпуску Intel® C ++ Compiler 19.1». software.intel.com.
  3. ^ «Компилятор Intel C ++ для документации Android». software.intel.com.[цитата не найдена ]
  4. ^ «Intel® System Studio 2016 для FreeBSD * | Программное обеспечение Intel®». software.intel.com. Получено 2018-03-15.
  5. ^ А. Дж. К. Бик, Справочник по векторизации программного обеспечения (Intel Press, Хиллсборо, Орегон, 2004 г.), ISBN  0-9743649-2-4.
  6. ^ The Software Optimization Cookbook, High-Performance Recipes for IA-32 Platforms, Richard Gerber, Aart J.C. Bik, Kevin B. Smith, and Xinmin Tian, ​​Intel Press, 2006 г.
  7. ^ Intel C ++ Compiler XE 13.0 Руководство пользователя и справочное руководство
  8. ^ Подводные камни проверки вычислений с плавающей запятой, Дэвид Монниа, также напечатанный в ACM Transactions по языкам и системам программирования (TOPLAS), май 2008 г .; в разделе 4.3.2 обсуждаются нестандартные оптимизации.
  9. ^ Это примечание прилагается к выпуску, в котором был представлен Cilk Plus. Этот ULR указывает на текущую документацию: http://software.intel.com/en-us/intel-composer-xe/
  10. ^ Примечания к выпуску Intel C ++ Composer XE 2013[1] http://software.intel.com/en-us/articles/intel-c-composer-xe-2013-release-notes/
  11. ^ «Компиляторы Intel® | Зона разработчиков Intel®». Intel.com. 1999-02-22. Получено 2012-10-13.
  12. ^ [2] В архиве 23 марта 2010 г. Wayback Machine
  13. ^ «Архивная копия» (PDF). Архивировано из оригинал (PDF) на 2011-03-22. Получено 2011-03-30.CS1 maint: заархивированная копия как заголовок (связь)
  14. ^ «Ваш процессор, ваш компилятор и вы: случай секретной строки CPUID». Архивировано из оригинал на 2012-01-05. Получено 2011-12-11.
  15. ^ а б "Блог о процессорах Агнера - функция Intel" нанести вред AMD ". www.agner.org.
  16. ^ Хруска, Джоэл (29 июля 2008 г.). "Низкокачественный матч недовольства: Нано против Атома". Ars Technica.
  17. ^ "Мировое соглашение" (PDF). download.intel.com.
  18. ^ «Intel и Федеральная торговая комиссия США достигли предварительного соглашения». Newsroom.intel.com. 2010-08-04. Получено 2012-10-13.
  19. ^ "FTC, Intel Reach Settlement; Intel запрещена антиконкурентная практика". Архивировано из оригинал на 2012-02-03. Получено 2011-10-20.
  20. ^ «Уведомление об оптимизации». Корпорация Intel. Получено 11 декабря 2013.
  21. ^ «Аналитик: Тесты, показывающие, что смартфоны Intel превосходят ARM, были сфальсифицированы».

внешняя ссылка