Forum » Programiranje » Duff's device
Duff's device

Gundolf ::
Upam da se boste tudi tisti ki ne marate C++a ;) znasli v tej kodi. Zadeva pac napolni tabelo elementov od 'begin' do 'end' z vrednostjo 'obj'. Zanima me ce ste ze kdaj slisali za ta t.i. Duff's device in kaj o njem menite.
Moj emnenje je, da je tole sicer dokaj ogaben a hkrati lep nacin za unwindanje zanke.
template <class T> inline void FillDuff (T* begin, T* end, const T& obj) { switch ((end - begin) & 7) { case 0: while (begin != end) { *begin = obj; ++begin; case 7: *begin = obj; ++begin; case 6: *begin = obj; ++begin; case 5: *begin = obj; ++begin; case 4: *begin = obj; ++begin; case 3: *begin = obj; ++begin; case 2: *begin = obj; ++begin; case 1: *begin = obj; ++begin; } } }
Moj emnenje je, da je tole sicer dokaj ogaben a hkrati lep nacin za unwindanje zanke.

Vesoljc ::
lepota je itaq vprašljiva, ampak če dobiš performance ven, ji pač natakneš črno vrečo čez glavo in uživaš v rezultatu...
nekoč sem neki bral o tem duff-u, sam kake konkretne študije pa nisem naredu.
si naredu kak test? zanimivo bi bilo tudi videti kaj naredi prevajalnik...

nekoč sem neki bral o tem duff-u, sam kake konkretne študije pa nisem naredu.
si naredu kak test? zanimivo bi bilo tudi videti kaj naredi prevajalnik...
Abnormal behavior of abnormal brain makes me normal...

Gundolf ::
Menda je uspesnsot zelo odvisna od prevajalnika (teste je zame naredil kar Alexandrescu
). V primerjavi s navadno for zanko je duff's device hitrejsi (10%-90%) v primeru ne prevelikega stevila elementov, ki jih fillas (ko te zacne bremzat RAM je vseeno kaksne finte delas procesorju). Razlika je se malo visja v primeru kopiranja bufferja in ne le filanja s konstanto.
Skoraj siguren sem, da bi morala biti razlika posebej ocitna pri izklopljenih optimizacijah. Zanimivo pa bi bilo sprobati zadevo v Javi. Skoda ker jo jaz tok ne maram (Jave), da se mi ne da niti tega poskusa narest
.
Se za tiste ki niste uspeli ugotoviti kaj algoritem sploh delam je tu ekvivalentna a pocasnejsa koda

Skoraj siguren sem, da bi morala biti razlika posebej ocitna pri izklopljenih optimizacijah. Zanimivo pa bi bilo sprobati zadevo v Javi. Skoda ker jo jaz tok ne maram (Jave), da se mi ne da niti tega poskusa narest

Se za tiste ki niste uspeli ugotoviti kaj algoritem sploh delam je tu ekvivalentna a pocasnejsa koda

for (T* it = begin; it != end; ++it) *it = obj;
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | PL SQL problemOddelek: Programiranje | 971 (540) | killa bee |
» | vector::iterator problemi, brisanje podatkov iz vektorjaOddelek: Programiranje | 1198 (1049) | mn |
» | Quick sort ascending/descendingOddelek: Programiranje | 2125 (1805) | infiniteLoop |
» | [c++] standardni c++ in dogodki(events)Oddelek: Programiranje | 1814 (1639) | yeti |
» | Šah [Pacsal]Oddelek: Programiranje | 2271 (1874) | NeOman |