Multicore en synchronisatie
Welke methode is geschikt voor de prestaties bij het berekenen van de som van alle elementen van een array met meerdere threads?
- AAlle threads nemen per element een lock op één gedeelde variabele en tellen erbij op
- BAlle threads tellen per element zonder synchronisatie bij één gedeelde variabele op
- CElke thread telt zijn eigen deel op met een lokale variabele en de resultaten worden aan het eind één keer per thread bij elkaar opgeteld
Antwoord en toelichting tonen
Antwoord: C. Elke thread telt zijn eigen deel op met een lokale variabele en de resultaten worden aan het eind één keer per thread bij elkaar opgeteld
Als per element een gedeelde variabele wordt bijgewerkt, wordt het zeer traag door het wachten op locks en atomaire instructies en door het heen en weer gaan van cacheregels. Als elke thread in een register of lokale variabele een deelsom bepaalt en de totale som aan het eind met zoveel optellingen als er threads zijn wordt bepaald, zijn er zeer weinig gedeelde schrijfacties. Deze methode heet reductie en is ook ingebouwd in parallelliseringsmechanismen zoals OpenMP.