Multicore en synchronisatie

Welke uitleg over false sharing, dat bij multithreaded programma's optreedt, is juist?

  1. AVerschillende threads wijzigen verschillende variabelen, maar omdat die in dezelfde cacheregel liggen, pendelt de regel tussen de cores en wordt het traag
  2. BTwee threads wijzigen dezelfde variabele zonder synchronisatie, waardoor de waarde wordt verstoord
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Multicore en synchronisatie

  1. Bij een array van tellers per thread zoals 'long cnt[8];' treedt false sharing op. Welke maatregel is het meest geschikt?
  2. Welke uitleg over een data race is juist?
  3. Wanneer bovenstaande code door twee threads tegelijk wordt uitgevoerd, kan de uiteindelijke waarde van counter kleiner zijn dan 200000. Wat is de juiste reden?
  4. Welke uitleg over atomaire instructies (ondeelbare instructies) is juist?
  5. Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?

Vergelijkingen bij dit onderwerp