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

Классический компилятор Intel C ++
Разработчики) Intel
Стабильный выпуск
2021.1.2 / 16 декабря 2020 г . ; 8 месяцев назад ( 2020-12-16 )
Операционная система Windows , macOS , Linux
Тип Компилятор
Лицензия Бесплатное , проприетарное
Интернет сайт программное обеспечение .intel .com / content / www / us / en / develop / tools / oneapi / components / dpc-compiler .html
Компилятор Intel oneAPI DPC ++ / C ++
Разработчики) Intel
Стабильный выпуск
2021.1.2 / 16 декабря 2020 г . ; 8 месяцев назад ( 2020-12-16 )
Операционная система Windows , Linux
Тип Компилятор
Лицензия Бесплатное , проприетарное
Интернет сайт программное обеспечение .intel .com / content / www / us / en / develop / tools / oneapi / components / dpc-compiler .html

Intel C ++ Compiler Классический и Intel oneAPI DPC ++ / C ++ Compiler являются Intel «s C , C ++ , SYCL и Data Parallel C ++ (DPC ++) компиляторы для процессоров систем на базе Intel, доступных для Microsoft Windows , Linux и MacOS операционные системы.

Обзор

Intel C ++ Compiler Classic доступен для Windows, Linux и macOS и поддерживает компиляцию исходного кода C и C ++ , ориентированный на процессоры Intel IA-32 , Intel 64 (также известный как x86-64 ), Core , Xeon и Xeon Scalable . Он поддерживает среды разработки Microsoft Visual Studio и Eclipse IDE . Intel C ++ Compiler Classic поддерживает многопоточную работу с помощью Intel oneAPI Threading Building Blocks, OpenMP и собственных потоков.

Компилятор Intel oneAPI DPC ++ / C ++ доступен для Windows и Linux и поддерживает компиляцию исходного кода C, C ++, SYCL и Data Parallel C ++ (DPC ++), ориентированный на Intel IA-32, Intel 64 (x86-64), Core, Xeon и Xeon Масштабируемые процессоры, а также графические процессоры, включая Intel Processor Graphics Gen9 и выше, архитектуру Intel X e и программируемую карту ускорения Intel с Intel Arria 10 GX FPGA. Как и Intel C ++ Compiler Classic, он также поддерживает среды разработки Microsoft Visual Studio и Eclipse IDE, а также поддерживает многопоточность через Intel oneAPI Threading Building Blocks, OpenMP и собственные потоки.

DPC ++ основан на спецификации SYCL от Khronos Group. Он разработан, чтобы позволить разработчикам повторно использовать код в различных аппаратных целях (ЦП и ускорители, такие как графические процессоры и ПЛИС) и выполнять индивидуальную настройку для конкретного ускорителя. DPC ++ включает в себя функции языка C ++ 17 и SYCL и включает расширения сообщества с открытым исходным кодом, которые упрощают использование SYCL. Многие из этих расширений были приняты предварительной спецификацией SYCL 2020, включая унифицированную разделяемую память, групповые алгоритмы и подгруппы.

В августе 2021 года Intel объявила о полном внедрении LLVM для ускорения сборки и получения преимуществ от поддержки последних стандартов C ++.

Архитектура

Intel C ++ Compiler Classic нацелен на процессоры общего назначения с архитектурой Intel x86-64, включая:

  • Устаревшие процессоры Intel IA-32 и Intel 64 (x86-64)
  • Процессоры Intel Core
  • Семейство процессоров Intel Xeon
  • Процессоры Intel Xeon Scalable

Компилятор Intel oneAPI DPC ++ / C ++ генерирует код как для универсальных процессоров Intel x86-64, так и для графических процессоров :

  • Процессоры:
    • Устаревшие процессоры Intel IA-32 и Intel 64 (x86-64)
    • Процессоры Intel Core
    • Семейство процессоров Intel Xeon
    • Процессоры Intel Xeon Scalable
  • Графические процессоры:
    • Intel Processor Graphics Gen9 и выше
    • Архитектура Intel X e
    • Программируемая карта ускорения Intel с ПЛИС Intel 10 GX

