Использование многих ядер для ускорения производительности зависит в большой степени от приложения. Некоторые приложения должны быть запущены пошаговые: нет только никакого способа разделить вычисление параллельно среди многих ядер, потому что для вычислений определенного шага нужно знать результаты предыдущих шагов. Если это так, затем использование 24 ядер так же хорошо как использование только одного.
В других случаях, где приложение должно сделать много вещей, которые не зависят друг от друга, имея много ядер, может значительно ускорить вещи. Как подходящий пример при компиляции проекта со многими исходными файлами можно скомпилировать каждый исходный файл независимо прежде, чем связать различные файлы. В таком случае у Вас может быть компиляция компилятора каждый файл на отдельном ядре. Приложения, которые могут использовать несколько ядер процессора обычно, имеют переключатель для Вас для запроса этого. Например, при компиляции проекта с помощью GNU make
, можно передать его -j
переключатель сопровождается числом. Это число указывает количество заданий make
должен запуститься одновременно (чтение: на различных ядрах).
Вы также можете использовать xargs
(-l
заставляет выполнять отдельную команду для каждой строки):
timp@helez:~/tmp$ awk -F"\t" '$3 == "76" { print $1"\t"$2}' test.txt | xargs -l ./build.oct
$1 is 1000 and $2 is 2
$1 is 1001 and $2 is 1
timp@helez:~/tmp$ cat test.txt
1000 1 75
1000 2 76
1001 1 76
1001 2 80
timp@helez:~/tmp$ cat build.oct
echo '$1 is ' $1 ' and $2 is ' $2
Как предлагается в комментариях, вы также можете упростить команду awk
, так как и awk
, и xargs
разбиваются на табуляции и пробелы:
timp@helez:~/tmp$ awk '$3 == "76" {print $1,$2}' test.txt | xargs -l ./build.oct
$1 is 1000 and $2 is 2
$1 is 1001 and $2 is 1
Для меня это сработало:
awk -F"\t" '$3 == "76" { printf "./build.oct %d %d\n", $1, $2}' \
../benchmark/*/labels.txt | bash
Если предположить, что в колонках 1 и 2 не будет пробела, то можно сделать:
awk -F"\t" '$3 == "76" { print $1"\t"$2}' ../benchmark/*/labels.txt |
while read a b; do ./build.oct $a $b; done