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ż ./configure
testy są wykonywane jeden po drugim, podczas gdy są make -j
uruchamiane, gcc
a 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 , ./configure
trwa dłużej niż 6 razy make
. Chociaż ./configure
zuż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%.