sziasztok!
Egyszerű kérdésem lenne az expertekhez: mi költségesebb,
egy értékadás vagy egy feltételvizsgálat?
Ha józanul végiggondolom mi történik egyik és másik esetben akkor azt mondom, az értékadás lesz a nyerő, mert az fixen egy művelet, míg a feltételvizsgálatnál értékeket vagy műveletek eredményét kell lekérni, összehasonlítgatni, stb. De javítsatok ki ha mellélövök.
Nyilván interpreter vagy fordítófüggő is dolog, de elsősorban általánosságban érdekel.
Hol jött elő? Pl.: van egy flag változóm, akkor ezt egy adatszerkezeten végigiterálva mindig állítsam, vagy csak akkor ha tényleg szükség van erre.
- 4082 megtekintés
Hozzászólások
C-ben pl egy értékadás egy az egybe lefordul egysoros assembly-re:
C:
i = 1;
ASM:
MOVE.L #1, _i
Egy feltétel:
C:
if(i==z) {...}
ASM:
* Tegyük a 'z' változót a D7 regiszterbe
MOVE.L _z, D7
* most hasonlítsuk össze i-t a D7 tartalmával
CMP.L _i, D7
* ha nem egyenlő, ugorjunk L1-re
BNE.S L1
Tehát háromszor olyan számításigényes. Viszont ha nem egy egyszerű számot adsz át, hanem mondjuk összeadsz az értékadásnál, ami azért sokkal gyakoribb egy élő kódon, kb ugyanott vagy. Persze a feltétel is lehet bonyolultabb és az értékadás is jöhet változóból.
- A hozzászóláshoz be kell jelentkezni
"Tehát háromszor olyan számításigényes."
Ez ennel bonyolultabb. Egyreszt az egyes muveletek nem ugyanannyi ciklust igenyelnek (pl. a memoriamuveletek lassuak nagyon), masreszt a fordito az esetek nagy reszeben van annyira intelligens, hogy benntartsa a dolgokat regiszterben, ha meg kelleni fog.
Es akkor ilyenekrol meg nem volt szo, hogy elagazasbecsles, cache-ek, ...
Szvsz nagy altalanos okossagot nem lehet erre mondani, meg kell merni a kododdal.
--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!
- A hozzászóláshoz be kell jelentkezni
Termeszetesen 'attol fugg'. A memoriahozzaferes a kritikus. Ha nincs a cache-ben, akkor mindenkepp lassu vagy. Az iras lassabb, mint az olvasas, ellenben az elagazasbecsles nem mindig talal, tehat ott is bukhatsz idot.
Javaslat: ez olyan apro optimalizacionak tunik, amivel nem erdemes azelott foglalkoznod, hogy a programod mar mukodne (tipikus premature optimisation). Valoszinuleg nem ez fogja limitalni a teljesitmenyedet. Ha mar minden kesz van, akkor profilozgass, nezz cache miss aranyokat, hotspotokat, stb., VTune a baratod.
----------------------
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni