Мы работаем над нашим проектом с помощью scons as build system в течение нескольких лет. Scons является удивительным и значительно улучшил наш процесс разработки. Исходные файлы ~ 15000 C++ изначально и по мере того, как проект развивает исходные файлы на других языках (Java/Scala), также добавляются в базу кода. Затем мы разработали собственные разработчики, которые управляют зависимостями и вызывают внешний инструмент (javac, scalac) для создания этих источников, который работает очень хорошо. Недавно я работал над оптимизацией существующей системы сборки и обнаружили разницу в производительности между C++ и Java процесса сборки:Сконс Производительность сборки для C++ в большой кодовой базе
Окружающая среда установки: сборки сервера с 24 ядрами, Python 2.7.3, 2.2.0 Scons
Команда: SCons --duplicate = мягкий копия -j8
При создании кода Java, использование процессора легко высоким наблюдаются из верхних и охватывающих нескольких ядер: Java Build
Однако при создании C++ кода, использование процессора всегда ~ 4% и не работает только на 1 ядре независимо от того, сколько рабочих мест в SCons: C++ Build
Я погуглить много в Интернете, но не мог найти что-то полезное. Я поражаю проблему GIL в Python? Я считаю, что каждая команда gcc/g ++ должна запускаться в отдельном подпроцессе, как javac в наших собственных сборщиках, поэтому здесь не должно быть GIL. Существует ли какое-либо обходное решение для полного использования нескольких ядер, ускоряющих работу над C++? Спасибо заранее.
Возможно, вам нужно установить флаг '-j': http://stackoverflow.com/questions/414714/compiling-with-g-using-multiple-cores – doctorlove
Возможно ли, что ваши неявные зависимости для части C++ (заголовки и lib) просто не позволяют далее строить шаги сборки? У самих SCons не должно быть никаких проблем с большими сборками или параллельной обработкой (см., Например, [Почему SCons Is Not Slow] (https://bitbucket.org/scons/scons/wiki/WhySconsIsNotSlow)), а его процессорные показатели показывают полный 100 % на скриншоте. Сконды могут свободно вращаться, пытаясь найти новые задачи для появления, но текущие зависимости запрещают это. Другие крупные проекты (например, MongoDB), похоже, не имеют проблем в этой области ....;) – dirkbaechle
@dirkbaechle Спасибо за ваш ответ, разумно предположить, что ширина DAG не более N (N <8) , Но мне все еще интересно, что есть сотни целей, которые нужно построить, и среди них есть много программ, которые, безусловно, являются конечной точкой графика зависимости. Тем не менее, использование процессора все еще составляет ~ 100% ** только на 1 ядре ** .... По контрасту Java-здание работает на нескольких ядрах. – WindLeeWT