Multicore en synchronisatie
Leer met meerkeuzevragen over het MESI-protocol, geheugenconsistentiemodellen, atomaire instructies zoals CAS en LL/SC, locks en geheugenbarrières, false sharing en data races.
Multicore en synchronisatie: kernpunten
In een multicore-CPU, waarin meerdere cores op één chip zitten, heeft elke core zijn eigen cache en delen alle cores hetzelfde geheugen. Coherentieprotocollen zoals MESI beheren de toestand van de caches, zodat een core niet met verouderde gegevens werkt nadat een andere core ze heeft gewijzigd.
Verder moet u geheugenconsistentiemodellen begrijpen, die bepalen in welke volgorde schrijfacties voor andere cores zichtbaar worden, atomaire instructies waarmee meerdere cores veilig een waarde bijwerken, locks en geheugenbarrières. U leert ook valkuilen zoals false sharing en data races, waardoor een ogenschijnlijk correct programma traag wordt of fout werkt.
Alle vragen over Multicore en synchronisatie (50)
- Twee cores hebben elk in hun eigen cache een kopie van variabele x. Welk probleem kan optreden wanneer core 1 x leest nadat core 0 naar x heeft geschreven, als er geen cachecoherentiemechanisme is?
- Welke combinatie van de vier toestanden van het cachecoherentieprotocol MESI is juist?
- Wat betekent het wanneer een cacheregel in het MESI-protocol in de toestand Modified (M) staat?
- Wat gebeurt er in het MESI-protocol wanneer die core naar een regel in de toestand Exclusive (E) schrijft?
- Wat gebeurt er in een ongeldigverklarend (invalidate) coherentieprotocol wanneer een core naar een regel in de toestand Shared (S) schrijft?
- Wat is het gangbare gedrag in het MESI-protocol wanneer core 1 een regel wil lezen die core 0 in de toestand Modified (M) heeft?
- Welke uitleg over de snooping-methode voor cachecoherentie is juist?
- Waarom wordt in systemen met veel cores directory-gebaseerde coherentie gebruikt in plaats van snooping?
- Coherentieprotocollen zijn er in ongeldigverklarende en updatende vorm. Welke is de meest passende reden dat veel CPU's het ongeldigverklarende type gebruiken?
- Welke uitleg over false sharing, dat bij multithreaded programma's optreedt, is juist?
- Bij een array van tellers per thread zoals 'long cnt[8];' treedt false sharing op. Welke maatregel is het meest geschikt?
- Welke uitleg over een data race is juist?
- Wanneer bovenstaande code door twee threads tegelijk wordt uitgevoerd, kan de uiteindelijke waarde van counter kleiner zijn dan 200000. Wat is de juiste reden?
- Welke uitleg over atomaire instructies (ondeelbare instructies) is juist?
- Welke beschrijving van de werking van de atomaire instructie CAS (compare-and-swap) is juist?
- De bovenstaande code verdubbelt de gedeelde variabele counter met CAS(&p, verwachte waarde, nieuwe waarde). Wanneer mislukt CAS en wordt de lus opnieuw doorlopen?
- Wanneer mislukt bij een instructiepaar zoals LR/SC (load-reserved/store-conditional) van RISC-V de SC (store-conditional)?
- Welke uitleg over het ABA-probleem, dat bij lock-free datastructuren met CAS aandacht vraagt, is juist?
- Welke beschrijving van de werking van een fetch-and-add-instructie, zoals amoadd.w van RISC-V of lock xadd van x86, is juist?
- Welke uitleg over een spinlock is juist?
- In welke situatie is een spinlock het minst geschikt?
- Waarom wordt bij een spinlock niet meteen met een atomaire instructie de lockvariabele proberen te wijzigen, maar wordt normaal met gewoon lezen gewacht tot de lock vrij lijkt en dan pas een atomaire instructie gebruikt (test-and-test-and-set)?
- Welke vergelijking van een mutex (slapende lock) en een spinlock is juist?
- Welk voorbeeld van een deadlock is juist?
- Welke methode is de meest gangbare om deadlock te voorkomen in een programma met meerdere locks?
- Wat legt een geheugenconsistentiemodel vast?
- Welke uitleg over sequentiële consistentie (sequential consistency) is juist?
- De bovenstaande twee threads worden tegelijk op verschillende cores uitgevoerd (er is geen herordening door de compiler). Welke uitkomst treedt niet op bij sequentiële consistentie, maar kan wel optreden bij echte CPU's zoals x86?
- Welke eigenschap van het geheugenconsistentiemodel van x86 (TSO, Total Store Order) is juist?
- Wat is juist over zwakke geheugenconsistentiemodellen zoals die van ARM en RISC-V (RVWMO)?
- Wat is de juiste rol van een geheugenbarrière-instructie (fence)?
- In bovenstaande code bereidt thread 1 data voor en meldt dat met flag, en leest thread 2 data nadat hij flag heeft gezien. Wat is nodig om op een CPU met zwak geheugenconsistentiemodel zeker te zijn dat thread 2 de waarde 42 leest?
- Wat is juist over geheugenbewerkingen met acquire- en release-betekenis?
- Waarom volstaat het in C niet om een flagvariabele die tussen threads wordt doorgegeven alleen volatile te maken als synchronisatie?
- Waarom kan bij _Atomic van C11 en std::atomic van C++11 de geheugenvolgorde (memory order) worden opgegeven?
- Welke vergelijking van 'grofkorrelige locks', waarbij een grote datastructuur als geheel door één lock wordt beschermd, en 'fijnkorrelige locks', waarbij delen elk door een eigen lock worden beschermd, is juist?
- Welke eigenschap van een lock-free algoritme is juist?
- Welke uitleg over een kritieke sectie is juist?
- Welke uitleg over barrièresynchronisatie, gebruikt in parallelle programma's, is juist?
- Als 64 cores voortdurend gelijktijdig één gedeelde teller met atomaire instructies bijwerken, wordt het niet sneller door meer cores. Wat is de belangrijkste reden?
- Welke uitleg over een NUMA-systeem (Non-Uniform Memory Access) is juist?
- 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)?
- Welke van de volgende is geen oorzaak dat de prestaties van een parallel programma niet naar verwachting stijgen als het aantal cores wordt vergroot?
- Welke verdeling is geschikt bij het verdelen van lusiteraties over meerdere threads wanneer de rekenlast per iteratie sterk uiteenloopt?
- Welke methode is geschikt voor de prestaties bij het berekenen van de som van alle elementen van een array met meerdere threads?
- Welke eigenschap van een lees-schrijflock (reader-writer lock) is juist?
- Wat is het meest passende gebruik van een tellende semafoor?
- Welk verschil tussen cachecoherentie en een geheugenconsistentiemodel is juist?
- Welke uitleg van het idee van hardware transactional memory is juist?
- Waarom wordt bij een conditievariabele, wanneer wordt gewacht tot de wachtrij niet meer leeg is, na het ontwaken de voorwaarde opnieuw gecontroleerd met een while-lus in plaats van een if-opdracht?
Vergelijkingen bij dit onderwerp
Andere onderwerpen in Computersystemen
- Computerarithmetiek
- Instructieset en assembly
- Compilers
- Linker, loader en uitvoerbare formaten
- Besturingssysteem en hardware
- Geheugenhiërarchie en prestaties
- GPU-programmeren
- AI-hardware en softwarestack
- Embedded systemen en firmware
- Hardwarebeschrijvingstalen en verificatie
- Interfaces en busstandaarden
- Prestatiemeting en profiling
- Hardwarebeveiliging
- Energiebeheer (softwaregestuurd)