Multicore en synchronisatie
Bij een array van tellers per thread zoals 'long cnt[8];' treedt false sharing op. Welke maatregel is het meest geschikt?
- AHet type van de teller van long in int veranderen om de array te verkleinen
- BOpvulling tussen de tellers invoegen of ze uitlijnen, zodat ze in afzonderlijke cacheregels staan
- CHet aantal threads vergroten om de wachttijd te spreiden
Antwoord en toelichting tonen
Antwoord: B. Opvulling tussen de tellers invoegen of ze uitlijnen, zodat ze in afzonderlijke cacheregels staan
Bij een long van 8 byte passen 8 tellers in één regel van 64 byte, en alle threads strijden om dezelfde regel. Als opvulling wordt ingevoegd zodat elke teller per 64 byte staat, of de structuur op de grootte van de cacheregel wordt uitgelijnd, gebruikt elke thread een eigen regel. Het is ook effectief dat elke thread met een lokale variabele telt en aan het eind slechts één keer bij de gedeelde plaats optelt.