Захотелось как-то ускорить компиляцию C++ проекта, который уже разросся до чего-то приличного.
Хотелось бы услышать от опытных товарищей как какие-то советы как по организации проекта/кода (например не использовать boost), так и что в первую очередь из железа влияет на скорость компиляции (частота CPU, производитель, скорость или объем памяти, скорость жесткого диска, его дефрагментированность, свободное место, файловая система, сильно ли ускоряет (именно компиляцию) SSD и т.д.). Есть ли смысл отключать антивирус во время сборки? Может есть какие-то шаманства, о которых я даже не догадываюсь? :)
Windows, Visual Studio, если важно, но и Linux, да и платформонезависимые параметры тоже интересны.
SSD по идее влиять не должен, потому что узкое место процессор а не диск. Экспериментировал, кидал проект в tmpfs ( файловая система в оперативке ) — скорость сборки не менялась. Впрочем возможно на больших проектах разница будет но вряд ли значительная.
Если процессор многоядерный — скажите системе сборки чтобы использовала побольше этих самых ядер ( make -j N ( где N — 1.5 * количество ядер ) ).
К сожалению, нет. В инкрементальной компиляции узкое место как раз диск. А если в проекте много шаблонов и компилируется в debug, то десяток гигабайт отладочной информации — обычное дело, а это огромное I/O.
Ну для начала установите до Visual Studio Intel Parallel Studio вырастет как скорость компиляции так и работы самой программы на многоядерных процессорах.
1. Используйте clang.
2. Используйте PCH.
3. Если у вас используется много шаблонов, то компилируйте в release (компиляция в debug медленнее чем в release из-за большого I/O для огромных размеров отладочной информации для всех инстанцированных шаблонов)
4. SSD ускоряет компиляцию. Но ещё больше ускоряет компиляцию *много* RAM (минимум 1Gb на ядро для собственно компилятора, а остальное уходит на дисковый кеш).
5. Если вас интересует ускорение инкрементальной сборки — посмотрите на CMake + ninja. Это намного ускоряет инкрементальную компиляцию (если изменились пара .cpp файлов).
Наиболее универсальное средство — параллельная сборка, если она еще не используется. В MSVC в свойствах проекта — multiprocessor compilation. Для make и большинства других систем сборки флаг -j<количество параллельных сборок>, которое обычно равно количеству процессоров/ядер.
Топовый процессор по какому параметру? Понятно что по всем — лучше всего. Но кошелек не резиновый, хочется же подешевле. «Купить все» не предлагать ;)
32 гига — цифра с потолка?
SSD по каким параметрам выбирать? Не загнется ли он быстро при таком I/O?
1)Из последних моделей самый дешевый i7
2)Почему с потолка? 4 плашки по 8 гигов, я меньше сейчас даже не беру, да скажем 12 гигов памяти мне не хватает чтобы с большим количеством вкладок серфить, что уж говорить про визуалстудию, память дешевая чего её жалеть.
3)Любой ссд умрет, стараюсь брать последние модели, выбираю только по размеру и наличию в магазе, всю его производительность я все равно при всем желании не смогу использовать(ну нет у меня процессов которые пишут или читают 600 мегабайт в секунду), у меня их уже не один десяток умерло, делайте бекапы и живите спокойно.
SSD практически все щас по скорости от 400 мб/сек чтение/запись. По надежности — у меня 11 месяцев проработал практически круглосуточно и сдох. Так что бакапить, бакапить и ещё раз бакапить :) OCZ, Corsair, Crucial.