Паралельно GNU
Я робив синтетичний орієнтир для компіляції і не міг заважати писати Makefile, тому я використав:
sudo apt-get install parallel
ls | grep -E '\.c$' | parallel -t --will-cite "gcc -c -o '{.}.o' '{}'"
Пояснення:
{.}
бере аргумент введення та видаляє його розширення
-t
виводить команди, які виконуються, щоб дати нам уявлення про прогрес
--will-cite
видаляє запит на посилання програмного забезпечення, якщо ви публікуєте результати, використовуючи його ...
parallel
настільки зручно, що я міг навіть перевірити часову позначку:
ls | grep -E '\.c$' | parallel -t --will-cite "\
if ! [ -f '{.}.o' ] || [ '{}' -nt '{.}.o' ]; then
gcc -c -o '{.}.o' '{}'
fi
"
xargs -P
також можна паралельно виконувати завдання, але трохи менше зручно робити маніпуляції з розширенням або виконувати з ним кілька команд : Виклик декількох команд через xargs
Паралельне зв’язування запитували за адресою: Чи може gcc використовувати декілька ядер при з'єднанні?
TODO: Я думаю, я десь прочитав, що компіляція може бути зведена до матричного множення, тому, можливо, також можливо прискорити компіляцію одного файлу для великих файлів. Але зараз я не можу знайти посилання.
Тестовано в Ubuntu 18.10.