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 | 918 (487) | killa bee |
» | vector::iterator problemi, brisanje podatkov iz vektorjaOddelek: Programiranje | 1121 (972) | mn |
» | Quick sort ascending/descendingOddelek: Programiranje | 2038 (1718) | infiniteLoop |
» | [c++] standardni c++ in dogodki(events)Oddelek: Programiranje | 1749 (1574) | yeti |
» | Šah [Pacsal]Oddelek: Programiranje | 2225 (1828) | NeOman |