V dnešní době již většina procesů obsahuje více jader. Aby je bylo možné využít, je potřeba úkoly vhodným způsobem paralelizovat a rozdělit mezi jednotlivá jádra. Ideálním místem pro využití více jader je tak zpracování videa, virtualizace a v neposlední řadě kompilace. Níže uvádím jednoduchý způsob jak paralelizovat běh příkazu make.
Je to v ceku jednoduché, stačí přidat přepínač -jN
make -j8
Kolik CPU jader máte, můžete zjistit např. z cpuinfo. Pozor, níže uvedený příkaz nevrátí počet fyzických jader, ale počet virtuálních jader. V případě Intel HyperThreadingu je to typicky 2x počet fyzických jader.
grep -c ^processor /proc/cpuinfo
Na internetu naleznete mnoho návodů a popisů jaký počet paralelně běžících úloh pro příkaz make nastavit. Jedni doporučují nastavit j = celkový počet virt. jader + 1. Někde se dokonce uvádí j = 2 * celkový počet virt. jader + 1. Vždy je k tomu docela vášnivá diskuse a zaručené statistiky. Já doporučuji nepoužívat větší číslo než je počet virtuálních jader, např. u 4 core Itelu s HyperThreadingem nastavit max. hodnotu 8. Ať si říká kdo chce co chce, používat větší číslo, než je počet virtuálních jader, nedává prostě smysl.
Jako příklad uvádím kompilaci jádra 3.16 v Ubuntu 14.04. Rozdíl je na první pohled markantní :-). Taky je hezky vidět, že obsluha více vláken rovněž spotřebuje nějaký procesorový čas.
1 vlákno
real 61m59.959s
user 58m48.776s
sys 7m3.980s
8 vláken
real 15m40.792s
user 101m26.154s
sys 9m26.167s
Napsat komentář