Ladeni multithreadove aplikace

Mikulas Patocka mikulas na artax.karlin.mff.cuni.cz
Sobota Leden 22 23:08:18 CET 2000


>:> Pokud se promenna cte bez zamku, tak se musi dat volatile, jinak
>:> hrozi, ze to kompilator nejak preoptimalizuje. Taky je treba brat
>:> zretel na to, ze na SMP jeden procesor vidi zapisy druheho zpozdene;
>
>: Huh, zacinam mit pocit, ze jsem docista mimo. A to nemam rad :)
>
>No a preto radsej zamykaj poctivo a nespekuluj nad tym,
>ze "toto je urcite atomicke a ak budu pristupy v tomto
>poradi, tak zamykat netreba". Robia sa aj take triky,
>ale to nechaj Linusovi a spol. do jadra a svoje programy
>rob radsej konzervativne :-)
>
>:> cteni a zapisy jednoho procesoru muzou byt navic ruzne prehazovany.
>
>Toto AFAIK nie je pravda (siel o tom pred casom znacne
>technicky thread v l-k, kde islo o usetrenie par
>cyklov v spinlockoch). Procesor sice moze interne
>urobit reordering instrukcii, ale nemoze si dovolit
>triky, ktore je vidno na jeho rozhraniach. Dovodom
>je to, ze obsahy cache oboch procesorov musia
>byt bezpodmienecne synchronne. Takze ak kod
>zapisuje najprv A a potom B, iny procesor nemoze
>vidiet najprv zapis B a potom A. Nie som si uplne
>100% isty, ale to bol tusim vysledok tej diskusie.

Ja jsem ten thread taky cetl a zavery z neho byly tyto:
- Nekolik cteni muze procesor libovolne prehazet
- Cteni muze byt presunuto pred zapis
- Zapisy procesor nesmi prohodit; zapisy se k ostatnim procesorum
  dostavaji zpozdene, ale v tom samem poradi, jak byly provedeny
- Cteni nesmi byt presunuto za zapis, ale nektera stara pentia pro to
  delaji
- Pokud chceme vnutit poradi, musime pouzit serializujici instrukci

Mikulas


Další informace o konferenci Linux