0

Ich habe eine 2-Socket-Maschine mit jeweils 14 Kernen und Hyper-Threading aktiviert - damit insgesamt 14 * 2 * 2 = 56 Verarbeitungseinheiten oder logische CPUs.libgomp: Thread-Erstellung fehlgeschlagen: Ungültiges Argument nach dem Deaktivieren/Aktivieren von CPUs

ich alle ungeraden CPUs gesperrt (1, 3, 5, 7, ..., 53, 55), indem Sie:

for i in {1..55..2}; do echo 0 > /sys/devices/system/cpu/cpu$i/online; done 

    /sys/devices/system/cpu/online shows 0 2 4 6 ... 52 54 

Nun, wenn ich mehrere Threads zu erstellen bin versucht (= 28) mit OpenMP ich erhalte folgende Fehlermeldung:

libgomp: Thread creation failed: Invalid argument 

ich es wieder zurück, indem sie:

for i in {1..55..2}; do echo 1 > /sys/devices/system/cpu/cpu$i/online; done 

    /sys/devices/system/cpu/online shows 0-55 

Trotzdem bin ich die gleichen Fehler.

Irgendwelche Gedanken?

Edit: Code funktionierte gut für eine beliebige Anzahl von Threads, bevor ich die obigen Experimente durchgeführt habe.

+0

Wenn Sie versuchen, 1 Thread pro Kern auszuführen, scheint die Thread-Platzierung nur beratend zu sein, und es ist besser, die GOMP_CPU_AFFINITY-Maske einfach festzulegen, wenn libgomp das Ziel für Affinität unterstützt. Wenn nicht, müssen Sie bereit sein, jeden Thread für die logische CPU-Zuweisung zu akzeptieren. – tim18

+0

Ich glaube, es geht nicht um Affinität. Es kann einfach nicht mehr als 1 Thread laufen. Möglicherweise konnte es abgesehen von CPU0 (die überhaupt nicht deaktiviert werden kann) keine andere CPU sehen. Ich weiß nicht, ob die Deaktivierung/Aktivierung von CPUs irgendwelche OpenMP-Umgebungsvariablen beeinflusst oder löscht. konnte auch keinen Artikel finden. – MrA

Antwort

0

Auch nach dem erneuten Einschalten der CPUs betrug die Anzahl der OMP-Threads nur die Hälfte (seit ich die ungeraden deaktiviert hatte).

Lösung: Ich musste die Server am Ende neu starten. Danach funktioniert alles gut.

Verwandte Themen