Multicore en synchronisatie
Welke uitleg over false sharing, dat bij multithreaded programma's optreedt, is juist?
- AVerschillende threads wijzigen verschillende variabelen, maar omdat die in dezelfde cacheregel liggen, pendelt de regel tussen de cores en wordt het traag
- BTwee threads wijzigen dezelfde variabele zonder synchronisatie, waardoor de waarde wordt verstoord
- CThreads wachten op elkaars locks en blijven stilstaan
Antwoord en toelichting tonen
Antwoord: A. Verschillende threads wijzigen verschillende variabelen, maar omdat die in dezelfde cacheregel liggen, pendelt de regel tussen de cores en wordt het traag
Coherentie wordt per cacheregel (gewoonlijk 64 byte) beheerd. Zelfs als core 0 alleen variabele a en core 1 alleen variabele b wijzigt, wordt bij ligging in dezelfde regel bij elke schrijfactie de kopie van de ander ongeldig en pendelt de regel tussen de twee cores. Dit is false sharing: het resultaat is juist, maar de prestaties dalen sterk. Het probleem treedt gemakkelijk op bij arrays voor tellingen per thread.