Приведет ли компилятор, подобный GCC, к повышению производительности?
Программа, скомпилированная специально для целевой платформы, на которой она используется, обычно работает лучше, чем программа, скомпилированная для универсальной платформы.,Почему это?Знание об аппаратном обеспечении может помочь компилятору выровнять данные для удобства кэширования и выбрать порядок команд, который хорошо сочетается с конвейерной обработкой ЦП.
Наибольшее преимущество обычно достигается за счет использования определенных наборов команд, таких как SSE (в его различных версиях).
С другой стороны, вы должны спросить себя, действительно ли такая программа, как GCC, является ЦПограничено (гораздо более вероятно, что оно будет связано с вводом-выводом), а настройка производительности процессора дает ощутимые преимущества
Будет ли код, скомпилированный моим собственным скомпилированным компилятором, работать лучше
Надеюсь, что нет!Разрешение компилятору оптимизировать программу никогда не должно изменять ее поведение.Независимо от того, как вы скомпилировали свой GCC, он должен компилировать код в те же двоичные файлы, что и общий двоичный дистрибутив GCC.
Если код, скомпилированный для конкретной платформы, быстрее, чем код, скомпилированный для общей платформы, почему бы нам всем не отправлять код вместо двоичных файлов?Угадайте, что некоторые дистрибутивы Linux на самом деле следуют этой философии, такие как Gentoo.И пока вы работаете над этим, обязательно создавайте статически связанные двоичные файлы, дисковое пространство в настоящее время настолько дешево и дает вам еще как минимум 0,001% производительности.
Хорошо, это было немного саркастично.Причина, по которой люди распространяют общие двоичные файлы, довольно очевидна: это geneirc, самый низкий общий знаменатель, и он будет работать везде.Это большой бонус с точки зрения гибкости и удобства для пользователя.Я помню, как однажды для сборки Gnome для моей коробки Gentoo это заняло день или два!(Но, должно быть, это было намного быстрее ;-))
С другой стороны, бывают случаи, когда вы хотите получить максимально возможную производительность, и имеет смысл создавать и оптимизировать для конкретных архитектур.