Multicore und Synchronisation

Was ist bei der unter Linux in NUMA-Systemen häufig verwendeten First-Touch-Strategie (die Seite wird im Speicher des Knotens abgelegt, auf dem der Thread läuft, der sie als Erster beschreibt) zu beachten?

  1. ABei First-Touch werden Seiten auf zufälligen Knoten abgelegt
  2. BMit dem Aufruf von malloc steht der Ablageort aller Seiten fest
  3. CWird ein großes Array von nur einem Thread auf 0 initialisiert, liegt alles auf einem Knoten, und Threads anderer Knoten müssen entfernten Speicher verwenden
Antwort und Erläuterung anzeigen

Antwort: C. Wird ein großes Array von nur einem Thread auf 0 initialisiert, liegt alles auf einem Knoten, und Threads anderer Knoten müssen entfernten Speicher verwenden

Mit malloc allein werden noch keine physischen Seiten zugewiesen; erst beim Seitenfehler beim ersten Schreiben werden sie im Speicher des Knotens abgelegt, auf dem der Thread läuft. Wird die Initialisierung von einem einzigen Thread ausgeführt, sammelt sich das gesamte Array auf diesem Knoten, und bei paralleler Berechnung liegt ein Großteil der von den einzelnen Threads bearbeiteten Teile im entfernten Speicher. Erfolgt die Initialisierung parallel mit derselben Aufteilung wie die Berechnung, liegen die Teile nahe beim zuständigen Thread.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Was trifft nicht als Ursache zu, dass die Leistung eines parallelen Programms bei mehr Kernen nicht wie erwartet steigt?
  2. Welche Aufteilung eignet sich, wenn Schleifendurchläufe auf mehrere Threads verteilt werden und der Rechenaufwand je Durchlauf stark schwankt?
  3. Welche Methode eignet sich leistungsmäßig, um die Summe aller Elemente eines Arrays mit mehreren Threads zu bilden?
  4. Welches Merkmal von Lese-Schreib-Sperren (Reader-Writer-Lock) ist richtig?
  5. Welche Verwendung eines Semaphors mit Zähler ist am treffendsten?

Vergleiche zu diesem Thema