Легкое распараллеливание

Пока что он работает только с процессорами AMD (забудьте о непонятном названии опции).

Изначально это только для процессоров AMD.

Все сообщения процессора Intel будут удалены / разделены.

blockquote>

https://forums.virtualbox.org/viewtopic.php?f=1&t=90831

https: //forums.virtualbox .org / viewtopic.php е = 7 & амп;? Т = 90874

6
задан Chris Jefferson 11 November 2008 в 20:10
поделиться

7 ответов

Решение: использовать xargs работать параллельно (не забывают -n опция!)

find -name \*.xml -print0 | xargs -0 -n 1 -P 3 bzip2
14
ответ дан 8 December 2019 в 02:53
поделиться

Эта программа жемчуга соответствует Вашим потребностям довольно хорошо, Вы просто сделали бы это:

runN -n 4 bzip2 `find . | grep ".xml$"`
6
ответ дан 8 December 2019 в 02:53
поделиться

гну делает, имеет хорошую функцию параллелизма (например,-j 5), который работал бы в Вашем случае. Создайте Make-файл

%.xml.bz2 : %.xml


all: $(patsubt %.xml,%xml.bz2,$(shell find . -name '*.xml') ) 

затем сделайте a

nice make -j 5

замените '5' некоторым числом, вероятно, еще 1, чем количество ЦП. Вы могли бы хотеть сделать 'хороший' это на всякий случай, кто-то еще хочет использовать машину, в то время как Вы находитесь на ней.

4
ответ дан 8 December 2019 в 02:53
поделиться

Ответ на общий вопрос является трудным, потому что он зависит от деталей вещей, которые Вы параллелизируете. С другой стороны, для этой определенной цели, необходимо использовать pbzip2 вместо плоскости bzip2 (возможности состоят в том, что pbzip2 уже установлен или по крайней мере в репозиториях или дистрибутиве). Посмотрите здесь для деталей: http://compression.ca/pbzip2/

2
ответ дан 8 December 2019 в 02:53
поделиться

Я нахожу этот вид операции контрпродуктивным. Причиной является больше доступа процессов диск одновременно выше, время чтения-записи проходит так концы конечного результата в более длительное время. Узкое место здесь не будет проблемой ЦП, неважно, сколько ядер Вы имеете.

Вы никогда не выполняли простые два больших файла копии одновременно на том же диске HD? Я обычно быстрее для копирования один и затем другой.

Я знаю, что эта задача включает некоторую мощность ЦП (bzip2, требует метода сжатия), но попытка, измеряющая первую загрузку ЦП прежде, чем идти "сложный" путь все мы технический персонал, имеет тенденцию выбирать намного чаще, чем необходимый.

2
ответ дан 8 December 2019 в 02:53
поделиться

Я сделал что-то вроде этого для удара. Параллель делает прием, вероятно, намного быстрее для одного-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
2
ответ дан 8 December 2019 в 02:53
поделиться

Я думаю, что Вы могли к следующему

for i in `find . | grep ".xml$"`; do bzip2 $i&; done

Но это отделило бы однако много процессов, поскольку у Вас есть файлы немедленно, и не оптимальное как просто выполнение четырех процессов за один раз.

1
ответ дан 8 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: