Dies ist der Befehl likwid-pin, der im kostenlosen OnWorks-Hosting-Provider mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
likwid-pin - eine sequentielle oder Threaded-Anwendung an dedizierte Prozessoren anheften
ZUSAMMENFASSUNG
likwid-pin [-vhqipS] [-c ] [-s ] [-d ]
BESCHREIBUNG
likwid-pin ist eine Befehlszeilenanwendung zum Anheften einer sequentiellen oder Multithread-Anwendung
an dedizierte Prozessoren. Es kann als Ersatz für verwendet werden Aufgabengruppe(1). Gegenüber
Taskset keine Affinitätsmaske, aber es werden einzelne Prozessoren angegeben. Für Multithreading
Anwendungen basierend auf der pthread-Bibliothek die pthread_create Bibliotheksaufruf ist überladen
durch LD_PRELOAD und jeder erstellte Thread wird wie angegeben an einen dedizierten Prozessor gepinnt
in Kernliste
Standardmäßig wird jeder generierte Thread in der Reihenfolge der Aufrufe an den Kern gepinnt
pthread_create. Es ist möglich, einzelne Threads mit der Befehlszeilenoption -s zu überspringen.
Für OpenMP-Implementierungen werden gcc- und icc-Compiler explizit unterstützt. Andere können auch
Arbeit. likwid-pin setzt die Umgebungsvariable OMP_NUM_THREADS für Sie, falls noch nicht geschehen
gegenwärtig. Es werden so viele Threads gesetzt, wie im Pin-Ausdruck vorhanden sind. Beachten Sie, dass
bei pthreads wird der übergeordnete Thread immer gepinnt. Wenn Sie zum Beispiel 4 Threads erstellen mit
pthread_create und verwenden Sie nicht den übergeordneten Prozess als Worker, den Sie noch bereitstellen müssen
num_threads+1 Prozessor-IDs.
likwid-pin unterstützt verschiedene Nummerierungen zum Anheften. Standardmäßig physikalische Nummerierung von
die Kerne verwendet werden. Das ist auch die Nummerierung likwid-topologie(1) berichtet. Aber auch
logische Nummerierung innerhalb des Knotens oder der Sockets verwendet werden. Bei Verwendung mit einem N (zB -c
N:0-6) werden die Kerne über den gesamten Knoten logisch nummeriert. Physische Kerne stehen an erster Stelle. Wenn
ein System hat zB 8 Kerne mit 16 SMT Threads mit -c N:0-7 bekommt man alle physikalischen Kerne.
Wenn Sie -c N:0-15 angeben, erhalten Sie alle physischen Kerne und alle SMT-Threads. Mit S kannst du
Geben Sie logische Nummerierungen innerhalb von Sockets an, auch hier stehen die physischen Kerne an erster Stelle. Sie können mischen
verschiedene Domänen mit @ getrennt. ZB -c S0:0-3@S2:2-3 du pinnst den Thread 0-3 auf logisch
Kerne 0-3 auf Sockel 0 und Threads 4-5 auf logischen Kernen 2-3 auf Sockel 2.
Für Anwendungen, bei denen die First-Touch-Policy auf numa-Systemen nicht angewendet werden kann likwid-pin
kann verwendet werden, um die Platzierung des Interleave-Speichers zu aktivieren. Dies kann die
Leistung von speichergebundenen Multithread-Codes. Alle numa-Knoten, an die der Benutzer Threads angeheftet hat
werden zum Verschachteln verwendet.
OPTIONAL
-v gibt Versionsinformationen auf der Standardausgabe aus und wird dann beendet.
-h gibt eine Hilfenachricht auf der Standardausgabe aus und wird dann beendet.
-c OR OR <scatter Politik>
Geben Sie eine numerische Liste von Prozessoren an. Die Liste kann mehrere Elemente enthalten,
durch Komma getrennt, und Bereiche. Zum Beispiel 0,3,9-11. Sie können auch logisches verwenden
Nummerierungen, entweder innerhalb eines Knotens (N), eines Sockets (S ) oder eine numa-Domäne (M ).
likwid-pin unterstützt auch logisches Anheften innerhalb eines CPUsets mit einem L-Präfix. wenn du
Lassen Sie diese Option weg. likwid-pin wird die Threads an die Prozessoren des Knotens anheften
mit physischen Kernen zuerst. Siehe unten für Details zur Verwendung eines Thread-Ausdrucks oder
Streuungsrichtlinie
-s
Überspringen-Maske als HEX-Nummer angeben. Für jedes gesetzte Bit ist der entsprechende Thread
übersprungen.
-S Alle ccNUMA-Speicherdomänen, die zur angegebenen Threadliste gehören, werden bereinigt
vor dem Lauf. Kann Probleme mit dem Dateipuffer-Cache unter Linux lösen.
-p druckt die verfügbaren Thread-Domänen für logisches Anheften. Bei Verwendung in Kombination
mit -c werden die IDs der physischen Prozessoren auf stdout ausgegeben.
-i Legen Sie die numa-Speicherrichtlinie so fest, dass sie alle numa-Knoten umfasst, die am Pinning beteiligt sind
-q stille Ausführung ohne Ausgabe
-d
Trennzeichen für die Ausgabe der physischen Prozessorliste setzen (-p & -c)
BEISPIEL
1. Für Standard-pthread-Anwendung:
likwid-pin -c 0,2,4 6 ./meine App
Der übergeordnete Prozess ist an Prozessor 0 gepinnt. Thread 0 an Prozessor 2, Thread 1 an
Prozessor 4, Thread 2 zu Prozessor 5 und Thread 3 zu Prozessor 6. Wenn mehr Threads
erstellt als in der Prozessorliste angegeben, werden diese Threads an Prozessor 0 gepinnt als
zurückgreifen.
2. Für gcc OpenMP müssen in der Prozessorliste so viele IDs angegeben werden, wie Threads vorhanden sind:
OMP_NUM_THREADS=4; likwid-pin -c 0,2,1,3 ./meine App
3. Die vollständige Kontrolle über das Anheften kann durch die Angabe einer Skip-Maske erreicht werden. Zum Beispiel
der folgende Befehl überspringt das Anheften von Thread 1:
OMP_NUM_THREADS=4; likwid-pin -s 0x1 -c 0,2,1,3 ./meine App
4. Der Schalter -c unterstützt die Definition von Threads in einer bestimmten Affinitätsdomäne wie
NUMA-Knoten oder Cache-Gruppe. Die verfügbaren Affinitätsdomänen können mit dem -p . abgerufen werden
switch und keine weitere Option auf der Kommandozeile. Die gemeinsamen Affinitätsdomänen sind N
(ganzer Node), SX (Socket X), CX (Cachegruppe X) und MX (Speichergruppe X). Mehrere
Affinitätsdomänen können durch @ getrennt festgelegt werden. Um an jeder Buchse 2 Gewinde zu stiften
eines 2-Sockel-Systems:
OMP_NUM_THREADS=4; likwid-pin -c S0:0-1@S1:0-1 ./meine App
5. Eine weitere Argumentdefinition des Schalters -c ermöglicht es, die Threads entsprechend zu fixieren
zu einem Ausdruck wie E:N:4:1:2. Die Syntax ist E: :
Threads>(: : ). Die Beispielstifte 8 Gewinde mit 2 SMT-Gewinden pro
Kern auf einer SMT 4-Maschine:
OMP_NUM_THREADS=4; likwid-pin -c E:N:8:2:4 ./meine App
6. Die letzte Alternative für den Schalter -c ist das automatische Streuen von Threads auf
Affinitätsdomänen. Um beispielsweise die Threads über alle Speicherdomänen in a . zu verteilen
System:
OMP_NUM_THREADS=4; likwid-pin -c M: Streuung ./meine App
Verwenden Sie likwid-pin online mit den onworks.net-Diensten