Multicore und Synchronisation
Welche Methode eignet sich leistungsmäßig, um die Summe aller Elemente eines Arrays mit mehreren Threads zu bilden?
- AAlle Threads erwerben für jedes Element eine Sperre und addieren auf eine gemeinsame Variable
- BAlle Threads addieren für jedes Element ohne Synchronisation auf eine gemeinsame Variable
- 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.