• Sadist
    #135
    "Egyébként pontosan hogyan zajlik ez? Mivel nem tudok programozni el tudná valaki mesélni úgy, hogy én is értsem. Pl. arról van szó, hogy más matematikai algoritmussal számolnsz valamit? Vagy értelmesebb sorrendben hívsz le adatot, hogy a memória gyorsabban "egye" meg? Stb...?"

    Igen, nagyjából ilyesmi. Az optimalizálás ott kezdődik, hogy kitalálod milyen algoritmusokat és adatszerkezeteket érdemes használni. Pl. ha tudod, hogy van egy rakás adatod, ami nem fog változni, akkor bináris fát használsz a tárolására, mert abban lehet a leggyorsabban keresni. A beszúrás viszont sokáig tart, és macerás. Ha viszont valami olyan tároló kell neked, amibe gyorsan tudsz beledobni egy elemet, és gyorsan akarsz hivatkozni az n. elemére, akkor elég egy sima vektor is.
    Vagy ott van pl. a 3D megjelenítés. Ugye minden kirajzolt objektum kis háromszögekből áll, amiből rohadt sok van. Nagy részét viszont nem is látod, mert a nézőponthoz közelebb lévők takarják a hátsókat. Csak ezt a takarást minden egyes poligonra kiszámolni rohadt költséget.
    Az Unreal motorja pl. azt csinálja, hogy a pályát felszeleteli konvex darabokra, és egy logikai fába szervezi (BSP - Binary Space Partitioning). Így rengeteg objektum kirajzolását meg lehet spórolni, egyszerűen csak meg kell nézni, hogy a kamera és a kirajzolandó objektum hol vannak a fában. Ez kb. olyasmi, mintha belépnél egy lakásba, és olyan helyre mennél, ahonnan a fürdőszobának még az ajtaját sem látnád. Ha még az ajtót sem látod, akkor a fürdőszobát pláne nem, ergó a benne lévő dolgokat nem is kell "kirajzolni".
    Az ilyen megoldások kitalálásához kell a széleskörű ismeret, úgy mint algoritmusok, adatszerkezetek, kis bonyolultságelmélet, gráfelmélet, grafika, diszkrét matematika, és még sorolhatnám.
    Lehet, hogy az OKJ okleveles programozó gyorsan és optimálisan ír kódot, viszont ilyeneket megfelelő előismeretek nélkül soha nem fog kitalálni, de még lehet, hogy megvalósítani sem.
    Persze ott van a kód szintű optimalizálás is, amikor a fordító kiköp valamit, azt a tesztelők megvizsgálják, hogy melyik kódrész fut legtöbbet, aztán elkezdik akár assembly szinten hackelgetni, hogy pl. a változókat minél tovább regiszterekben tartsák, a proci minél kevesebbszer használja a cache-t, memóriához csak legvégső esetben nyúljon, ésatöbbi.