Uutisarkisto

GCC 4.3.2 -säätöä - 02.04.2009 12.15.50

Kuten ehkä joku tietääkin, GCC 4.3.2 on nyt Gentoon vakaassa haarassa (amd64). Vaikka kaikkien pakettien kääntämiseen meni noin 10 tuntia aikaa, niin tulipahan kerrankin siivottua world-tiedostoa ja poistettua turhia ohjelmia.

Pyrin aina optimoimaan optipng-ohjelmalla kaikki png-tiedostoni, ja tämä on skriptattunakin suhteellisen aikaavievä operaatio. Esimerkiksi hieman yli megatavun kuvan optimointiin voi helposti kulua kaksi minuuttia. Kun GCC vielä jauhoi pakettejani, mieleeni juolahti, että voisin testata optipng-ohjelmaan GCC:n hurjempia optimointivipuja. Lopputulos oli yllättävä, tietyt optimoinnit toivat jopa 13 %:n parannuksen suoritusaikaan. Testasin muutamia eri optimointikombinaatioita ja mittasin ajan, joka kuluu optimoitaessa 1,2 MiB:n png-tiedosto. Tässä käytetyt optimointivivut sekä tulokset (prosessori: AMD Athlon 64 X2 5200+):


-march=native -O2 -pipe -msse3
optipng -o5 *.png > /dev/null 114.65s user 0.28s system 99% cpu 1:54.96 total
optipng -o5 *.png > /dev/null 113.76s user 0.27s system 99% cpu 1:54.06 total
optipng -o5 *.png > /dev/null 113.84s user 0.02s system 99% cpu 1:53.89 total
optipng -o5 *.png > /dev/null 113.59s user 0.02s system 99% cpu 1:53.64 total

-march=native -O3 -pipe -ftree-vectorize -funroll-all-loops -mmmx -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 99.37s user 0.03s system 99% cpu 1:39.44 total
optipng -o5 *.png > /dev/null 97.88s user 0.02s system 99% cpu 1:37.91 total
optipng -o5 *.png > /dev/null 97.73s user 0.27s system 99% cpu 1:38.02 total
optipng -o5 *.png > /dev/null 97.85s user 0.02s system 99% cpu 1:37.90 total

-march=native -O3 -pipe -fomit-frame-pointer -ftree-vectorize -funroll-all-loops -mmmx -m3dnow -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 98.75s user 0.25s system 99% cpu 1:39.08 total
optipng -o5 *.png > /dev/null 97.71s user 0.23s system 99% cpu 1:37.96 total
optipng -o5 *.png > /dev/null 97.98s user 0.02s system 99% cpu 1:38.05 total
optipng -o5 *.png > /dev/null 97.70s user 0.23s system 99% cpu 1:37.95 total

-march=native -O3 -pipe -fomit-frame-pointer -ftree-vectorize -mmmx -m3dnow -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 103.42s user 0.29s system 99% cpu 1:43.80 total
optipng -o5 *.png > /dev/null 102.50s user 0.03s system 99% cpu 1:42.59 total
optipng -o5 *.png > /dev/null 102.28s user 0.02s system 99% cpu 1:42.32 total
optipng -o5 *.png > /dev/null 102.50s user 0.25s system 99% cpu 1:42.80 total

-march=native -O3 -pipe -fomit-frame-pointer -ftree-vectorize -ffast-math -mmmx -m3dnow -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 103.42s user 0.03s system 99% cpu 1:43.47 total
optipng -o5 *.png > /dev/null 102.47s user 0.02s system 99% cpu 1:42.52 total

-march=native -O3 -pipe -fomit-frame-pointer -ftree-vectorize -funroll-all-loops -ffast-math -mmmx -m3dnow -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 98.47s user 0.04s system 99% cpu 1:38.54 total
optipng -o5 *.png > /dev/null 98.05s user 0.02s system 99% cpu 1:38.08 total
optipng -o5 *.png > /dev/null 97.87s user 0.02s system 99% cpu 1:37.91 total
optipng -o5 *.png > /dev/null 98.04s user 0.02s system 99% cpu 1:38.14 total

-march=native -O3 -pipe -fomit-frame-pointer -ftree-vectorize -funroll-all-loops -fno-strict-aliasing -mmmx -m3dnow -msse -msse2 -msse3
optipng -o5 *.png > /dev/null 99.50s user 0.03s system 99% cpu 1:39.55 total
optipng -o5 *.png > /dev/null 98.50s user 0.02s system 99% cpu 1:38.54
total


Kuten yo. tiedoista näkyy, niin mikäli joutuu optimoimaan paljon suurikokoisia kuvia, on parannus jo merkittävä. Seuraavaksi voisi yrittää profiloida optipng-ohjelmaa GCC:n -fprofile-*-vivuilla. Tästäkin minulla on hyviä kokemuksia, esimerkiksi bsnes nopeutuu profiloinnin avulla noin 12%. Toki tämä riippuu todella paljon ohjelmatyypistä.