Как заставить Windows работать так же быстро, как Linux для компиляции C ++? - PullRequest
138 голосов
/ 02 августа 2011

Я знаю, что это не столько вопрос программирования, сколько вопрос.

Я работаю над довольно большим кроссплатформенным проектом . В Windows я использую VC ++ 2008. В Linux я использую gcc. В проекте около 40 тыс. Файлов. Windows компилирует и связывает один и тот же проект в 10–40 раз медленнее, чем Linux. Как я могу это исправить?

Одна инкрементная сборка за 20 секунд в Linux и> 3 минуты в Windows. Зачем? Я даже могу установить компоновщик 'gold' в Linux и сократить это время до 7 секунд.

Аналогично, git в 10–40 раз быстрее в Linux, чем в Windows.

В случае с git возможно, что git использует не Windows оптимальным образом, а VC ++? Вы могли бы подумать, что Microsoft захочет сделать своих собственных разработчиков максимально продуктивными, и более быстрая компиляция будет иметь большое значение для этого. Может быть, они пытаются убедить разработчиков в C #?

В качестве простого теста найдите папку с множеством подпапок и выполните простой

dir /s > c:\list.txt

в Windows. Сделайте это дважды и время второго запуска, чтобы он запускался из кэша. Скопируйте файлы в Linux и выполните 2 одинаковых прогона, а второй раз запустите.

ls -R > /tmp/list.txt

У меня есть 2 рабочие станции с точно такими же характеристиками. HP Z600s с 12 ГБ оперативной памяти, 8 ядер на 3,0 ГГц. Для папки с ~ 400k файлами Windows занимает 40 секунд, Linux занимает <1 секунду. </p>

Можно ли настроить реестр для ускорения работы Windows? Что дает?


Несколько слегка релевантных ссылок, относящихся ко времени компиляции, необязательно ввода / вывода.

Ответы [ 13 ]

2 голосов
/ 20 декабря 2011

Попробуйте использовать jom вместо nmake

Получить здесь: http://qt.gitorious.org/qt-labs/jom

Дело в том, что nmake использует только один изваши ядра, jom - это клон nmake, использующий многоядерные процессоры.

GNU позволяет делать это "из коробки" благодаря опции -j, которая может быть причиной его скорости по сравнению сMicrosoft nmake.

jom работает, выполняя параллельно разные команды make на разных процессорах / ядрах.Попробуйте почувствовать разницу!

1 голос
/ 09 июня 2016

Я хочу добавить только одно наблюдение, используя Gnu make и другие инструменты из инструментов MinGW в Windows: кажется, они разрешают имена хостов, даже когда инструменты не могут даже общаться по IP.Я предполагаю, что это вызвано некоторой процедурой инициализации среды выполнения MinGW.Запуск локального DNS-прокси помог мне повысить скорость компиляции с помощью этих инструментов.

До того, как у меня возникла большая головная боль, потому что скорость сборки упала примерно в 10 раз, когда я параллельно открыл VPN-соединение.В этом случае все эти поиски DNS проходили через VPN.

Это наблюдение может также относиться к другим инструментам сборки, не только на основе MinGW, и оно могло бы измениться в последней версии MinGW.

0 голосов
/ 12 августа 2017

Недавно я мог заархивировать другой способ ускорить компиляцию примерно на 10% в Windows, используя Gnu make, заменив mingw bash.exe версией из win-bash

(Win-bash не очень удобен в отношении интерактивного редактирования.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...