mezi zidli a klavesnici
Pavel Troller
patrol na sinus.cz
Úterý Únor 28 09:55:20 CET 2012
Zdravím,
> Slušný překladač ovšem samostatně rozvine konstantní cyklus do makra.
> Případně obecný cyklus rozdělí do bloků ve smyslu
>
> for i=0 to max div 4 - 1
> Soucet += Pole[i*4]
> Soucet += Pole[i*4+1]
> Soucet += Pole[i*4+2]
> Soucet += Pole[i*4+3]
>
> for i=max div 4 to max
> Soucet += Pole[i]
>
> a následně si v druhém průchodu optimalizace uvědomí, že není žádná
> příčinná vazba mezi jednotlivými řádky těla prvního cyklu a rozhodí to
> do čtyř tasků, takže to v důsledku poběží na čtyřjádru rychleji než
> při té ruční úpravě. A upřímně, já bych se s tím tedy ručně do čtyř
> tasků nedělil :-)
Tak o tomto velice pochybuji.
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í.
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é.
Zdraví Pavel
>
> Ales Prochaska
>
> > Prekladace neumi pracovat poradne s pointery ve smycce. Takze v C staci se
> > vybodnout na cykly a hned to bezi rychleji. Treba toto:
> > for i=0 to 5
> > Soucet += Pole[i]
>
> > Je lepsi zapsat
> > Soucet += Pole[0]
> > Soucet += Pole[1]
> > Soucet += Pole[2]
> > Soucet += Pole[3]
> > Soucet += Pole[4]
> > Soucet += Pole[5]
>
> > Vypada do dlouze, ale po prelozeni je to obvykle kratsi a nekolikanasobne
> > rychlejsi
>
>
> > Michal Gregor
>
>
>
>
>
> > ----- Original Message -----
> > From: "Josef Štengl" <ok1ced na nagano.cz>
> > To: "HW-news" <hw-list na list.hw.cz>
> > Sent: Tuesday, February 28, 2012 1:42 AM
> > Subject: Re: mezi zidli a klavesnici
>
>
> >> čas je drahý, hodně drahý, proto se to dělá. Proto se kontrolují flagy a
> >> tráví se ne tři týdny, ale tři měsíce nad tím aby se ušetřilo 100??s.
> >> Protože 100??s znamená jestli SW bude fungovat bezpečně, jestli projde
> >> testy a jestli vám za něj zaplatí. 100??s je zatraceně spousta času, za
> >> které to stojí!
>
> > _______________________________________________
> > HW-list mailing list - sponsored by www.HW.cz
> > Hw-list na list.hw.cz
> > http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list