Наборы инструментов

Компилятор Intel oneAPI DPC ++ / C ++ доступен либо как отдельный компонент, либо как часть Intel oneAPI Base Toolkit, Intel oneAPI HPC Toolkit и Intel oneAPI IoT Toolkit.

Intel C ++ Compiler Classic доступен как отдельный компонент или как часть Intel oneAPI Base Toolkit.

Документация

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

Окна Linux и macOS Комментарий
/ Od -O0 Без оптимизации
/ O1 -O1 «Включает оптимизацию скорости и отключает некоторые оптимизации, которые увеличивают размер кода и влияют на скорость»
/ O2 -O2 «Позволяет оптимизировать скорость. Это обычно рекомендуемый уровень оптимизации »
/ O3 -O3 «Выполняет оптимизацию O2 и обеспечивает более агрессивные преобразования цикла»
/ Ofast -Быстро «Эта опция увеличивает скорость вашего приложения. Он устанавливает параметры компилятора -O3 , -no-Prec-div и -fp-model fast = 2
/ арка: SSE3 -msse3 Включает оптимизацию набора инструкций SSE, SSE2 и SSE3 для процессоров других производителей.
/ 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 C / C ++ подвергались критике за менее агрессивную оптимизацию для процессоров сторонних производителей; например, Стив Вестфилд написал в статье 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 и т. Д. Система включает функцию, которая определяет, какой тип ЦП она выполняет. on и выбирает оптимальный путь кода для этого процессора. Это называется диспетчером ЦП. Однако диспетчер ЦП Intel не только проверяет, какой набор инструкций поддерживается ЦП, но также проверяет строку идентификатора поставщика. Если строка поставщика - «GenuineIntel», то используется оптимальный путь кода. Если ЦП не от Intel, то в большинстве случаев он будет запускать самую медленную из возможных версий кода, даже если ЦП полностью совместим с лучшей версией.

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

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

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

В соответствии с этим постановлением Intel добавила в документацию своего компилятора заявления об отказе от ответственности:

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

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

История выпуска

Ниже перечислены версии компилятора Intel C ++ с 2003 года.

Версия компилятора Дата выпуска Основные новые функции
Компилятор Intel C ++ 8.0 15 декабря 2003 г. Предварительно скомпилированные заголовки, инструменты покрытия кода.
Компилятор Intel C ++ 8.1 Сентябрь 2004 г. Архитектура AMD64 (для Linux).
Компилятор Intel C ++ 9.0 14 июня 2005 г. Архитектура AMD64 (для Windows), программная оптимизация спекулятивных предварительных вычислений (SSP), улучшенные отчеты по оптимизации цикла.
Компилятор Intel C ++ 10.0 5 июня 2007 г. Улучшенный распараллеливатель и векторизатор, Streaming SIMD Extensions 4 ( SSE4 ), новые и улучшенные отчеты по оптимизации для расширенных преобразований циклов, новая оптимизированная реализация обработки исключений.
Компилятор Intel C ++ 10.1 7 ноября 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.1 23 июня 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, Threading Building Blocks обновлены для поддержки версии 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.0 25 августа 2015 г. Доступность на основе пакета (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 17.0 15 сентября 2016 г. Доступность на основе пакета (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 18.0 26 января 2017 г. Доступность на основе пакета (Intel Parallel Studio XE, Intel System Studio)
Intel C ++ 19.0 3 апреля 2018 г. Доступность на основе пакета (Intel Parallel Studio XE, Intel System Studio)
Классический компилятор Intel C ++ 19.1 22 октября 2020 г. Только CPU Initial Open MP 5.1
Компилятор Intel oneAPI DPC ++ / C ++ 2021 г. 8 декабря 2020 г. SYCL, DPC ++, начальный Open MP 5.1
Компилятор Intel Intel C ++ Classic 2021.1.2 Компилятор
Intel oneAPI DPC ++ / C ++ 2021.1.2
16 декабря 2020 г. oneAPI DPC ++ / C ++ представляет поддержку разгрузки графического процессора

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

использованная литература

внешние ссылки