GNU Parallel ist ein Shell-Tool zum parallelen Ausführen von Rechenaufgaben auf einem oder mehreren Computern. Dieser Artikel bietet eine kurze Einführung in die Verwendung von GNU Parallel. Diese CPU ist Multi-Core. Im Allgemeinen funktionieren zwei Kerne wie folgt: So funktionieren Quad-Cores: So funktionieren die 16 Kerne: Okay, es ist nicht mehr dunkel. Wenn Sie weiterhin Intel kritisieren, werde ich geschlagen. An einem Wochenendmorgen habe ich aus Langeweile einen halben Tag damit verbracht, die Manpage und das Tutorial von GNU Parallel durchzugehen. Haha, ich muss sagen, dass es sich wirklich lohnt, diesen halben Tag zu investieren, weil ich das Gefühl habe, dass ich dadurch in Zukunft mehr als einen halben Tag sparen kann. Dieser Artikel versucht nicht, die Manpage oder das Tutorial von GNU Parallel zu übersetzen. Denn es gibt bereits fertige Übersetzungen, diese könnt ihr euch hier oder hier ansehen. Aber nachdem ich vor ein paar Mal die seltsamen ::: und die merkwürdigen {}{#}{.}{\}-Platzhalter parallel gesehen habe, habe ich einen Rückzieher gemacht. Eine so hässliche Syntax ist unattraktiv. Zum Glück habe ich mir zur Beruhigung ein paar Beispiele angeschaut und es dann selbst ausprobiert. Dabei stellte ich fest, dass es sich wirklich um ein magisches Werkzeug handelt. Der Hauptzweck dieses Artikels besteht darin, Sie zur Verwendung dieses Tools zu verleiten und Ihnen zu erklären, warum und wie Sie es verwenden. Warum Es gibt nur einen Grund für die Verwendung von GNU Parallel: Schnelligkeit! Schnelle Installation (wget -O - pi.dk/3 || curl pi.dk/3/) | bash Der Autor sagte, die Installation dauert 10 Sekunden. Die tatsächliche Situation im Land reicht möglicherweise nicht aus. Aber es dauert nicht allzu lange. Tatsächlich handelt es sich um ein einteiliges Perl-Skript mit mehr als 10.000 Zeilen (ja, Sie haben richtig gelesen, alle Module befinden sich in dieser Datei, das ist ein Feature~). Danach habe ich Fabric-Skripte geschrieben und sie direkt auf jede Knotenmaschine kopiert. Ändern Sie dann die Ausführungsberechtigung in CHMOD. grep ein 1G-Protokoll. Verwenden von parallel und direktes grep ohne parallel. Das Ergebnis ist offensichtlich: ein Unterschied von 20 Mal. Dies ist viel effektiver als die Verwendung einer Ack- oder Ag-Optimierung. Hinweis: Dies ist das Ergebnis der Ausführung auf einem 48-Core-Server. Wie Am einfachsten geht das mit xargs. Es gibt einen Parameter -P in xargs, der mehrere Kerne nutzen kann. Zum Beispiel: $ Zeit echo {1..5} |xargs -n 1 schlafen real 0m15.005s Benutzer 0m0.000s System 0m0.000s Diese Zeile mit xargs übergibt jede Echonummer als Parameter an sleep, sodass die gesamte Ruhezeit 1+2+3+4+5=15 Sekunden beträgt. Wenn der Parameter -P verwendet wird, um die Daten 5 Kernen zuzuordnen, schläft jeder Kern 1, 2, 3, 4 und 5 Sekunden, sodass die gesamte Ruhezeit nach der Ausführung 5 Sekunden beträgt. $ Zeit echo {1..5} |xargs -n 1 -P 5 schlafen real 0m5.003s Benutzer 0m0.000s System 0m0.000s Die Vorbereitung ist abgeschlossen. Im Allgemeinen besteht der erste Parallelmodus darin, xargs -P zu ersetzen. Komprimieren Sie beispielsweise alle HTML-Dateien. finde . -name '*.html' | parallel gzip --best Parameter-Übertragungsmodus Der erste Modus besteht in der Verwendung paralleler Parameterübergabe. Die von vorne in der Pipeline eingehenden Befehle werden als Parameter an die nachfolgenden Befehle übergeben und parallel ausgeführt. Zum Beispiel huang$ Sequenz 5 | parallel echo pre_placeholder_{} pre_placehoder_1 pre_placehoder_2 pre_placehoder_3 pre_placehoder_4 pre_placehoder_5 {} ist ein Platzhalter, der zum Speichern der eingehenden Parameter verwendet wird. Bei Cloud-Computing-Vorgängen werden häufig Stapelvorgänge ausgeführt, beispielsweise das Erstellen von 10 Cloud-Festplatten. seq 10 | parallele Cinder-Erstellung 10 --Anzeigename test_{} Erstellen Sie 50 Cloud-Hosts Kopieren Sie den Code wie folgt: Sequenz 50 | paralleler Nova-Boot --Image Image_ID --Flavor 1 --Availability-Zone Az_ID --NIC VNETWORK = privat --VNC-Passwort 000000 Vm-Test_{} Cloud-Hosts stapelweise löschen Nova-Liste | grep some_pattern | awk '{print $2}' | paralleles Nova-Löschen Schreiben Sie die For-Schleife neu Wie Sie sehen, habe ich tatsächlich viele Stellen, an denen Schleifen geschrieben werden müssen, durch parallel ersetzt und den Komfort genossen, den die Parallelität mit sich bringt. Universelle Abstraktion, Shell-Schleife: (für x in „Katzenliste“; tu_etwas $x fertig) | Prozessausgabe Kann direkt geschrieben werden Katzenliste | parallel tu_etwas | Prozessausgabe Wenn sich zu viele Inhalte in der Schleife befinden (für x in „Katzenliste“; tu_etwas $x [... 100 Zeilen, die etwas mit $x machen ...] fertig) | Prozessausgabe Es ist besser, ein Skript zu schreiben mach es() { x=$1 tu_etwas $x [... 100 Zeilen, die etwas mit $x machen ...] } export -f doit Katzenliste | paralleles Doit Und es kann auch viele lästige Fluchten verhindern. --pipe-Modus Ein anderer Modus ist parallel --pipe Zu diesem Zeitpunkt wird der Befehl vor der Pipeline nicht als Parameter verwendet, sondern als Standardeingabe für den folgenden Befehl. Zum Beispiel: Katze my_large_log |parallel --pipe grep Muster Ohne --pipe wird jede Zeile in mylog in einen Zeilenbefehl im Grep-Muster erweitert. Mit --pipe unterscheidet sich der Befehl nicht vom Muster cat mylog | grep, außer dass die Befehle zur Ausführung auf verschiedene Kerne verteilt werden. Okay, das ist das Grundkonzept! Der Rest ist nur die spezifische Verwendung verschiedener Parameter, wie z. B. wie viele Kerne verwendet werden sollen, Platzhalter-Ersetzung, verschiedene Möglichkeiten zur Parameterübergabe, parallele Ausführung unter Sicherstellung der Reihenfolge der Ergebnisausgabe (-k) und die magische knotenübergreifende Parallelverarbeitung. Schauen Sie einfach auf die Manpage, um mehr zu erfahren. Bonus Wenn Sie ein kleines Tool zur Parallelisierung zur Hand haben, können Sie nicht nur die tägliche Ausführung beschleunigen, sondern auch die Parallelität testen. Bei vielen Schnittstellen treten bei gleichzeitigen Vorgängen Fehler auf. Beispielsweise wird auf Codeebene beurteilt, dass die Datenbank nicht gesperrt ist. Infolgedessen werden gleichzeitige Anforderungen gestellt und jede Anforderung wird als erfolgreich beurteilt, wenn sie den Server erreicht. Wenn sie zusammen geschrieben werden, wird das Limit überschritten. Zuvor wurde die For-Schleife seriell ausgeführt und löste diese Probleme nicht aus. Wenn Sie jedoch wirklich die Parallelität testen möchten, müssen Sie ein Skript schreiben oder die Mehrfachverarbeitung von Python verwenden, um sie zu kapseln. Aber ich habe parallel zur Hand und habe die folgenden beiden Aliase in bashrc hinzugefügt Alias p='parallel' Alias pp='parallel --pipe -k' Auf diese Weise lässt sich sehr bequem Parallelität erzeugen. Ich muss nur nach der Pipeline ein p hinzufügen und kann jederzeit Parallelität erzeugen, um die Antwort zu beobachten. Zum Beispiel Sequenz 50 | p -n0 -q curl 'example.com' Stellen Sie gleichzeitige Anfragen basierend auf der Anzahl Ihrer Kerne. -n0 bedeutet, dass die Seq-Ausgabe nicht als Parameter an den nachfolgenden Befehl übergeben wird. Zeit für Klatsch: Xianglin Sao von GNU Da ich mich für Klatsch und Tratsch über kostenlose Software interessiere, google ich jedes Mal, wenn ich eine neue und interessante Software entdecke, die Schlüsselwörter Dann sah ich eine Beschwerde bei Hacker News, in der es im Wesentlichen darum ging, dass jedes Mal, wenn man die Ausführung von Parallel auslöst, ein Text erscheint, der einen darauf hinweist, dass man, wenn man dieses Tool für akademische Zwecke verwendet (viele Leute aus dem Bereich Biowissenschaften verwenden dieses Tool), seine Arbeit zitieren muss, sonst zahlt man ihm 10.000 Euro. Dabei habe ich ein Wort gelernt: „Nagware“, womit sich speziell Software bezeichnet, die wie Tang Seng nervt, damit man zahlt. Ich denke jedoch, dass der Artikel zitiert werden sollte, wenn er wirklich verwendet wird, wie dieser Student sagte:
Darüber hinaus ist es dem Autor sehr wichtig, dass andere seine Software zitieren. Das ging so weit, dass ich dies auch in den NEWS gesehen habe: Hauptzeit Zitieren Sie direkt die Antwort des Autors auf stackoverflow
Wenn Sie 32 verschiedene Jobs haben, die Sie auf 4 CPUs ausführen möchten, können Sie die Parallelisierung ganz einfach durchführen, indem Sie auf jeder CPU 8 Jobs ausführen: GNU Parallel startet stattdessen einen neuen Prozess, wenn einer fertig ist – wodurch die CPUs aktiv bleiben und Zeit gespart wird: abschließend Dieser Artikel stellt hauptsächlich ein echtes Paralleltool vor, erklärt seine beiden Hauptmodi, gibt Tipps und plaudert über die unbekannte Seite der GNU-Welt. Ich hoffe, es ist nützlich für Sie. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. |
<<: MySQL 5.6.27 Installations-Tutorial unter Linux
>>: Detaillierte Erklärung der Ansichtszusammenfassungsdefinition im Angular-Framework
Inhaltsverzeichnis Vorwort Zweidimensionales Arra...
Inhaltsverzeichnis 1. Was ist ein Index? 2. Warum...
1. golang:neuestes Basis-Image mkdir gotest Berüh...
Inhaltsverzeichnis Ergebnisse erzielen Implementi...
Normalerweise verwende ich nginx als Reverse-Prox...
1. Erstellen Sie einen Runner-Container mk@mk-pc:...
1. Übersicht über TCP-Wrapper TCP Wrapper „verpac...
Inhaltsverzeichnis 1. Doppelte Anfragen storniere...
Inhaltsverzeichnis Vorwort JavaScript find()-Meth...
MySQL-Transaktionsisolationsebene anzeigen mysql&...
Manchmal müssen wir Programme auf dem Windows-Sys...
<br />In der Vergangenheit musste zum Erstel...
Schritt 1: Holen Sie sich die MySQL YUM-Quelle Ge...
Vorwort Wir alle wissen, dass unter Linux „alles ...
Ich habe vor Kurzem eine einfache Studie zur Date...