Кто-либо здесь сравнил компилятора C++ Intel и GCC?

Я не уверен, что Вы пытаетесь сделать путем желания преобразовать C# в Java, но если это - .net совместимость, в которой Вы нуждаетесь, Вы могли бы хотеть проверить Моно

26
задан Peter Mortensen 14 November 2009 в 10:17
поделиться

6 ответов

Вы хотите использовать os.stat () :

os.stat(path)
 Perform the equivalent of a stat() system call on the given path. 
 (This function follows symlinks; to stat a symlink use lstat().)

The return value is an object whose attributes correspond to the 
members of the stat structure, namely:

- st_mode - protection bits,
- st_ino - inode number,
- st_dev - device,
- st_nlink - number of hard links,
- st_uid - user id of owner,
- st_gid - group id of owner,
- st_size - size of file, in bytes,
- st_atime - time of most recent access,
- st_mtime - time of most recent content modification,
- st_ctime - platform dependent; time of most recent metadata 
             change on Unix, or the time of creation on Windows)

Пример использования для получения UID владельца:

from os import stat
stat(my_filename).st_uid

Обратите внимание, однако, что stat возвращает номер идентификатора пользователя ( например, 0 для root), а не фактическое имя пользователя.

Он дает вам st_uid , который является идентификатором пользователя владельца. Затем вам нужно преобразовать его в имя. Для этого используйте pwd.getpwuid .

Насколько я понимаю, я обнаружил, что GCC + LLVM генерирует лучший код. Для программ, которые я написал до того, как серьезно занялся оптимизацией (как я уже писал), Intel в целом была лучше

. Результаты Intel были разными; с некоторыми программами он справлялся намного лучше, а с некоторыми - хуже. Он очень хорошо справлялся с необработанной обработкой, но я предпочитаю GCC + LLVM, потому что, когда он помещен в контекст более крупной (нормальной) программы ... он работает лучше.

Intel выиграла из-за установки, цифры на огромных наборы данных.

Один только GCC генерировал самый медленный код, хотя он может быть таким же быстрым с измерениями и нанооптимизациями. Я предпочитаю избегать их, потому что ветер может, так сказать, изменить направление со следующим выпуском компилятора.

Я никогда не измерял плохо написанные программы в этом тесте (то есть результаты превосходили результаты дистрибутивов популярных библиотек производительности).

Наконец, программы писались в течение нескольких лет с использованием GCC в качестве основного компилятора в то время.

Обновление: я также включал оптимизацию / расширения для Core2Duo. Программы были достаточно чистыми, чтобы обеспечить строгое алиасинг.

19
ответ дан 28 November 2019 в 06:22
поделиться

Здесь есть интересный PDF , в котором сравниваются несколько компиляторов.

25
ответ дан 28 November 2019 в 06:22
поделиться

Команда MySQL однажды сообщила, что icc дает им примерно 10% прирост производительности по сравнению с gcc. Я попытаюсь найти ссылку.

В общем, я обнаружил, что «родные» компиляторы работают лучше, чем gcc на их соответствующих платформах

edit: Я был немного не в себе. Типичная прибыль составляла 20-30%, а не 10%. Некоторые узкие корпуса получили удвоение производительности. http://www.mysqlperformanceblog.com/files/presentations/LinuxWorld2004-Intel.pdf

15
ответ дан 28 November 2019 в 06:22
поделиться

Раньше я работал над довольно большой системой обработки сигналов, которая работала в большом кластере. Раньше мы считали, что математика требует больших усилий, компилятор Intel давал нам примерно на 10% меньше нагрузки на процессор, чем GCC. Это очень ненаучно, но это был наш опыт (это было около 18 месяцев назад).

Было бы интересно, если бы мы также могли использовать математические библиотеки Intel, которые используют их набор микросхем более эффективно.

1
ответ дан 28 November 2019 в 06:22
поделиться

Мы используем компилятор Intel в нашем продукте (DB2), в Linux и Windows IA32 / AMD64, а также на OS X (т.е. все порты нашей платформы Intel, кроме SunAMD).

Я не знаю цифр, но производительность достаточно высока, чтобы мы:

  • платили за компилятор, который, как мне сказали, очень дорогой.
  • живут с вдвое более медленным временем сборки (в основном из-за времени, которое он тратит на получение лицензий, прежде чем он позволяет себе запускаться).
5
ответ дан 28 November 2019 в 06:22
поделиться

Я полагаю, это зависит от кода, но с кодовой базой, над которой я работаю сейчас, ICC 11.035 дает почти двукратное улучшение по сравнению с gcc 4.4.0 на Xeon 5504.

icc параметры: -O2 -fno-alias
Параметры gcc: -O3 -msse3 -mfpmath = sse -fargument-noalias-global

Параметры относятся только к файлу, содержащему ресурсоемкие вычисления код, где я знаю, что нет алиасинга. Однопоточный код с 5-уровневым вложенным циклом.

Хотя автовекторизация включена, ни один из компиляторов не генерирует векторизованный код (не ошибка компиляторов)


Обновление (2015/02/27): Во время оптимизации некоторого кода геофизики (2 квартал 2013 г.) для работы на Sandy Bridge-E Xeon у меня была возможность сравнить производительность ICC 11.1 с GCC 4.8.0, и теперь GCC генерировал более быстрый код, чем ICC. В коде использовались встроенные функции AVX, и в нем использовались 8-сторонние векторизованные инструкции (компилятор не автовекторизовал код правильно из-за определенных требований к компоновке данных). Кроме того, реализация LTO в GCC (с ядром IR, встроенным в файлы .o) была намного проще в управлении, чем в ICC. GCC с LTO работал примерно в 3 раза быстрее, чем ICC без LTO. Я не могу сейчас найти цифры для GCC без LTO, но я помню, что он все еще был быстрее, чем ICC. Это ни в коем случае не общее заявление о производительности ICC, но результатов было достаточно для нас, чтобы продолжить работу с GCC 4.8. *.

С нетерпением жду GCC 5.

6
ответ дан 28 November 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: