Programfordítások, optimalizáció

Kezdőlap Fórumok Vegyes felvágott Programfordítások, optimalizáció

10 bejegyzés megtekintése - 41-50 / 127
  • Szerző
    Bejegyzés
  • #2118628
    uzsolt
    Felhasználó
      mmp wrote:
      Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne.

      Én ebben nem vagyok annyira biztos. Tehát nem kell kitömöríteni, mint pl. régebben, dos alatt különféle exe-röptömörítőkkel. Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

      #2118629
      uzsolt
      Felhasználó
        mmp wrote:
        Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne.

        Én ebben nem vagyok annyira biztos. Tehát nem kell kitömöríteni, mint pl. régebben, dos alatt különféle exe-röptömörítőkkel. Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

        #2118630
        mmp
        Felhasználó
          uzsolt wrote:
          Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

          Akkor miért lesz lassabb?

          #2118631
          mmp
          Felhasználó
            uzsolt wrote:
            Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

            Akkor miért lesz lassabb?

            #2118632
            pointux
            Felhasználó

              „Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne. Vagyis gyorsabban betölti a merevlemez, de lassabb és több memóriát igényel”
              Ez sem igaz, mert egy optimalizálás nem olyan mint egy tömörítés. Lehet tömöríteni is, de az egy másik tészta.
              Itt egy pl. az optimalizálásra:
              Én azt a műveletet, hogy ax=0 minimum két módon állíthatom elő:
              1) xor ax,ax
              2) mov ax,0
              A kettes számú jelölt nyílván pont egy byte-tal eredményez hosszabb kódot, amígy egy 32 bites regiszternél ez már 3 byte lesz.
              Tehát a fordítónak optimizálás esetén át kell írnia néhány dolgot.
              Pl. amikor c-ben kiadod a return 0 parancsot, akkor az emberi szemlélethez közelebb álló

              Code:
              mov eax, 0
              ret

              kódot úgy fogja megvalósítani, hogy

              Code:
              xor eax,eax
              ret

              ax: egy 16 bites regiszter
              eax: egy 32 bites
              mov: =
              xor: kizáró vagy kapcsolat
              ret/return: visszatérés ahhoz a ponthoz, ahonnan a függvényt meghívták.

              #2118633
              pointux
              Felhasználó

                „Az Os meg igaz, hogy kisebb kódot generál, de olyan mintha tömörített lenne. Vagyis gyorsabban betölti a merevlemez, de lassabb és több memóriát igényel”
                Ez sem igaz, mert egy optimalizálás nem olyan mint egy tömörítés. Lehet tömöríteni is, de az egy másik tészta.
                Itt egy pl. az optimalizálásra:
                Én azt a műveletet, hogy ax=0 minimum két módon állíthatom elő:
                1) xor ax,ax
                2) mov ax,0
                A kettes számú jelölt nyílván pont egy byte-tal eredményez hosszabb kódot, amígy egy 32 bites regiszternél ez már 3 byte lesz.
                Tehát a fordítónak optimizálás esetén át kell írnia néhány dolgot.
                Pl. amikor c-ben kiadod a return 0 parancsot, akkor az emberi szemlélethez közelebb álló

                Code:
                mov eax, 0
                ret

                kódot úgy fogja megvalósítani, hogy

                Code:
                xor eax,eax
                ret

                ax: egy 16 bites regiszter
                eax: egy 32 bites
                mov: =
                xor: kizáró vagy kapcsolat
                ret/return: visszatérés ahhoz a ponthoz, ahonnan a függvényt meghívták.

                #2118634
                mmp
                Felhasználó

                  „mintha”
                  optimalizálás során minden olyan optimalizálási eljárást kihagy, ami a méret növekedéséhez vezetne. Ezért lesz lassabb, mert azokat is kihagyja amivel a kód gyorsabban – az adott processzor tulajdonságait kihasználva – végez.

                  #2118635
                  mmp
                  Felhasználó

                    „mintha”
                    optimalizálás során minden olyan optimalizálási eljárást kihagy, ami a méret növekedéséhez vezetne. Ezért lesz lassabb, mert azokat is kihagyja amivel a kód gyorsabban – az adott processzor tulajdonságait kihasználva – végez.

                    #2118636
                    pointux
                    Felhasználó
                      mmp wrote:
                      uzsolt wrote:
                      Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

                      Akkor miért lesz lassabb?

                      Nem feltétlenül lesz lassabb.
                      De az előző példánál maradva, ha két regiszter kizáró vagy kapcsolata pl. több órajel ciklus alatt megy végbe, mint egy regiszterbe egy 0 bemásolása (nem egy szám, mert különbözhet*) – ami lehet, hogy így is van (bár nem biztos, elvégre itt két regiszterről van szó**), akkor egy xor ax,ax rövidebb, de lassabb egy mov ax,0-nál.

                      * a bitek átírása idő kérdése
                      ** a regiszter műveletek gyorsabbak, mint a memória műveletek, a xor művelet viszont lassabb, mint a mov. Jelen esetben azonban regiszter, regiszter közötti műveletről van szó.
                      (Egy xor ax, 28, biztosan lassabb, mint egy mov ax, 28.)

                      #2118637
                      pointux
                      Felhasználó
                        mmp wrote:
                        uzsolt wrote:
                        Egyszerűen csak a kód mérete lesz kisebb, a legtöbb esetben a sebesség rovására.

                        Akkor miért lesz lassabb?

                        Nem feltétlenül lesz lassabb.
                        De az előző példánál maradva, ha két regiszter kizáró vagy kapcsolata pl. több órajel ciklus alatt megy végbe, mint egy regiszterbe egy 0 bemásolása (nem egy szám, mert különbözhet*) – ami lehet, hogy így is van (bár nem biztos, elvégre itt két regiszterről van szó**), akkor egy xor ax,ax rövidebb, de lassabb egy mov ax,0-nál.

                        * a bitek átírása idő kérdése
                        ** a regiszter műveletek gyorsabbak, mint a memória műveletek, a xor művelet viszont lassabb, mint a mov. Jelen esetben azonban regiszter, regiszter közötti műveletről van szó.
                        (Egy xor ax, 28, biztosan lassabb, mint egy mov ax, 28.)

                      10 bejegyzés megtekintése - 41-50 / 127
                      • Be kell jelentkezni a hozzászóláshoz.