Must-know tahák
Tenhle soubor je minimum, které chceš umět napsat z hlavy. Není to náhrada za topic stránky; je to rychlý seznam odpovědních koster s nejlepším ROI.
A0: první priorita
Bcast
Kdy poznat: každý proces má value, rank, numprocs a zadání chce globální součet, minimum, maximum, průměr nebo filtr podle globální hodnoty.
Kostra odpovědi:
- Přes
MPI_Reducespočítat globální hodnotu na rootu. - Pokud ji potřebují všechny procesy, poslat ji přes
MPI_Bcast. - Lokálně spočítat kandidát.
- Kandidáty znovu agregovat přes
MPI_Reduce. - Uvést stromovou složitost
O(log p).
Pozor: Bcast není potřeba, když výsledek vyhodnocuje a tiskne jen root. U průměru pozor na integer division, u max % min na min == 0.
PRAM tipovačka
Kdy poznat: první otázka s EREW/CREW/common CRCW a výběrem času/ceny pro AND/OR/XOR/NAND, min/max, monotónnost, nuly nebo počet.
Kostra odpovědi:
- Nezávislá operace nad každým prvkem: čas
O(1)přinprocesorech. - Redukce typu AND/OR/min/max na EREW/CREW: typicky strom
O(log n). - Common CRCW pomůže jen tam, kde více procesorů zapisuje stejnou hodnotu.
- Cena = čas krát počet procesorů; u stromu s
nprocesory typickyO(n log n), u optimalizované redukce s ubíráním procesorůO(n).
Pozor: nemíchat čas a cenu. U CRCW vždy říct, jaký typ kolize zápisu je povolený.
kauzalita
Kdy poznat: zadání chce FIFO broadcast, causal broadcast, kauzální relaci, porušení FIFO/kauzality/atomicity nebo synchronizovatelnost.
Kostra odpovědi:
- FIFO: zprávy od stejného odesílatele se doručují ve stejném pořadí, v jakém byly vyslány.
- Kauzalita: pokud
m1 -> m2, každý proces musí doručitm1předm2. ->vznikne lokálním pořadím událostí, send/receive vazbou a tranzitivitou.- Causal broadcast se typicky hlídá vektorovými hodinami nebo závislostmi ve zprávě.
- Atomic broadcast řeší shodné pořadí doručení u všech procesů.
Pozor: FIFO neřeší pořadí zpráv od různých odesílatelů. Kauzalita je silnější než FIFO pro závislé události, ale nerovná se total order.
A1: druhá priorita
Řazení, prescan, prefix
Kdy poznat: Pipeline Merge Sort, Enumeration Sort, Prescan, Odd-even transposition/merge, simulace po konkrétním počtu kroků.
Kostra odpovědi:
- U simulací vždy kreslit tabulku kroků a procesorů.
- Enumeration Sort: pro každý prvek spočítat rank podle počtu menších prvků; duplicitám dát stabilní pravidlo.
- Prescan: upsweep spočítá součty segmentů, downsweep rozdistribuuje prefixy.
- Pipeline Merge Sort: hodnoty jdou potrubím, procesy lokálně porovnávají a posílají dál podle pravidla.
Pozor: nejčastější chyba je posun o jeden krok nebo nejasné pravidlo pro duplicity.
Euler tour + suffix sums
Kdy poznat: strom, orientované hrany dopředu/zpět, Etour, SuffixS, preorder(v), level(v), počet potomků.
Kostra odpovědi:
- Nahradit každou hranu dvojicí orientovaných hran.
- Sestavit Euler tour jako seznam hran.
- Dopředným a zpětným hranám přiřadit váhy podle cílové funkce.
- Přes prefix/suffix sums spočítat hodnotu pro hrany a převést ji na vrcholy.
- Složitost typicky
O(log n)čas při paralelním scan/prescan.
Pozor: u level(v) se typicky dopředná hrana počítá jako +1, zpětná jako -1, ale záleží na použitém prefixu/suffixu a na tom, na které hraně hodnotu čteš.
Monitory a semafory
Kdy poznat: wait, signal, monitor, semafor, readers-writers, producer-consumer.
Kostra odpovědi:
- Monitor zapouzdřuje sdílená data a procedury; uvnitř monitoru je aktivní nejvýše jeden proces.
wait(c)uvolní monitor a uspává proces na podmíncec.signal(c)probudí jeden proces čekající nac.- Semafor má atomické operace
P/down/waitaV/up/signal. - Při pseudokódu vždy ukázat, kdo chrání kritickou sekci a kde se mění čítače/stav.
Pozor: u monitoru nezapomenout, že wait uvolňuje monitor. U semaforu nezamknout cestu, kde se dá skončit bez V.
Architektury
Kdy poznat: VLIW, zřetězené procesory, MISD, SIMD/MIMD, dataflow, Xeon Phi, PRAM, propojovací sítě.
Kostra odpovědi:
- Definovat princip jednou větou.
- Nakreslit tok instrukcí/dat nebo pipeline.
- Uvést, co se paralelizuje.
- Uvést výhodu a limitaci.
Pozor: u MISD/zřetězeného zpracování rozlišit více jednotek nad jedním proudem dat vs více datových proudů.
B: pravidelné doplňky
Distribuované algoritmy
Umět aspoň rozpoznat: Marzullo pro intervaly hodin, Maekawa/Suzuki/Ricart-Agrawala pro vzájemné vyloučení, Dijkstra/Hirschberg-Sinclair pro volbu v kruhu, volbu lídra podle priorit a epoch.
Pi-kalkul
U redukce hledat komplementární vstup/výstup na stejném kanálu, provést substituci jména a vypsat možné koncové výrazy. Pozor na rozsah vázaných jmen.
Carry-look-ahead adder
Pro každý bit určit g generate, p propagate, s stop. Carry se počítá prefixově z těchto stavů; pak se vypočte součet bitů s příslušným carry.
OCCAM
Kanály jsou synchronní komunikace. U procesu ukázat SEQ, PAR, čtení ?, zápis !, pole kanálů a případně ALT. Nekonečný filtr/buffer se píše jako cyklus nad čtením a zapisováním.
Jak to použít
- Projdi A0 a zkus každé téma vysvětlit do 90 sekund.
- Otevři minulé termíny a u každé otázky si najdi její mapování na téma.
- Když nevíš detail, jdi přes odkaz do topicu a vrať se zpět do termínu.
- Na konci si dej jeden cvičný test bez koukání.