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