Jatketaan näitä tyhmiä kysymyksiä.
Kieli C ja kääntäjä GCC(Dev-c ), tutkiskelin kääntäjän asetuksia.
Kokeilin huvikseni mitä vaikutusta prosessorin määrityksellä on. Hämmästys oli suuri, että nopein olikin -mtune=i386 noin parisekunttia nopeempa.
Eikä suinkaan -mtune=athlon-xp joka testi konees on.
Joten mistä moinen johtuu?
Eikö järjenmukaan nopein pitäisi olla se asetus mikä prossu konees on.
Kieli C ja kääntäjä GCC(Dev-c ), tutkiskelin kääntäjän asetuksia.
Kokeilin huvikseni mitä vaikutusta prosessorin määrityksellä on. Hämmästys oli suuri, että nopein olikin -mtune=i386 noin parisekunttia nopeempa.
Eikä suinkaan -mtune=athlon-xp joka testi konees on.
Joten mistä moinen johtuu?
Eikö järjenmukaan nopein pitäisi olla se asetus mikä prossu konees on.
Vastaukset 4
Vanhimmat
En käytä GCC, mutta tarkoitatko nyt ajan mitä kuluu ohjelman kääntämiseen tai aika mitä menee sen suorittamiseen?
Jos koodi on erittäin yksinkertainen (loopin pyörittämistä triljoona kertaa) kääntäminen on varmasti nopeampi Intel86383 prosessorille, ja suoritus toisella prosessorilla yhtä nopeaa (kellotaajuudesta kiinni) koska mitään optomoitavaa ei ole.
CISC-prosessoreitten etu (Complex Instruction Set Computer) näkyvät vasta monimutkaisempien ongelmien kanssa (tällöin prosessori suorittaa monta käskyä saman ohjelmalaskurin syyklillä).
Alkeellisessa ongelmassa kyseesssä on RISC-prosessorin ohjelmointi (Reduced Instruction Set Computer), eli tietokone suorittaa yhden käskyn per ohjelmalaskurisyykli, mutta erittäin nopeasti). Eli Athlonin voimakkuuksia ei pystytä hyödyntämään.
Tarkoitukseni ei ole olla ilkeä, mutta tämä keskustelu menee niin paljon tekniselle puolelle että minulla ei ole aikaa (ja intoa) kirjoittaa oppikirjaa vastaukseksi yhteen kysymykseen (joka alunperin oli hassusti muotoiltu).
Jos tarkoituksesi on levittää sitä ohjelmaa, käännä se sille tasolle (platform) mikä on minimivaatimus sen käytölle.
Olihan tuo aika epäselvä kysymys.
Joten tarkkennetaan hieman. Tarkoitin aikaa joka menee ohjelman suorittamiseen. Testikone jolla tuo käännetään ja testataan on AMD Athlon-xp (1600). Tulevaisuudessa tuo jää käyttöön vain tuolle koneelle.
Kääntäen käyttäen lippua -mtune=athlon-xp ohjelman suorittaminen on noin parisekunttia hitaampa kuin käyttäen lippua -mtune=i386 Toistin testin useaan kertaan.
Ainakin minun käsityksen mukaan kääntäjän tuottama koodin(exe) pitäisi olla nopeinta ja tehokkainta tuolla -mtune=athlon-xp lipulla, koska koneessa on Athlon-xp prossu jolla tuo ohjelma suoritetaan.
Ohjelmani on aika yksinkertainen periaatteessa vain loopinpyörittämistä ja taulukon lukua.
Kun tuo i386 on todella vanha, joten voiskohan olla niin, että kääntäjä tekeekin sille kaikkeista optimoiduinta koodia hyvin yksinkertaisissa ohjelmissa.
Vai voiskohan olla sittenkin, että nykyprossut suorittavat vanhempia käskyjä hitusen nopeammin kuin uusia hienoja.
En mie mitään oppikirjaa vastaukses vaadikkaan, riittää ihan pikkuruinenkin.
Ei kannata miettiä mitä yhdelle koodinpätkälle käy. Se voi olla sellainen, mitä tilastotieteilijät nimittävät oudokiksi.
Testaa useita erilaisia ohjelmia, niin näet miten hyvin optimointilipun käyttäminen yleensä auttaa ajonopeuteen. Tai unohda koko millisekuntien viilaaminen, ja tee oikeita ohjelmia. Ei se niin tärkeää ole kuin voisi luulla :-)
Kiitoksia vastauksesta. Kyl mielestäni parisekunttia (2000ms) on paljon joten kyl sen takia kannattaa noita eriasetuksia kokeilla. Ja ihan oikee ohjelmahan tää on.
Mutta eikös kääntäjän pitäisi tajuta, että koodilleni parempi olisi joku muu optimointi jolloin käyttäisi sitä. Siis viisaskääntäjä ja valitsisi aina parhaimman tavan.