Sharing Knowledge
Using Math Kernal Library (MKL) in visual studio with Fortran
First install MKL from intel website

To use intel MKL library inside visual studio do the followings:
1. Right click the project>Properties
2. In Property page>Fortran>Libraries set (a) Runtime library : Multithreaded and (b) Use Intel MKL: Sequential
Once this setting is done, you can compile the file in DEBUG mode. Repeat the same process (1-2) for RELEASE mode too once more.(Note exe of DEBUG mode is far slower than exe of RELEASE mode. The settings to set are listed below.
Блог F-SEPS
Раньше я был уверен, что, возможно, самая крутая в мире 🙂 математическая библиотека Intel MKL – полностью коммерческая и с чистой совестью пользоваться ей можно только купив лицензию у Intel. Однако, разбираясь со свободными (совершенно бесплатными) системами для научных вычислений, я обнаружил, что Intel MKL входит в состав некоторых из них и используется там как основной решатель для СЛАУ, а также других задач. Как минимум, она входит:
в библиотеки NumPy и SciPy в составе дистрибутива Anaconda Python;
в SciLAB (известная MatLAB-подобная свободная система компьютерной математики).
Пойдя на сайт Intel, я увидел, что и оттуда можно скачать MKL совершенно бесплатно. Скачав, я открыл прилагающийся файл о лицензии и прочитал:
- Redistributions must reproduce the above copyright notice and the following terms of use in the Software and in the documentation and/or other materials provided with the distribution.
- Neither the name of Intel nor the names of its suppliers may be used to endorse or promote products derived from this Software without specific prior written permission.
- No reverse engineering, decompilation, or disassembly of this Software is permitted.
Я не юрист, но из этого по-моему следует, что я имею полное право пользоваться MKL и даже ее распространять, если уведомлю в документации на свою программу, что копирайт MKL принадлежит Intel.
Видимо, разработчики Anaconda Python и SciLAB так и делают.
Конечно, если действительно на MKL придется завязать какие-то коммерческие проекты, этот вопрос потребует более глубокого юридического изучения. Для меня подобные юридические вопросы – полные дебри. Тут должны разбираться специальные люди. Но надеюсь, что простое экспериментирование с MKL, так же как и расчеты в NumPy и SciLAB, прав Intel не нарушают. 🙂
Мои «околонаучные» проекты в основном сделаны в GFortran. А Intel MKL для Windows, к сожалению, тесно интегрирована только с Intel Fortran, который уже точно коммерческий и весьма недешевый. (Под Linux MKL официально работает в том числе и с компиляторами GCC).
Подключить Intel MKL к GFortran в Windows на первый взгляд казалось нетривиальной задачей, но, после определенного разбирательства, это у меня получилось. Как – хочу зафиксировать ниже. Если потом все-таки окажется, что юридически это делать нельзя :), Intel MKL всегда можно заменить на OpenBLAS. Как он подключается – тоже запишу здесь для удобства. (Сказанное относится к библиотекам LAPACK и BLAS – больше мне из MKL пока не нужно).
Intel MKL в GFortrаn
Дистрибутив Intel MKL содержит скомпилированные библиотеки .dll , а также библиотеки .lib для компиляции и линковки в Intel Fortran и среде MS Visual Studio.
Мы не используем Visual Studio, а работаем с GFortrаn в составе компиляторов GCC. В принципе, GCC работает и с библиотеками .lib . Однако, корректно подключить все нужные для компиляции MKL .lib к GFortrаn – не получается. Судя по форумам, не у меня одного. Поэтому, чтобы вызывать из нашей программы MKL, попробуем подготовить библиотеки в родном для GCC формате .a и ограничимся динамическим связыванием. В принципе, .a содержит дистрибутив Intel MKL для Linux (я не поленился, установил MKL в Ubuntu), но .a в Ликунсе и в Виндовсе – несовместимы.
Нам надо получить из .dll и .lib библиотеки .a . Это возможно. Оказалось, что проще не использовать для этого .lib вообще. Библиотеки .a можно сделать просто из *.dll . Правда, это будут библиотеки только для динамической компоновки. Т.е. чтобы наша программа работала, в системе должно иметься несколько *.dll с Intel MKL. Кстати, если у нас инсталлирована, например, Anaconda Python, то все необходимые *.dll библиотеки с ней уже установлены.
Итак, у нас есть ряд .dll с Intel MKL. Их можно взять как из Anaconda Python, так и из официального дистрибутива Intel MKL, скачанного с их сайта. Первое, по-моему, даже проще т.к. на сайте Intel нужна регистрация.
Оказалось, что нужные нам функции LAPACK и BLAS в привычном формате вызова содержатся конкретно в файле mkl_rt.dll . Чтобы посмотреть, какие функции входят в *.dll есть разные утилиты. Проще всего воспользоваться утилитой dumpbin.exe из состава Visual Studio:
Она выдает следующее:
Ниже по списку упоминаются привычные функции LAPACK dgesv , dposv и другие.
Чтобы сделать библиотеку *.a из *.dll сначала надо сформировать текстовый файл .def со списком названий функций, т.е. из того, что обведено красным. В начале этого файла надо написать слово EXPORTS . Т.е. файл .def должен выглядеть так:
Файл .def можно сформировать из того, что вывел dumpbin.exe руками, а можно сделать скрипт, например, на питоне (привожу его ниже).
Получив .def , осталось сформировать библиотеку *.a (она должна иметь префикс lib и суффикс .dll ) с помощью утилиты dlltool.exe из состава GCC:
Вот скрипт на Питоне, который делает все описанное. Чтобы он работал в системе должны быть доступны dumpbin.exe и dlltool.exe . Кстати, чтобы это проверить, в Windows можно набрать where dumpbin – система выведет путь, где он лежит, либо скажет, что не находит такого.
Полученный файл *.a надо положить туда, где GCC хранит свои библиотеки, либо в папку с нашими собственными библиотеками, например, C:\gcc\mylibs .
В принципе, это все. Проверим как все работает.
Протестируем MKL на примере из прошлого поста с тестом решения СЛАУ.
Тестовая программа на Фортране (в скоростном варианте с \(LL^T\) -разложением) выглядит так (файл LinTest.f90 ):
Условно статическая компиляция (пусть наша библиотека libmkl_rt.dll.a лежит в C:\gcc\mylibs ):
Запуская программу, получаем:
Время 0,33 с – точно такое же как и у лидера прошлого теста Intel Fortran + MKL .
Размер LinTest.exe получился 595 КБ (компилятор был из GCC 6.3.0 из дистрибутива MinGW64). В него статически прилинковались все библиотеки, кроме .dll -библиотек MKL.
Какие в принципе .dll нужны для работы нашей программы? Если мы хотим, чтобы наша программа работала на другой машине, не имеющей установленную Анаконду или другой вариант MKL, надо будет скопировать и обеспечить доступность 5-ти файлов:
100 МБ – конечно, не мало. Это вариант с последним дистрибутивом MLK с сайта Intel, версия 2017.2.187. Из дистрибутива Анаконды набегает поменьше – «всего» 86 МБ. Современный софт, он такой. 🙂
Полностью динамическая компиляция (убираем ключ -static ):
LinTest.exe получился крошечный – 57 КБ, но теперь для работы потребуются еще три .dll из GCC (данные для версии 6.3.0):
OpenBLAS в GFortrаn
Установить OpenBLAS – куда проще.
Скачиваем с официального сайта уже скомпилированные бинарные файлы в архиве OpenBLAS-v0.2.19-Win64-int32.zip (версия для 64-разрядных машин).
Переписываем файлы libopenblas.a и libopenblas.dll.a туда, где GCC хранит свои библиотеки, либо в папку с нашими собственными библиотеками, например, C:\gcc\mylibs .
Статическая компиляция (пусть наши библиотеки *.a лежат в C:\gcc\mylibs ):
Время на 48% больше, чем с Intel Fortran + MKL , но на самом деле тоже очень достойное.
Размер файла LinTest.exe , правда, громадный: 26 МБ.
Динамическая компиляция (убираем -static и добавляем к -lopenblas суффикс .dll ):
Научный форум dxdy
Добрый день!
вот уже как неделю не могу подключить к своему проекту библиотеки intel MKL,
может быть кто то объяснит мне как их правильно настроить и какие именно заголовочные файлы и библиотеки нужно добывлять
компилятор ругается на неразрешенный внешний символ, чего я только не делал
PS: сейчас пытаюсь с intel MKL из intel parallel studio xe 2015
Расскажу на своем примере, как я ее подключал в проекте в Visual Studio, на Fortran.
Общая настройка для обращения к библиотеке MKL
1. Файл – Создать – Проект – Intel Visual Fortran – Main Program Code;
2. Платформа решения – Диспетчер конфигураций – Платформа – Создать – ОК. Выставить x64 ;
3. Свойства проекта – Fortran – Libraries – Use Math Kernel Library – Parallel.
Дополнительные настройки MKL
Компактный интерфейс F95 настраивается в два шага:
1. Свойства проекта – Linker – Input – mkl_blas95_lp64.lib mkl_lapack95_lp64.lib
2. В коде после program подключить библиотеки
ShMaxG Большое спасибо за ответ, к сожалению я программирую на С
правильно ли я понимаю, файл blas95.mod — это что библиотека BLAS с интерфейсом FOTRAN?
Я ведь Вам дал уже ссылку: https://software.intel.com/en-us/articl . ne-advisor
1.Select Intel® product: Intel(R).
2.Select OS: Windows*
3.Select usage model of Intel® Xeon Phi™ Coprocessor: None
4.Select compiler.
5.Select architecture: Intel(R) 64
6.Select dynamic or static linking: Static
7.Select interface layer: 64-bit integer
8.Select threading layer: OpenNP threading
9.Select OpenMP library: Intel(R) (libiomp5)
Ниже получите Use this link line: . и Compiler options: . которые можете использовать в командной строке, не связываясь с оболочкой VS (на компе можно ставить одновременно различные версии VS: если нужной Вам версии на компе нет, то перед ее установкой сначала снесите intel parallel studio, а потом снова ее установите — она интегрируется во все VS, которые поддерживает).
as73251 приношу извинения, я просто сразу не понял что с этим всем делать,
но потом догадался прописать все .lib из Link Line Advisor прямо в шапке, вот так
- #include "mkl_lapack.h"
- #pragma comment(lib,"mkl_lapack95_ilp64.lib")
- #pragma comment(lib,"mkl_intel_ilp64.lib");
- #pragma comment(lib,"libiomp5md.lib");
- #pragma comment(lib,"mkl_core.lib");
- #pragma comment(lib,"mkl_intel_thread.lib");
всё скомпилировалось без ошибок,
только функции не работают — немного разобравшись обнаружил — после первого вызова dsyev (чтобы определить рабочую область) возвращает не понять что, если попытаться прочитать значения — прога зависает, в dsyer удалось прочитать wkopt — выдаёт нереально большое число для маленькой матрицы. Ну и дальше, соответственно ничего не работает .
Нашел ошибку в описании функции dsyevr https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/dsyevr_ex.c.htm
там размер переменной isuppz равен размеру матрицы N. Вот здесь http://www.netlib.org/lapack/explore-html/d5/de7/a18562_gaeed8a131adf56eaa2a9e5b1e0cce5718.html сказано,что этот массив должен быть в 2 раза больше числа собственных чисел, т. е. 2N. Вот память и переполнялась — всё зависало. После увеличения размеров isuppz всё заработало.
PS: только радости от этого мало, скорость и вправду увеличилась, но всего на 10% от того что было.
Уважаемый as73251 извиняюсь конечно за назойливость, но не могли бы Вы ответить на пару вопросов, чтобы подытожить результаты:
1. Правильно ли я установил MKL (из всего пакета я устанавливал только эту библиотеку, после установки запустил .bat файл, как написано в инструкции, как я понял для настройки компилятора), вроде как всё прошло успешно, но точно не уверен, вот результат:
2. Правильно ли я понимаю, что MKL оптимизирует программу под конкретное железо и на другом компе программа может работать даже хуже чем раньше? Я попробовал запустить на другом, и вместо 10% прироста, получил 10% падение производительности.
3. Правильно ли я понимаю, что судя по полученным результатам, в данном случае никакая оптимизация ничего существенного не даёт и уже точно не даст?
PARALLEL.RU — Информационно-аналитический центр по параллельным вычислениям
Наряду со стандартными для Linux компиляторами GNU, на кластерах вычислительного комплекса НИВЦ установлены компиляторы Intel C++ и Fortran. На настоящее время (начало 2006 года) на всех кластерах установлены компиляторы версии 9.1. Настоящая страница посвящена описанию наиболее важных опций и настроек этих компиляторов, а также их основных отличий от компиляторов GNU. Страница ориентирована, в основном, на пользователей кластеров НИВЦ МГУ, но может быть полезна и другим русскоязычным пользователям. Здесь не затрагиваются вопросы, связанные с компиляцией для платформы IA-64.
Также на всех кластерах установлена библиотека Intel Kernel Math Library (MKL) версии 8.0.2. Библиотека располагается в каталоге /usr/mkl. Обращаем внимание на то, что в каталоге lib доступны подкаталоги 32, 64 и em64t. На кластере Ant необходимо использовать библиотеки из подкаталога em64t, а на остальных кластерах — из подкаталога 32. Вся необходимая документация и примеры могут быть получены из каталога /usr/mkl/doc.
Содержание
- Для чего потребовались новые компиляторы?
- Как ими воспользоваться?
- Входные файлы
- Характеристики компиляторов Intel.
- Основные опции компиляторов.
- Производительность.
- Библиотеки.
- Сборка исполняемого файла.
- Совместное использование модулей на Фортране и Си.
- Совместимость компиляторов Intel и GCC.
- Поддержка стандартов.
- Ссылки.
Для чего потребовались новые компиляторы?
Необходимость в новых компиляторах возникла, главным образом, а) для поддержки программирования на языке Фортран 90, а также б) для более мощной оптимизации программ на языке Фортран, чем обеспечивает компилятор g77, использующий трансляцию в язык Си и затем компиляцию с помощью gcc.
Этим требованиям удовлетворяют также компиляторы PGI (Portland Group), но компания-разработчик отказалась поставлять их в Россию.
Как воспользоваться?
Компиляторы Intel вызываются с помощью команд icc (C или C++), icpc (C++) и ifort (Фортран 77/90). Команды mpicc, mpiCC и mpif77 для компиляции и сборки MPI-программ также настроены на использование компиляторов Intel.
Сохраняется также возможность пользоваться компиляторами GNU с помощью команд mpigcc, mpig++ и mpig77 (Фортран 90 не поддерживается).
Входные файлы
По умолчанию, файлы с расширением .cpp и .cxx считаются исходными текстами на языке С++, файлы с расширением .c — исходными текстами на языке Си, а компилятор icpc также компилирует файлы .c как исходные тексты на С++.
Файлы с расширениями .f, .ftn и .for распознаются как исходные тексты на языке Фотран, с фиксированной формой записи, а файлы .fpp и .F дополнительно пропускаются через препроцессор языка Фортран. Файлы с расширением .f90 считаются исходными текстами Фортран 90/95 со свободной формой записи. Явным образом можно задать фиксированную или свободную форму записи Фортран-программ с помощью опций -FI и -FR соответственно.
Файлы с расширением .s распознаются как код на языке ассемблера для IA-32.
Характеристики компиляторов Intel
- Значительная оптимизация
видимо, здесь имеется в виду оптимизация кода еще на высоком уровне, т.е. прежде всего, различные преобразования циклов, что с большим или меньшим успехом делают почти все компиляторы - Оптимизация вычислений с плавающей точкой
видимо, имеется в виду прежде всего максимальное использование команд, реализованных на аппаратном уровне - Межпроцедурные оптимизации
т.е. глобальная оптимизация всей программы, в отличие от обычной оптимизации, которая затрагивает только код конкретных функций - Оптимизация на базе профилей
т.е. возможность прогнать программу в тестовом режиме, собрать данные о времени прохождение тех или иных фрагментов кода внутри часто используемых функций, а затем использовать эти данные для оптимизации - Поддержка системы команд SSE в процессорах Pentium III
примечание: для вычислительных задач больший интерес представляют команды SSE2, т.е. векторные команды над 64-разрядными вещественными числами, но они поддерживаются только в процессорах Pentium 4, которых в нашем распоряжении пока нет - Автоматическая векторизация
т.е. опять же, использование команд SSE и SSE2, вставляемых автоматически компилятором - Поддержка OpenMP для программирования на SMP-системах
примечание: на кластере рекомендуется преимущественно пользоваться интерфейсом MPI; широкое использование OpenMP на кластере не предполагается и таких экспериментов пока не проводилось; но, вероятно, имеет смысл пользоваться библиотеками (BLAS и др.), распараллеленными для общей памяти. - Предвыборка данных
т.е. видимо, использование команд предварительной загрузки из памяти в кэш данных, которые понадобятся через некоторое время - «Диспетчеризация» кода для различных процессоров
т.е. возможность генерации кода для различных процессоров в одном исполняемом файле, что позволяет использовать преимущества новейших процессоров для достижения на них наибольшей производительности, при сохранении двоичной совместимости программ с более ранними процессорами; на нашем кластере это пока не актуально, т.к. используются только процессоры Pentium III, а также не предполагается передача и запуск на других машинах программ, откомпилированных на кластере
Основные опции компиляторов
Наиболее интересными, конечно же, являются опции оптимизации кода. Большинство опций являются общими для компиляторов С++ и Фортран. Более подробное описанием опций смотри в англоязычных руководствах пользователя.
| Уровни оптимизации | |
|---|---|
| Опция | Описание |
| -O0 | Отключает оптимизацию |
| -O1 или -O2 | Базовая оптимизация на скорость работы. Отключается инлайн-вставка библиотечных функций. Для компилятора С++ эти опции дают одинаковую оптимизацию, для компилятора Фортрана опция -O2 предпочтительнее, т.к. включает еще раскрутку циклов. |
| -O3 | Более мощная оптимизация, включая преобразования циклов, предвыборку данных, использование OpenMP. На некоторых программах может не гарантироваться повышенная производительность по сравнению с -O2. Имеет смысл использовать вместе с опциями векторизации -xK и -xW. |
| -unroll[n] | Включает раскрутку циклов до n раз. |
| Оптимизации под конкретный процессор | |
| Опция | Описание |
| -tpp6 | Оптимизация для процессоров Penitum Pro, Pentium II и Pentium III |
| -tpp7 | Оптимизация для процессоров Penitum 4 (эта опция включена по умолчанию для компилятора на IA-32) |
| -xM | Генерация кода с использованием расширений MMX, специфических для процессоров Pentium MMX, Pentium II и более поздних |
| -xK | Генерация кода с использованием расширений SSE, специфических для процессоров Pentium III |
| -xW | Генерация кода с использованием расширений SSE2, специфических для процессоров Pentium 4 |
| Межпроцедурная оптимизация | |
| -ip | Включается межпроцедурная оптимизация внутри одного файла. Если при этом указать опцию -ip_no_inlining, то отключаются инлайн-вставки функций. |
| -ipo | Включается межпроцедурная оптимизация между различными файлами |
| Оптимизации с использованием профилей | |
| -prof_gen | Генерируется «профилировочный» код, который будет использован для профилировки, т.е. сбора данных о частоте прохождения тех или иных мест в программе |
| -prof_use | Производится оптимизация на основе данных, полученных на этапе профилировки. Имеет смысл использовать вместе с опцией межпроцедурной оптимизации -ipo. |
| Распараллеливание для SMP-систем | |
| -openmp | Включается поддержка стандарта OpenMP 2.0 |
| -parallel | Включается автоматическое распараллеливание циклов |
Производительность
Согласно результатам прогона тестов SPEC CPU2000, опубликованным на сервере ixbt.com, компиляторы Intel версии 6.0 практически везде оказались лучше по сравнению с компиляторами gcc версий 2.95.3, 2.96 и 3.1, и PGI версии 4.0.2. Эти тесты проводились в 2002 году на компьютере с процессором Pentium 4/1.7 ГГц и ОС RedHat Linux 7.3.
Согласно результатам тестов, проведенных компанией Polyhedron, компилятор Intel Fortran версии 7.0 почти везде оказался лучше по сравнению с другими компиляторами Fortran 77 для Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). Только в некоторых тестах компилятор Intel незначительно проигрывает компиляторам Absoft, NAG и Lahey. Эти тесты были проведены на компьютере с процессором Pentium 4/1.8 ГГц и ОС Mandrake Linux 8.1.
Компиляторы Intel версии 9.1 также обгоняют по производительности компиялторы gcc, и показывают производительность сравнимую с Absoft, PathScale и PGI.
Мы будем благодарны тем пользователям и читателям, которые пришлют нам данные по влиянию выбора компилятора (GCC или Intel) и опций оптимизации на скорость работы на их реальных задачах.
Библиотеки
Компилятор языка Си использует runtime-библиотеку, разработанную в рамках проекта GNU (libc.a).
- libcprts.a — runtime-библиотека языка С++ разработки Dinkumware.
- libcxa.a — дополнительная runtime-библиотека для С++ разработки Intel.
- libimf.a — библиотека математических функций разработки Intel, в которую входят оптимизированные и высокоточные реализации тригонометрических, гиперболических, экспоненциальных, специальных, комплексных и других функций (подробнее см. список функций).
- libirc.a — runtime-поддержка профилировки (PGO) и «диспетчеризации» кода в зависимости от процессора (см. выше).
- libguide.a — реализация OpenMP.
В этом списке перечислены статических библиотек, но для большинства из них существуют также динамические, т.е. подключаемые во время запуска, варианты (.so).
Вместе с компилятором Фортрана поставляются следующие библиотеки: libCEPCF90.a, libIEPCF90.a, libintrins.a, libF90.a, также используется библиотека математических функций libimf.a.
Сборка исполняемого файла
Подключение библиотек возможно статическое (во время сборки) или динамическое (во время запуск программы). Динамический подход позволяет уменьшить размер выполняемого файла, позволяет разделять в памяти одну и ту же копию библиотеки, но для этого необходимо установить на каждом узле, где будут запускаться программы, полный набор используемых динамических библиотек.
Таким образом, если Вы установили компилятор Intel на своей машине с Linux и хотите запускать собранные исполняемые файлы на других машинах, то нужно или использовать статическую сборку (что проще) или скопировать на эти машины динамические библиотеки Intel (обычно из директории вида /opt/intel/compiler70/ia32/lib) в одну из директорий, перечисленных в файле /etc/ld.so.conf, а также позаботиться о том, чтобы на этих машинах был установлен одинаковый набор динамических библиотек GNU/Linux.
По умолчанию, все библиотеки разработки Intel (кроме libcxa.so) подключаются статически, а все системные библиотеки Linux и библиотеки GNU подключаются динамически. С помощью опции -static можно заставить сборщик (редактор связей) подключить все библиотеки статически (что увеличит объем исполняемого файла), а с помощью опции -i_dynamic можно подключать динамически все библиотеки разработки Intel.
При подключении дополнительных библиотек с помощью опции вида -lбиблиотека может понадобиться использовать опцию -Lдиректория, чтобы задать путь, где размещаются библиотеки.
С помощью опций -Bstatic и -Bdynamic можно явно задавать динамическое или статическое подключение каждой из библиотек, заданных в командной строке.
С помощью опции -c сборка исполняемого файла отключается и производится только компиляция (генерация объектного модуля).
Совместное использование модулей на Фортране и Си
Чтобы совместно использовать модули, написанные на языках Фортран и Си, нужно согласовать именование процедур в объектных модулях, передачу параметров, а также доступ к глобальным переменным, если такие есть.
По умолчанию, компилятор Intel Fortran переводит имена процедур в нижний регистр и добавляет в конец имени знак подчеркивания. Компилятор Си никогда не изменяет имена функций. Таким образом, если мы хотим из модуля на Фортране вызвать функцию или процедуру FNNAME, реализованную на Си, то в модуле на Си она должна именоваться fnname_.
Компилятор Фортрана поддерживает опцию -nus [имя файла], которая позволяет отключать добавление знаков подчеркивания к внутренним именам процедур. Если задано имя файла, то это производится только для имен процедур, перечисленным в заданном файле.
По умолчанию, на Фортране параметры передаются по ссылке, а на Си — всегда по значению. Таким образом, при вызове Фортран-процедуры из модуля на Си мы должны в качестве параметров передавать указатели на соответствующие переменные, содержащие значения фактических параметров. При написании на Си функции, которую надо будет вызывать из модуля на Фортране, мы должны описывать формальные параметры как указатели соответствующих типов.
В модулях на Си возможно использование COMMON-блоков, определенных внутри модулей на Фортране (подробнее об этом см. Intel Fortran Compiler User’s Guide, глава Mixing C and Fortran).
Совместное использование компиляторов Intel и GCC
Объектные модули на языке Си, полученные компилятором Intel C++, совместимы с модулями, полученными компилятором GCC и библиотекой GNU для языка Си. Таким образом, эти модули могут совместно использоваться в одной программе, собираемой с помощью команд icc или gcc, но для корректного подключения библиотек Intel рекомендуется использовать icc.
Компилятор Intel поддерживает ряд нестандартных расширений языка Си, используемых в рамках проекта GNU и поддерживаемых компилятором GCC (но не все из них, подробнее см. здесь).
О совместимости объектных модулей на языках С++ и Фортран в руководстве пользователя ничего не сказано, видимо, она не поддерживается.
Поддержка стандартов
Компилятор Intel C++ Compiler 7.0 for Linux поддерживает стандарт языка Си ANSI/ISO (ISO/IEC 9899/1990). Возможно установка строгой совместимости cо стадартом ANSI C (-ansi) или расширенного диалекта ANSI C (-Xa). При использовании опции -c99 поддерживается некоторое подмножество стандарта C99: ключевое слова restrict, массивы переменной длины, комплексные числа, объявления переменных в произвольных местах кода, макро-определения с переменным числом аргументов, inline-функции, булевский тип и др.
Поддерживается стандарт ISO/IEC 14882:1998 языка С++.
Компилятор Intel Fortran Compiler 7.0 for Linux поддерживает спецификацию ISO Fortran 95, а также совместим на уровне исходных текстов с компилятором Compaq Visual Fortran 6.6.