Kis játék a GCC-vel

Van nekünk egy Algoritmusok és Adatszerkezetek tárgyunk, és mivel ott tanulnunk algoritmusokat, ezért kézenfekvő, hogy kicsit tesztelgessek.
A C fájl a következő:

#include <stdio.h>

int p2(n,k) {
        if (k==1 || n==1) return 1;
        if (k>=n) return p2(n, n-1) + 1;
        return p2(n, k-1) + p2(k, n-k);
}
int main (int arc, char** argv) {
        /*printf ("%d\n", p2(250, 250));*/
        p2(250, 250);
        return 0;
}

Ez egy nagyon egyszerű (és elég lassú) picike rekurzív algoritmus.
Ehhez írtam egy gyors kis tesztelő szkriptet:

#!/bin/sh
gcc -o alap -march=i386 -O0 $1
gcc -o optimalizalt -march=prescott -O3 -fomit-frame-pointer -fgcse-after-reload -mfpmath=sse -funswitch-loops $1 -mtune=prescott
gcc -o binaris -O2 -march=i586 -fomit-frame-pointer $1
gcc -o o2 -O2 -march=prescott -fomit-frame-pointer $1
gcc -o o3 -O3 -march=i586 -fomit-frame-pointer $1
gcc -o generic_opt -march=i586 -O3 -fomit-frame-pointer -fgcse-after-reload -funswitch-loops $1
echo "Alap forditas:"
time ./alap
echo "Binaris disztribucio:"
time ./binaris
echo "Optimalizalt forditas:"
time ./optimalizalt
echo "O2 + march:"
time ./o2
echo "O3 magaban:"
time ./o3
echo "Altalanos optimalizalas:"
time ./generic_opt
rm optimalizalt binaris alap o2 o3 generic_opt

És az eredmények:

Alap forditas:
real    0m9.607s
user    0m7.444s
sys     0m0.020s
Binaris disztribucio:
real    0m8.446s
user    0m6.012s
sys     0m0.012s
Optimalizalt forditas:
real    0m4.416s
user    0m3.204s
sys     0m0.012s
O2 + march:
real    0m7.536s
user    0m5.860s
sys     0m0.008s
O3 magaban:
real    0m3.969s
user    0m3.524s
sys     0m0.000s
Altalanos optimalizalas:
real    0m3.793s
user    0m3.556s
sys     0m0.008s

Hozzászólások

hah drupal szuroje kiszedte az #include utani kacsacsoroket ;)
---
Tévedni mindenkinek szabad, csak a mérnöknek észre kell vennie.

return p2(n, k-1) + p2(k, n-k);
helyett
return p2(n, k-1) + p2(n-k, k);

látjátok, ezért használok gentoot :)