Пока что он работает только с процессорами AMD (забудьте о непонятном названии опции).
Изначально это только для процессоров AMD.
Все сообщения процессора Intel будут удалены / разделены.
blockquote>https://forums.virtualbox.org/viewtopic.php?f=1&t=90831
https: //forums.virtualbox .org / viewtopic.php е = 7 & амп;? Т = 90874
Решение: использовать xargs
работать параллельно (не забывают -n
опция!)
find -name \*.xml -print0 | xargs -0 -n 1 -P 3 bzip2
Эта программа жемчуга соответствует Вашим потребностям довольно хорошо, Вы просто сделали бы это:
runN -n 4 bzip2 `find . | grep ".xml$"`
гну делает, имеет хорошую функцию параллелизма (например,-j 5), который работал бы в Вашем случае. Создайте Make-файл
%.xml.bz2 : %.xml
all: $(patsubt %.xml,%xml.bz2,$(shell find . -name '*.xml') )
затем сделайте a
nice make -j 5
замените '5' некоторым числом, вероятно, еще 1, чем количество ЦП. Вы могли бы хотеть сделать 'хороший' это на всякий случай, кто-то еще хочет использовать машину, в то время как Вы находитесь на ней.
Ответ на общий вопрос является трудным, потому что он зависит от деталей вещей, которые Вы параллелизируете. С другой стороны, для этой определенной цели, необходимо использовать pbzip2 вместо плоскости bzip2 (возможности состоят в том, что pbzip2 уже установлен или по крайней мере в репозиториях или дистрибутиве). Посмотрите здесь для деталей: http://compression.ca/pbzip2/
Я нахожу этот вид операции контрпродуктивным. Причиной является больше доступа процессов диск одновременно выше, время чтения-записи проходит так концы конечного результата в более длительное время. Узкое место здесь не будет проблемой ЦП, неважно, сколько ядер Вы имеете.
Вы никогда не выполняли простые два больших файла копии одновременно на том же диске HD? Я обычно быстрее для копирования один и затем другой.
Я знаю, что эта задача включает некоторую мощность ЦП (bzip2, требует метода сжатия), но попытка, измеряющая первую загрузку ЦП прежде, чем идти "сложный" путь все мы технический персонал, имеет тенденцию выбирать намного чаще, чем необходимый.
Я сделал что-то вроде этого для удара. Параллель делает прием, вероятно, намного быстрее для одного-offs, но здесь основная секция кода для реализации чего-то вроде этого в ударе, необходимо будет изменить его в целях хотя:
#!/bin/bash
# Replace NNN with the number of loops you want to run through
# and CMD with the command you want to parallel-ize.
set -m
nodes=`grep processor /proc/cpuinfo | wc -l`
job=($(yes 0 | head -n $nodes | tr '\n' ' '))
isin()
{
local v=$1
shift 1
while (( $# > 0 ))
do
if [ $v = $1 ]; then return 0; fi
shift 1
done
return 1
}
dowait()
{
while true
do
nj=( $(jobs -p) )
if (( ${#nj[@]} < nodes ))
then
for (( o=0; o<nodes; o++ ))
do
if ! isin ${job[$o]} ${nj[*]}; then let job[o]=0; fi
done
return;
fi
sleep 1
done
}
let x=0
while (( x < NNN ))
do
for (( o=0; o<nodes; o++ ))
do
if (( job[o] == 0 )); then break; fi
done
if (( o == nodes )); then
dowait;
continue;
fi
CMD &
let job[o]=$!
let x++
done
wait
Я думаю, что Вы могли к следующему
for i in `find . | grep ".xml$"`; do bzip2 $i&; done
Но это отделило бы однако много процессов, поскольку у Вас есть файлы немедленно, и не оптимальное как просто выполнение четырех процессов за один раз.