Czy jest możliwe, że istnieje pewne zamieszanie, co robi make -j? (przynajmniej źle się przez długi czas ...). Zakładałem, że -j bez opcji dostosuje się do liczby procesorów, ale tak nie jest - po prostu nie stosuje żadnego limitu. Oznacza to, że w przypadku dużych projektów stworzy ogromną liczbę procesów (wystarczy uruchomić "top", aby zobaczyć ...) i ewentualnie zużyć całą pamięć RAM. Natknąłem się na to, gdy "make -j" mojego projektu użyło całego mojego 16 GB pamięci RAM i nie powiodło się, podczas gdy "make -j 8" osiągnęło szczyt przy użyciu pamięci RAM 2,5 Gb (w 8 rdzeniach obciążenie jest bliskie 100% oba przypadki).
Pod względem wydajności, myślę, że użycie limitu równego lub większego niż maksymalna liczba procesorów, które są oczekiwane, jest bardziej wydajne niż brak ograniczeń, ponieważ planowanie tysięcy procesów ma pewien narzut. Całkowita liczba utworzonych procesów powinna być stała, ale ponieważ "-j" tworzy wiele z nich naraz, przydzielanie pamięci może stać się problemem. Nawet ustawienie limitu na dwa razy większą liczbę procesorów powinno być jeszcze bardziej zachowawcze niż ustawienie limitu.
PS: Po jakimś bardziej kopanie wymyśliłem estetycznym rozwiązanie - po prostu odczytać liczbę procesorów i użyć jej jako opcji -j:
make -j `nproc`
GNU make na Linux/Unix? – Chimera
'make --version' zgłasza GNU Make 3.81 – Drise