Multicore und Synchronisation

Welche Methode eignet sich leistungsmäßig, um die Summe aller Elemente eines Arrays mit mehreren Threads zu bilden?

  1. AAlle Threads erwerben für jedes Element eine Sperre und addieren auf eine gemeinsame Variable
  2. BAlle Threads addieren für jedes Element ohne Synchronisation auf eine gemeinsame Variable
  3. CJeder Thread summiert seinen Anteil in einer lokalen Variablen, und am Ende werden diese Teilsummen je einmal addiert
Antwort und Erläuterung anzeigen

Antwort: C. Jeder Thread summiert seinen Anteil in einer lokalen Variablen, und am Ende werden diese Teilsummen je einmal addiert

Wird für jedes Element eine gemeinsame Variable aktualisiert, wird es durch das Warten auf Sperren oder atomare Befehle und das Hin- und Herwandern der Cache-Zeile sehr langsam. Bildet jeder Thread Teilsummen in Registern oder lokalen Variablen und ergibt sich die Gesamtsumme am Ende durch so viele Additionen, wie es Threads gibt, bleiben gemeinsame Schreibvorgänge minimal. Dieses Verfahren heißt Reduktion und ist auch in Parallelisierungsmechanismen wie OpenMP integriert.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Multicore und Synchronisation

  1. Welches Merkmal von Lese-Schreib-Sperren (Reader-Writer-Lock) ist richtig?
  2. Welche Verwendung eines Semaphors mit Zähler ist am treffendsten?
  3. Welcher Unterschied zwischen Cache-Kohärenz und Speicherkonsistenzmodell ist richtig?
  4. Welche Idee steckt hinter Hardware Transactional Memory?
  5. Warum wird beim Warten mit einer Bedingungsvariable auf „Warteschlange nicht mehr leer“ die Bedingung nach dem Aufwachen mit einer while-Schleife statt mit if erneut geprüft?

Vergleiche zu diesem Thema