Подтвердить что ты не робот

Когда следует использовать опцию GCC-pip?

В документации GCC 4.1.2 это говорит о опции -pipe:

-pipe

Используйте каналы, а не временные файлы для связи между различными этапами компиляции. Это не работает в некоторых системах, где ассемблер не может читать из трубы; но у сборщика GNU нет проблем.

Я предполагаю, что могу сказать из сообщения об ошибке, если ассемблеры моих систем не поддерживают каналы, поэтому, кроме этой проблемы, когда имеет значение, пользуюсь ли я этой опцией? Какие факторы должны принять решение использовать его?

4b9b3361

Ответ 1

Обычно это не имеет значения

Он имеет соображения + и -. Исторически, запуск компилятора и ассемблера одновременно будет подчеркивать ресурсы ОЗУ.

В настоящее время стандарты Gcc невелики, а -pipe добавляет немного многоядерного доступного параллельного выполнения.

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

Теперь есть несколько крупных проектов. Вы можете проверить одно дерево, которое построит все Firefox или NetBSD, или что-то в этом роде, что-то действительно большое. Что-то, что включает все X, скажем, в качестве компонента небольшой подсистемы. Вы можете или не заметить разницу, когда в задании задействованы миллионы строк кода в тысячах и тысячах файлов C. Как я уверен, вы знаете, люди обычно работают только с небольшой частью чего-то подобного в свое время. Но если вы являетесь инженером по выпуску или работаете на сервере сборки или меняете что-то в stdio.h,, вы вполне можете захотеть построить всю систему чтобы увидеть, сломаете ли вы что-нибудь. И теперь каждая капля производительности, вероятно, считается...

Ответ 2

В нашем опыте с проектом среднего размера добавление -pipe не выявило различий в времени сборки. Мы столкнулись с несколькими проблемами (иногда не удаляя промежуточные файлы, если была обнаружена ошибка, IIRC), и поэтому, поскольку он ничего не набирал, мы перестали использовать его, а не пытались устранить эти проблемы.

Ответ 3

Попытавшись это сейчас, он выглядит умеренно быстрее, чтобы строить, когда адресаты источника/сборки находятся в NFS (сеть linux). Однако использование памяти велико. Если вы никогда не заполняете ОЗУ и не используете источник NFS, это похоже на победу с помощью -pipe.

Ответ 4

Честно говоря, очень мало причин не использовать его. -pipe будет использовать только немного бара, который, если этот ящик строит код, я бы предположил, что имеет приличную сумму. Это может значительно улучшить время сборки, если ваша система использует более консервативную файловую систему, которая записывает и удаляет все временные файлы по пути (например, ext3).

Ответ 5

Одно из преимуществ заключается в том, что с -pipe компилятор меньше взаимодействует с файловой системой. Даже если это дисковый диск, данные все равно должны проходить через уровни ввода/вывода блоков и файловой системы при использовании временных файлов, тогда как с трубой он становится немного более прямым.

В файлах компилятор сначала должен завершить запись, прежде чем он сможет вызвать ассемблер. Другим преимуществом труб является то, что как компилятор, так и ассемблер могут работать одновременно, и это немного улучшает архитектуру SMP. Особенно, когда компилятору необходимо дождаться данных из исходного файла (из-за блокировки вызовов ввода-вывода), операционная система дает ассемблеру полное время процессора и позволяет ему выполнять свою работу быстрее.

Ответ 6

С аппаратной точки зрения, я думаю, вы использовали бы -pipe, чтобы сохранить время жизни вашего жесткого диска.