Aby skompilować pakiet oprogramowania na stacji roboczej z wieloma rdzeniami procesora (powiedzmy 12), etap konfiguracji często trwa znacznie dłużej niż faktyczny etap kompilacji, ponieważ ./configuretesty są wykonywane jeden po drugim, podczas gdy są make -juruchamiane, gcca także inne polecenia równolegle.
Uważam, że marnowanie zasobów jest ogromnym marnotrawstwem, ponieważ pozostałe 11 rdzeni pozostaje bezczynnie przez większość czasu i czeka na zakończenie spowolnienia ./configure. Dlaczego musi przeprowadzać testy sekwencyjnie? Czy każdy test zależy od siebie? Mogę się mylić, ale wygląda na to, że większość z nich jest niezależna.
Co ważniejsze, czy są jakieś sposoby na przyspieszenie ./configure?
Edycja: Aby zilustrować sytuację, oto przykład z GNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
Wyniki:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
Z Coreutils-8,9 , ./configuretrwa dłużej niż 6 razy make. Chociaż ./configurezużywa mniej czasu procesora (patrz czasy „użytkownik” i „sys”), zajmuje dużo więcej czasu („rzeczywisty”), ponieważ nie jest równoległy. Powtórzyłem test kilka razy (z odpowiednimi plikami prawdopodobnie pozostają w pamięci podręcznej pamięci), a czasy mieszczą się w granicach 10%.