Multicore en synchronisatie
Waarop moet worden gelet bij het first-touch-beleid dat vaak wordt gebruikt in Linux-NUMA-systemen (een pagina wordt geplaatst in het geheugen van het knooppunt waarop de thread draait die er het eerst naar schrijft)?
- ABij first touch worden pagina's op willekeurige knooppunten geplaatst
- BOp het moment dat malloc wordt aangeroepen, ligt de plaats van alle pagina's vast
- CAls een grote array door slechts één thread op 0 wordt geïnitialiseerd, komt alles op één knooppunt en gebruiken threads op andere knooppunten ver geheugen
Antwoord en toelichting tonen
Antwoord: C. Als een grote array door slechts één thread op 0 wordt geïnitialiseerd, komt alles op één knooppunt en gebruiken threads op andere knooppunten ver geheugen
Met malloc alleen worden nog geen fysieke pagina's toegewezen; bij de paginafout bij de eerste schrijfactie worden ze in het geheugen van het knooppunt van die thread geplaatst. Als de initialisatie door één thread gebeurt, komt de hele array op dat knooppunt, en bij de parallelle berekening is een groot deel van het door elke thread bewerkte gedeelte ver geheugen. Als de initialisatie parallel met dezelfde taakverdeling als de berekening gebeurt, komt elk deel in de buurt van de bijbehorende thread.