Кто-нибудь здесь использует компилятор Intel С++ вместо компилятора Microsoft Visual С++?
Мне было бы очень интересно услышать ваш опыт интеграции, производительности и времени сборки.
Кто-нибудь здесь использует компилятор Intel С++ вместо компилятора Microsoft Visual С++?
Мне было бы очень интересно услышать ваш опыт интеграции, производительности и времени сборки.
Компилятор Intel является одним из самых передовых компиляторов С++, имеющим ряд преимуществ, например, для компилятора Microsoft Visual С++ и одного серьезного недостатка. К преимуществам относятся:
Очень хорошая поддержка SIMD, насколько мне удалось узнать, именно компилятор имеет лучшую поддержку для инструкций SIMD.
Поддерживает как автоматическую распараллеливание (многоядерные оптимизации), так и ручную (через OpenMP), и делает это очень хорошо.
Поддержка диспетчеризации CPU, это действительно важно, поскольку это позволяет компилятору ориентировать процессор на оптимизированные команды при запуске программы. Насколько я могу судить, это единственный компилятор С++, который делает это, если только g++ не представила это еще в своем.
Он часто поставляется с оптимизированными библиотеками, такими как библиотеки математики и изображений.
Однако у него есть один главный недостаток: диспетчер, как упоминалось выше, работает только на процессорах Intel, это означает, что передовые оптимизации будут оставлены на процессорах AMD. Для этого есть обходной путь, но это все еще большая проблема с компилятором.
Чтобы обойти проблему диспетчера, можно заменить код диспетчера, созданный версией, работающей на процессорах AMD, можно, например, использовать Agner Fog's библиотека asmlib, которая заменяет созданную компилятором функцию диспетчера. Гораздо больше информации о проблеме диспетчеризации и более подробных технических объяснениях некоторых тем можно найти в Оптимизация программного обеспечения на С++ - также от Anger (что действительно стоит прочитать).
В личном примечании я использовал компилятор Intel С++ с Visual Studio 2005, где он работал безупречно, у меня не возникало никаких проблем с языковыми расширениями на базе Microsoft, он, казалось, понимал те, которые я использовал, но, возможно, те, Джон Кноллер отличались от тех, которые были у меня в моих проектах.
В то время как мне нравится компилятор Intel, я в настоящее время работаю с компилятором microsoft С++, просто из-за финансовых дополнительных инвестиций, которые требует компилятор Intel. Я бы использовал только компилятор Intel в качестве альтернативы Microsoft или компилятору GNU, если производительность была критической для моего проекта, и у меня была финансовая часть в порядке;)
У меня был только один опыт работы с этим компилятором, скомпилировав STLPort. MSVC потребовалось около 5 минут, чтобы скомпилировать его, и ICC составлял более часа. Похоже, что их сборка шаблонов очень медленная. Помимо этого, я слышал только хорошие вещи.
Здесь что-то интересное:
Компилятор Intel может создавать разные версии фрагментов кода, с каждой оптимизирована для конкретной процессор и/или набор команд (SSE2, SSE3 и т.д.). Система обнаруживает какой процессор он работает и выбирает оптимальный путь кода соответственно; Диспетчер процессора, как он называл.
"Однако диспетчер процессора Intel не только проверяет, какая инструкция набор поддерживается процессором, он также проверяет строку идентификатора поставщика," Fog подробности: "Если строка поставщика говорит" GenuineIntel "затем использует оптимальный путь кода. Если CPU не от Intel, то, в большинстве случаев, это будет запускать самую медленную версию кода, даже если процессор полностью совместимый с лучшей версией."
Статья в OSnews здесь
Я не использую компилятор Intel С++ для работы/личного (я бы хотел).
Я бы использовал его, потому что он:
Отличная встроенная поддержка ассемблера. Intel С++ поддерживает синтаксисы ассемблера Intel и AT & T (GCC) для платформ x86 и x64. Visual С++ может обрабатывать только синтаксис сборки Intel и только для x86.
Поддержка наборов инструкций SSE3, SSSE3 и SSE4. Visual С++ поддерживает SSE и SSE2.
Основан на EDG С++, который имеет полную стандартную реализацию ISO/IEC 14882: 2003. Это означает, что вы можете использовать/изучать каждую функцию С++.
Я пробовал использовать Intel С++ на моей предыдущей работе. IIRC, он действительно генерировал более эффективный код за счет времени компиляции. Мы не использовали его для производства, но по причинам, о которых я не помню.
Важным отличием от MSVC является то, что компилятор Intel поддерживает C99.
Анекдотически, я обнаружил, что компилятор Intel вылетает чаще, чем Visual С++. Его диагностика немного более тщательно и четко написана, чем VC. Таким образом, возможно, что компилятор предоставит диагностику, которая не была предоставлена с помощью VC, или выйдет из строя там, где VC не сделал этого, делая ваше преобразование более дорогостоящим.
Тем не менее, я считаю, что компилятор Intel позволяет вам связываться с временем выполнения Microsoft, как CRT, снижая стоимость перехода.
Если вы взаимодействуете с управляемым кодом, вы, вероятно, должны придерживаться компилятора Microsoft.
Недавние компиляторы Intel добились значительно более высокой производительности в тяжелых тестах с плавающей запятой и похожи на Visual С++ на целые тяжелые тесты. Тем не менее, он сильно варьируется в зависимости от программы и независимо от того, используете ли вы создание кода времени или оптимизацию по профилю. Если производительность важна для вас, вам нужно будет сравнить свое приложение перед выбором. Я бы сказал только, что если вы занимаетесь научными вычислениями, вероятно, стоит потратить время на исследование.
Intel позволяет вам проводить месячную бесплатную пробную версию своего компилятора, чтобы вы могли попробовать все это для себя.
Я использую компилятор Intel С++ с первой версии Intel Parallel Studio, и до сих пор я не испытывал соблазна вернуться. Здесь приведен обзор этих преимуществ, а также (некоторые очевидные) наблюдения.
<сильные > Преимущества
Недостатки
Нейтральные
В прошлый раз, когда компания, с которой я работаю, сравнивала эти два года, примерно год назад (возможно, 2). Компилятор Intel генерировал более быстрый код, как правило, только немного быстрее, но в некоторых случаях совсем немного.
Но он не смог обработать некоторые из расширений языка MS, на которые мы зависели, поэтому мы закончили придерживаться MS. Это был VS 2005, с которым мы сравнивали это. И я размахиваю своим мозгом, чтобы точно помнить, что расширение MS, которое компилятор Intel не мог обработать. Я вернусь и отредактирую этот пост, если смогу запомнить.
У компилятора Intel С++ есть AMAZING (человеческая) поддержка. Разговор с Microsoft может буквально занять несколько дней. Моя нетривиальная проблема была решена через чат менее чем за 10 минут (включая время проверки членства).
EDIT: я поговорил с Microsoft о проблемах в своих продуктах, таких как Office 2007, даже получил сообщение об ошибке. Хотя я в конечном итоге добился успеха, общий размер и сложность их продуктов и иерархии организаций являются сложными.