Tuossa on yksi vihje jos tarvitsee paljon nopeutta.

Jossain silmukassa esim, niin voi määritellä aluksi jo:

register int muuttuja;)

tällöin tuo muuttuja laitetaan prosessorin rekistereihin suoraan, jotta ei tarvitse muistista hakea.
12245
Äänestä

Muut lukivat myös

Vastaukset 12

Vanhimmat

Kyllä tuon pitäisi mennä automaattisesti, jos optimointitaso on oikein.
.lst:stä normi muuttuja:
;---- Variable 'pHeader' assigned to Register 'R14/R15' ----

Mutta hitaammaksi saa sitten volatilella, mutta näiden ero on hyvä käsittää varsinkin jos on cachea, liukuhihna, DMA ja keskeytykset käytössä.

t:p

Äänestä

Käytä mielellään useita muuttujia. Joka ohjelmassa ainakin viittä.

Äänestä

Rekistereiden kanssa kannattaa muistaa, että register-muuttujat on muilta muuttujilta poissa. Paikallinen nopeutuminen onkin globaalia hidastumista, jos niitä käyttää väärin..
Kääntäminen muistuttaakin jonkin verran tetriksen peluuta, kun sitä tarpeeksi kieroin silmin katsoo..

Äänestä

Jos tarvii paljon nopeutta kannattaa käyttää kunnon kääntäjää ja kirjoittaa koodia joka kääntäjän on helppo ymmärtää.

Kaikki laajimmassa käytössä olevat C-kääntäjäjät jättää suurimman osan näistä vihjeistä huomiotta (jos et liputa erikseen että tiedän mitä teen) juuri siksi että kehittäjät tietävät koneen pystyvän jo huomattavasti ihmistä parempaan optimointiin kun on kyse softasta jota on tarkoitus ajaa edes muutamalla eri prosessorilla...

Hasukaa ajavietettähän sekin voi olla kun optimoi kaikille eri prosessoreille tuon oman softan käsipelillä jotta "raskaassa" loopissa menisi 10000ns eikä 10201ns.

Äänestä

Tän päivän kääntäjät optimoi eli mahdollisesti pystyt saamaan hidasta koodia aikaan, jos lähdet optimoimaan kääntäjää vastaan.

Äänestä

Tiedä häntä. Nykyään kääntäjät tekevät useimmiten hyvää työtä, mutta hallittavia arkkitehtuureja on niin paljon, että joissakin tilanteissa näyttää käyvän pahoja mahalaskujakin.. Toisaalta, jos prosessori on yksinkertainen, koodi on assemblerina katsottuna kaunista, eikä sisällä ainuttakaan ylimääräistä riviä. Ainoa optimointi, mitä joutuu kuitenkin tekemään on käskyjen järjestyksen optimointi: Kääntäjä kun ei voi tietää, mitä tarkoitusta varten jokin asia asetetaan esim. keskeytyksessä IO-porttiin..
Myöskään cache-algoritmit eivät aina ole sellaisia kuin pitäisi ja saavat yhdellä arkkitehtuurilla toimivan (30 framea/s) ohjelman pyörähtämään toisella hitaammin (2 framea/s). Mitä isompi ohjelma, sitä todennäköisempi cache-miss väärässä paikassa. Joskus em. ilmiön saa aikaan esim. selaimessa asentamalla väärän pluginin, joka täyttää cachen väärään aikaan ja siten tekee tyhjäksi optimoinnit..
Osasyyllinen saattaa olla myöskin käyttöjärjestelmä: Jostain syystä väärin tunnistuneen laitteen asetukset tehdään väärään moodiin, mikä aiheuttaa laitteen käytön 10%:lla aiotusta nopeudesta..

