Несколько лет назад я был удивлен, когда обнаружил, что Intel продает компиляторы, совместимые с Visual Studio. Я попробовал это, в частности, для C / C ++, а также для фантастических инструментов диагностики. Но код не был настолько сложным в вычислительном отношении, чтобы заметить разницу. Единственное впечатление было: действительно ли Intel действительно сделала это для меня сейчас, вау, потрясающие инструменты с разрешением наносекунд, невероятно. Но испытание закончилось, и команда никогда серьезно не рассматривала покупку.
По вашему опыту, если стоимость лицензии не имеет значения, какой поставщик победит?
Это не широкий или расплывчатый вопрос или попытка разжечь священную войну. Этот вопрос касается двух очень заметных инструментов. Никому не нравится, когда у инструментов есть какие-то загадки или сюрпризы. И выбор между лучшим и лучшим - это всегда боль. Я также понимаю, что трава - это всегда более зеленый аргумент. Я хочу услышать все истории "что, если".
Что, если Intel просто локально оптимизирует его для чип-шагинга месяца, и не каждая аппаратная цель будет работать так же хорошо, как скомпилированная Microsoft? Что, если аппаратное обеспечение AMD является целью, и все замедлится без причины? Или, с другой стороны, что, если у оборудования Intel так много незаметных возможностей, что разработчики компиляторов Microsoft слишком медлительны, чтобы принять его и никогда не внедрять в компилятор? Что, если оба они в точности одинаковы, на самом деле одна кодовая база просто обернута в две разные коробки и лицензирована для обоих поставщиков каким-то сторонним магазином?
И так далее. Но кто-то знает некоторые ответы.
Ответы:
ВНИМАНИЕ: Ответ основан на собственном опыте - YMMV
Если код действительно вычислительно дорог, да, определенно . Я видел улучшение более чем в 20 раз с прежним компилятором Intel C ++ (теперь Intel Studio, если я правильно помню) по сравнению со стандартным компилятором Microsoft Visual C ++. Это правда, что код был очень далек от совершенства, и это, возможно, сыграло свою роль (на самом деле, именно поэтому мы потрудились использовать компилятор Intel, это было проще, чем рефакторинг гигантской кодовой базы), также процессор, используемый для выполнения кода, был Intel Core 2 Quad, который является идеальным процессором для такой вещи, но результаты были шокирующими. Сам компилятор содержит множество способов оптимизации кода, в том числе нацеливание на конкретный процессор с точки зрения, скажем, возможностей SSE . Это действительно делает
-O2
/-O3
убегает стыдно. И это былоперед использованием профилировщика.Обратите внимание, что, однако, включение действительно агрессивных оптимизаций заставит компиляцию занять некоторое время, два часа для большого проекта вовсе не невозможны. Кроме того, при высоких уровнях оптимизации существует большая вероятность появления ошибки в коде (это также можно наблюдать с помощью gcc
-O3
). Для проекта, который вы хорошо знаете, это может быть плюсом, поскольку вы найдете и исправите возможные ошибки, которые вы не уловили ранее, но при составлении волосатого беспорядка вы просто скрещиваете пальцы и молитесь богам x86.Немного о производительности на машинах AMD: она не так хороша, как процессоры Intel, но все же намного лучше, чем компилятор MS C ++ (опять же из моего опыта). Причина в том, что вы также можете выбрать общий процессор с поддержкой SSE2 (например). Тогда процессоры AMD с SSE2 не будут сильно различаться. Тем не менее, компилятор Intel на процессоре Intel действительно ворует шоу. Однако это не все двойные радуги и блестящие единороги. Были некоторые серьезные обвинения в том, что двоичные файлы вообще не работают на процессорах, не принадлежащих к GenuineIntel, и (это признается) искусственно вызвали снижение производительности на процессорах других производителей., Также обратите внимание, что это информация по крайней мере 3 года назад, и ее действительность на данный момент неизвестна, НО описания нового продукта дают двоичным картам карт-бланш для медленной работы, которую Intel считает подходящей для процессоров других производителей.
Я не знаю, что это за Intel и почему они делают такие хорошие инструменты для числовых вычислений, но взгляните на это тоже: http://julialang.org/ . Есть сравнение, и если вы посмотрите на последний ряд, MATLAB сияет, побеждая и код на C, и Джулию , и меня поражает то, что авторы считают, что причина - Math Kernel Library от Intel .
Я понимаю, что это звучит очень похоже на рекламу инструментария Intel Compiler, но по моему опыту это действительно хорошо сработало, и даже простая логика подсказывает, что парни, которые делают процессоры, должны лучше знать, как программировать для них. IMO, компилятор Intel C ++ сжимает каждый последний возможный прирост производительности.
источник
Intel Compiler имеет репутацию производителя очень эффективного числового кода:
https://stackoverflow.com/questions/1733627/anyone-here-has-benchmarked-intel-c-compiler-and-gcc
http://www.open-mag.com/754088105111.htm
http://www.freewebs.com/godaves/javabench_revisited/
Пожалуйста , обратите внимание , что я не утверждаю , что он является самым быстрым компилятором там, но это , безусловно , имеет очень хорошую репутацию эффективности. Обратите внимание, что авторы «официальных» двоичных файлов LAPACK для Windows используют компилятор Intel Fortran для их сборки: http://icl.cs.utk.edu/lapack-for-windows/, и они должны кое-что знать об эффективности.
источник
Intel C ++ имеет несколько преимуществ перед gcc в дополнение к генератору кода. Оба из них (в значительной степени) связаны с тем, что он основан на интерфейсе EDG . Что бы там ни было, оба они (медленно) разрушаются, поэтому преимущества не так велики, как раньше.
Во-первых, как правило, он выдает гораздо лучшие сообщения об ошибках. Возможно, вы захотите взглянуть на сравнение сообщений об ошибках между Clang и gcc. Intel C ++ (наряду с большинством других, основанных на интерфейсе EDG) выпускает диагностические средства, аналогичные Clang, в течение многих лет.
Во-вторых, интерфейс EDG также хорошо известен как исключительно хорошая языковая совместимость, так как генератор кода Intel предназначен для создания быстрого кода. Практически любой разумной мерой интерфейс EDG обеспечивает лучшее соответствие C ++ 98, 03 или (в текущих версиях) C ++ 0x, чем любой другой доступный компилятор.
Как я уже сказал, оба эти преимущества со временем размывались. Последние версии gcc довольно прилично соответствуют языку. Clang имеет значительно более качественные сообщения об ошибках, и также делает успехи в реализации всего языка C ++. Однако когда вы приступите прямо к этому вопросу, Intel C ++ по-прежнему лучше, чем любой из них в обоих отношениях, и это один пакет, который делает большинство вещей правильно, вместо того, чтобы нуждаться в одном компиляторе для хорошей диагностики и другом для лучшей совместимости и генерации кода.
источник
Мы попробовали это на работе некоторое время назад. Большая часть нашей кодовой базы находится в Delphi, но у нас есть некоторые высокопроизводительные вычислительные функции, которые кто-то думал, что было бы хорошей идеей сделать в C ++ DLL, когда. И один из моих коллег услышал много хорошего о компиляторе Intel, поэтому решил попробовать. Мы перестроили DLL в компиляторе Intel и провели несколько тестов скорости, и результаты настолько его удивили, что он решил, что, должно быть, что-то делает не так.
DLL должна вычислить некоторые очень сложные проблемы с компонентами комбинаторики и топологии, которые технически относятся к классу сложности NP-hard, если мы сделали их «правильно», но мы используем различные эвристические методы, чтобы избежать производительности NP. Несмотря на это, происходит большое количество цифр. И для тестов, которые мы проводили, разница между компилятором VS и компилятором Intel была либо в пределах epsilon, либо компилятор Intel был заметно медленнее, обычно где-то в районе 20%. И так было, независимо от того, какие изменения он внес в настройки компиляции, чтобы заставить компилятор Intel создавать более быстрый код. Так что в итоге мы не переключились на него.
Конечно, это только один пример из реальной жизни. Ваш пробег может варьироваться.
источник
Во встроенном приложении, над которым я когда-то работал, испытание компилятора Intel показало, что это избавит нас от необходимости раскручивать новое оборудование с более высокой производительностью. Стоимость нового оборудования составляла около 10 долларов США за единицу, прогнозируемые продажи - 1 миллион единиц, добавьте стоимость разработки и задержки проекта. Вариантом 2 был профиль / микрооптимизация уже достаточно хорошо профилированной / оптимизированной базы кода - неизвестные результаты, неизвестное время.
Как вы думаете, что сказал начальник, когда мы попросили средства на покупку компилятора .......
Однако - это был очень удачный и более редкий случай - 10% более быстрый вывод кода компилятором Intel подтолкнул нас к правильной стороне производительности. Если бы мы были уже на правой стороне, или были бы на 10% больше, это не имело бы никакого значения. Если бы у нас были инженеры, мы, вероятно, могли бы оптимизировать код и сохранить аппаратное вращение и не нуждаться в компиляторе Intel, но риск был высоким, и компилятор Intel работал дешевле, чем время разработки.
В итоге я бы сказал, что это форма микрооптимизации - не делайте этого, пока не узнаете, что вам нужно, и только после того, как вы профилировали и нашли реальную причину проблем. Это особенно удачный выбор вашего профиля, который показывает, что вы медлительны «везде» и у вас нет определенных узких мест.
источник
Я только столкнулся с тремя преимуществами:
Он поддерживает функции новых процессоров Intel гораздо раньше, чем другие компиляторы.
Это отличный дополнительный компилятор для выдачи предупреждений и выявления проблем, которые пропускают другие компиляторы. GCC ловит некоторые вещи, которые ICC не делает, и наоборот. Visual studio ловит некоторые вещи, которые ICC не делает, и наоборот.
Он намного лучше выполняет циклы параллелизации (автоматически распределяя их по нескольким потокам), чем любой другой компилятор. Код не очень выигрывает от этого, но когда у вас есть код, который может это сделать, это может иметь огромное значение.
источник
Мы используем компилятор intel для каждого критичного к производительности проекта нашей кодовой базы. Самое замечательное в этом то, что оптимизирующий код действительно поддерживается. Вместо того, чтобы вручную добавлять вызовы __mm повсюду и указывать компилятору на предварительную выборку данных, и все это снова будет неоптимальным в следующем выпуске, вы просто немного переставляете код и получаете безумное ускорение.
Часто за оптимизированным кодом легче следовать, чем за оптимизированную руку, это быстрее, чем за оптимизированную руку, и когда выпускается новый набор инструкций, компилятор будет использовать этот набор инструкций. Это фантастика.
То же самое касается и компилятора arm (от arm, а не intel), если ваш релиз на arm, делает большую работу в векторизации для вас.
источник
Проверьте эту страницу тестов. Короче говоря, Intel выигрывает.
Но маржа может быть не такой большой: если вы компилируете в 32-битную систему и ваша система сборки не может поддерживать оптимизацию по профилю, выигрыш составляет порядка 10%. Стоит ли такое улучшение проблем и более продолжительное время компиляции?
источник
Говорят, что Intel выпустила компилятор Intel C ++ v13.0 для ОС Android, свою первую попытку предложить оптимизирующий компилятор C / C ++, разработанный специально для мобильной платформы Google.
Разработчики могут использовать компилятор в системах на базе Linux * для создания приложений для устройств Android на базе процессоров Intel, включая процессор Intel® Atom ™. Компилятор Intel совместим с GNU C ++ и инструментами разработчика в Android Native Development Kit (NDK). Компилятор также нельзя использовать ни на одной машине для разработки. Ни Windows, ни OS X не поддерживаются; инструменты сертифицированы только для использования с Ubuntu 10.04 или 11.04
В текущей версии Android NDK по умолчанию используется версия 4.6 набора инструментов Gnu Compiler Collection (GCC) с открытым исходным кодом. Но компиляторы Intel включают множество запатентованных оптимизаций для своих собственных чипов и могут часто выводить исполняемый код, который работает лучше, чем код, создаваемый сторонними компиляторами, такими как GCC.
источник