mezi zidli a klavesnici

Pavel Troller patrol na sinus.cz
Úterý Únor 28 10:46:10 CET 2012


Zdravím,

> > Tak o tomto velice pochybuji.
> 
> Znám minimálně jeden, který to umí.

A jaký to je ?

> 
> >   Pokud by to nějaký překladač skutečně udělal (o čemž pochybuji primárně),
> > musel by zajistit vzájemnou synchronizaci a blokování těch tasků
> > (prostřednictvím spinlocku, mutexu, semaforu či podobného mechanismu)
> > tak, aby se nepokoušely pracovat současně, což by samozřejmě vedlo k
> > výrazné nestabilitě výsledku :-). A díky tomu by to bylo nesrovnatelně
> > větší a hlavně i pomalejší než jednoduché single-threaded řešení.
> 
> V tomto případě semaforu. Je to větší, ale když je potřeba dělat
> nějaké složitější výpočty nad nějakým větším polem tak už se to
> vyplatí. Samozřejmě, že u polí o pár tisících složkách je to k ničemu.
> 
Samozřejmě, pokud by se nad polem počítaly nějaké složité výpočty nad
velkými poli, tak se multithreading vyplatí. Měl jsem na mysli ten konkrétní
příklad s prostou sumou pole nevelkého pole :-).

> 
> >   Minimálně v *IXovém světě, pokud chcete, aby běželo něco multithreadově
> > nebo dokonce multiprocesně, musíte si to zajistit sám (clone(), fork()),
> > žádný kompilátor si toto nedovolí udělat o své vlastní vůli. Programování
> > v jiných OSech neznám, ale divil bych se, kdyby to tam bylo výrazně
> > odlišné.
> 
> Ne o své vlastní vůli, o vůli programátora, #pragma optimize(...)
> 
> Jinak u jazyků, které používají task jako úroveň abstrakce (Ada) se
> fork nedělá (samozřejmě, kdesi v hluboko systémové knihovně ano),
> například u Ady se task spouští vstupem do jeho oblasti platnosti
> (zpravidla přes new).

Mu to samozřejmě ano. V jiných jazycích to může být obdobné. Nicméně původní
příspěvek se víceméně týkal C-like jazyků a zde bych řekl, že to standardně
nemá ani C++.

> 
> 
> >   Zdraví Pavel
> 
> Aleš Procháska
> 
Pavel


Další informace o konferenci Hw-list