GNU równoległe vs i (mam na myśli tło) vs xargs -P


40

Jestem zdezorientowany co do różnicy lub zalet (jeśli w ogóle) uruchamiania zestawu zadań za .shpomocą skryptuGNU parallel

Np. Odpowiedź Ole Tange'a :

parallel ./pngout -s0 {} R{} ::: *.png

zamiast powiedzieć, że je przewijamy, umieszczając je w tle &.

Np. Odpowiedź frostschutza :

#copied from the link for illustration
for stuff in things
do
( something
  with
  stuff ) &
done
wait # for all the something with stuff

Krótko mówiąc, czy są one tylko składniowo lub praktycznie różne? A jeśli praktycznie inaczej, kiedy powinienem użyć każdego z nich?

Odpowiedzi:


46

Umieszczenie wielu zadań w tle to dobry sposób na użycie wielu rdzeni pojedynczej maszyny. parallelpozwala jednak rozłożyć zadania na wiele serwerów w sieci. Od man parallel:

GNU równoległe to narzędzie powłoki do równoległego wykonywania zadań za pomocą jednego lub więcej komputerów . Typowe dane wejściowe to lista plików, lista hostów , lista użytkowników, lista adresów URL lub lista tabel.

Nawet jeśli działa na jednym komputerze, paralleldaje znacznie większą kontrolę nad sposobem równoległego wykonywania zadań. Weź ten przykład ze manstrony:

   To convert *.wav to *.mp3 using LAME running one process per CPU core
   run:

   parallel lame {} -o {.}.mp3 ::: *.wav

OK, możesz zrobić to samo z

   for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done

Jest to jednak dłuższe i bardziej kłopotliwe, a co ważniejsze, uruchomi tyle zadań, ile jest .wavplików. Jeśli uruchomisz to na kilku tysiącach plików, prawdopodobnie zwali zwykłego laptopa na kolana. parallelz drugiej strony, uruchomi jedno zadanie na rdzeń procesora i utrzyma wszystko w porządku.

Zasadniczo paralleloferuje możliwość dostrajania sposobu wykonywania zadań i ilości dostępnych zasobów, z których powinni korzystać. Jeśli naprawdę chcesz zobaczyć moc tego narzędzia, zapoznaj się z jego instrukcją lub przynajmniej z przykładami, które oferuje.

Proste tło naprawdę nie ma poziomu zaawansowania porównywalnego z równoległym. Jeśli chodzi o sposób parallelróżni się od xargs, GNU tłum dać podział piękny tutaj . Niektóre bardziej istotne punkty to:

  • xargs źle radzi sobie ze znakami specjalnymi (takimi jak spacja, „i”).
  • xargs może uruchamiać określoną liczbę zadań równolegle, ale nie obsługuje równoległego uruchamiania zadań z liczbą rdzeni procesora.
  • xargs nie obsługuje grupowania danych wyjściowych, dlatego dane wyjściowe mogą działać razem, np. pierwsza połowa linii pochodzi z jednego procesu, a ostatnia połowa linii pochodzi z innego procesu.
  • xargs nie obsługuje utrzymywania kolejności danych wyjściowych, dlatego jeśli równoległe uruchamianie zadań za pomocą xargs nie jest możliwe odłożenie wyjścia drugiego zadania do czasu wykonania pierwszego zadania.
  • xargs nie obsługuje uruchamiania zadań na komputerach zdalnych.
  • xargs nie obsługuje zamiany kontekstu, więc będziesz musiał utworzyć argumenty.

1
To dobra odpowiedź, dzięki. W pewien sposób potwierdza to, co zgadywałem. Nienawidzę parallelskładni, kolejnej nowej marki klawiatury do zapamiętania. Ale chyba automatyczne równoważenie rdzeni / zadań jest tego warte ...?
Stephen Henderson

3
Zobacz, semktóra część pakietu GNU Parallel. To może lepiej pasować do twoich wymagań dotyczących składni.
Ole Tange

1
@OleTange thx, dobra rozmowa
Stephen Henderson

> xargs nie obsługuje zamiany kontekstu, więc będziesz musiał utworzyć argumenty. --- Co to znaczy? Czy to nie xargs -I%
deszcz

4
To prawda, że parallelma większą moc xargs, ale to porównanie jest raczej stronnicze. Na przykład xargsobsługuje ciągi zakończone znakiem null jako dane wejściowe, aby uniknąć problemów ze spacjami i cudzysłowami, a także może -demulować parallel(nawet wspomniane w porównaniu!). xargs -Ijest wystarczającym zamiennikiem kontekstu dla najprostszych przypadków i zwykle znam liczbę rdzeni na maszynie. Nigdy nie spotkałem się z problemem z niezgrupowanym wyjściem.
Sam Brightman,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.