Äänestä
  • Tuon tason optimointi että prosessorien välimuistit ja rekisterit merkitsisi jossain tilanteissa jotain, on aika pitkälti 90-lukua. Niissä tilanteissa joissa tarvitsi jotain erityisiä reaaliaikaisuusvaatimuksia.

    Käytännössä taas lähes kaikessa ohjelmoinnissa mikään prosessorista riippuva suorituskykyoptimointi ei ole ollut merkittävää 8-bit vehkeet pois lukien 80-luvun alkupuolen jälkeen. Silloin nimittäin yleistyi 16-bittiset tehokkaammat prosessorit ja edulliset Pascal/C kääntäjät. Silloinkin muistikapasiteetti oli se minkä kanssa optimointiin, ei niinkään prosessori.

    90-luvun alkupuolelta lähtien muistia oli yleisesti niin paljon käytössä, että jos ylimääräistä muistia on niin sitä on käytetty vähentämään levytoimintoja. Yleinen optimointikaava oli että varataan ohjelmalle mustia 2^x määrä mukaan mitä tarvitsee, olkoot se sitten 2 megaa tai 512 megaa, mitä nyt tarvitseekaan ja "väljä" tila siellä muistinkäytössä sitten jätetään minimoimaan IO:ta.

    90-puolivälissä sitten WWW yleistyi ja tärkein optimointikohde on ollut vähentää HTTP kyselyjä ja kaistan käyttöä. Sitten tulleet IOPS:t mikäli muistia vaan riittänyt prosessori vasta lopuksi. Rekisterit ja cachet eivät käytännössä ole olleet merkittäviä.

    Tämän lisäksi, suorituskykyoptimoinnin edelle on mennyt koodin rakenteen optimointi kun se vaikuttaa kaikkiin koodin/ohjelman laatuun liittyviin asioihin, suorituskyky mukaan lukien.

    Miksi sillä prosessorilla ei ole niin väliä johtuu yksinkertaisesti siitä, että prosessorin ja kääntäjien suorituskyky kasvaa kaiken aikaa valtavalla vauhdilla. Niinhän ne muutkin asiat parantuvat mutta vuosikymmeniä juurikin se miten prosessori toimii on tehostunut eniten tai jos ei vauhtia ole tullut lisää niin hyötysuhde on parantunut eniten. Tästä syystä on kannattavaa kuormittaa prosessoria enemmän jos sillä vähennetään kaistaa, joko tallennuksen tai verkon läpi. Jopa muistikaistan käyttöä kannattaa optimoida prosessoria kuormittamalla käyttämällä reaaliaikaista datakompressiota. Näin on kannattanut tehdä jo 80-luvulla.

    Äänestä

  • "käyttämällä reaaliaikaista datakompressiota"

    Mites tuo parhaiten tehdään Ubuntussa?

    Äänestä

  • Kaippa tuolla yritetään muistin kulutusta jotenkin rajoittaa. Loogisin paikka sille taitaa olla cache-osion muistijatke:
    http://en.wikipedia.org/wiki/Zram
    Vai onko muita, jotka toimisivat vielä paremmin?

    Äänestä

  • haluu_tietää kirjoitti:

    "käyttämällä reaaliaikaista datakompressiota"

    Mites tuo parhaiten tehdään Ubuntussa?

    No esimerkiksi vaikka rsync:n valitsin -z

    Äänestä

Mielestäni optimointia on se että autossa on keraaminen (ceramic) ratti ja libasto. Lämpenee kylmillä keleillä ja mukava kämmenille.

Siihen päälle vielä vaikka optimoidut rekisteri-kilvet, kyllä kelpaa. Menee 80 km/h sijaan ainakin 82 km/h.

mmmts. siis vitsi.

Äänestä

OHO! MEillähän on täällä MELKOENEN HGUERU!!!

Äänestä

Kommentoi aloitusta


registerint kirjoitti:

Jossain silmukassa esim, niin voi määritellä aluksi jo:

register int muuttuja;)

tällöin tuo muuttuja laitetaan prosessorin rekistereihin suoraan, jotta ei tarvitse muistista hakea.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu