Posted By: Quasimodo (Quasimodo) on 'CZprogram'
Title: Re: Graficka knihovna
Date: Tue Oct 12 18:31:31 2004
> Co embedovat Gecko a mit UI v HTML?
>
> Jerry III
>
> Enough said ...
> http://jerryiii.home.sprynet.com/mica/index.htm
Diky za rady zde i pres mail.
Gecko se ukazalo jako nepouzitelne - velikost/rychlost. Delame merici zarizeni
a odezva na udalost musi mit garantovany cas. Nevim proc, ale doba
vykreslovani prvku v gecku nejak hrozne plave.
Trolltech Qt normalni a emb. verze se jenom podobne jmenuji. Z
cross platform vyvoje bysme asi zesediveli (tohle zhruba vypadlo ze cteni
jejich dokumentace a par mailu.)
Java - neumim ji a v casovem horizontu ktery mam neverim, ze se ji stihnu
naucit. Navic se bojim garbage collectoru - nevim predem kdy se mi to na par
milisekund zamysli...
C++ prelozeno pro .NET/.GNU - to je cesta, kterou zrovna ted zkoumam. Stale se
bojim GC a hledam jak bych to tomu zatrhnul.
Mimochodem porovnaval jsem rychlosti C++ nativne prelozeneho na linuxu, .GNU a
javy a jsem silne prekvapen, jak moc uz java slape cecku na paty, co se tyce
vykonu. V jednom testu (alokace pameti) dokonce C++ predbehla!
Uvadim tu zdrojaky - nejsou psane ani na to, aby byly hezky citelne, ani nic
podobneho - ciste jen testy, ale aby se co nejvice podobaly ve vsech trech
jazycich. (Pro testy .NET/.GNU pouzivam C# - jednak abych tomu dal co nejvetsi
sanci a jednak mi nefunguje preklad C++ pod .GNU)
Java src:
public class pokus
{
public static int recursive(int a)
{
if (a < 1)
return 0;
int[] N = new int[a];
for (int i=0; i<a; i++)
N[i] = recursive(i-1);
int sum=0;
for (int i=0; i<a; i++)
sum += N[i];
return sum;
}
public static void main (String args[])
{
recursive(40);
}
}
C++ src:
class pokus
{
public:
static int recursive(int a)
{
if (a < 1)
return 0;
#ifdef FAIR
int *N = new int[a];
#else
int N[a];
#endif
for (int i=0; i<a; i++)
N[i] = recursive(i-1);
int sum=0;
for (int i=0; i<a; i++)
sum += N[i];
#ifdef FAIR
delete[] N;
#endif
return sum;
}
static void Main ()
{
recursive(40);
}
};
int main()
{
pokus::Main();
return 0;
}
C#
public class pokus
{
public static int recursive(int a)
{
if (a < 1)
return 0;
int[] N = new int[a];
for (int i=0; i<a; i++)
N[i] = recursive(i-1);
int sum=0;
for (int i=0; i<a; i++)
sum += N[i];
return sum;
}
public static void Main ()
{
recursive(40);
}
}
Java dosahla (druhy beh, aby se co nejvice eliminovalo nacitani javy) tento
vysledek:
athlon:~/zks/cs # time java pokus
real 0m11.397s
user 0m11.060s
sys 0m0.210s
Pokud je zapnuto #define FAIR, tak vysledky C++ jsou HORSI
athlon:~/zks/cs # time ./pokus
real 0m22.305s
user 0m22.060s
sys 0m0.000s
Pokud je FAIR vypnuto, tak uz je to veselejsi:
athlon:~/zks/cs # time ./pokus
real 0m4.615s
user 0m4.540s
sys 0m0.000s
.GNU ma casy pro alokaci pameti vyrazne horsi.
athlon:~/zks/cs # time ilrun ./pokus.exe
real 1m56.831s
user 1m55.270s
sys 0m0.040s
Takze v tomto testu .GNU totalne propadlo.
Pokousel jsem se zjistit proc a vypada to, ze pri kazde alokaci pameti to z
nejakeho zahadneho duvodu vzdycky znova vola getuid(), coz pochopitelne
zdrzuje... Jakmile zjistim nejaky kontaktni mail na vyvojare, pokusim se je
presvedcit, aby to vyhodili.
Druhy test ktery jsem poustel bylo eratosthenovo sito do max 2e7
Zdrojak uz dam jen jeden, reprezentativni, treba javu:
public class erat
{
public static void main (String args[])
{
int N=20000000;
boolean[] nprim = new boolean[N];
for (int i=0; i<N; i++)
nprim[i] = false;
for(int i=2; i<N; i++)
for(int j=2; j<i; j++)
{
int mul = i*j;
if (mul >= N)
break;
nprim[mul] = true;
}
}
}
C++
athlon:~/zks/cs # time ./erat
real 0m16.404s
user 0m16.200s
sys 0m0.030s
Java
athlon:~/zks/cs # time java erat
real 0m17.003s
user 0m16.760s
sys 0m0.030s
C#
athlon:~/zks/cs # time ilrun ./erat.exe
real 0m18.922s
user 0m18.780s
sys 0m0.020s
Tady je podle ocekavani nejrychlejsi C++, ale zbyle dve moznosti mu dychaji
na zada mnohem vice, nez bych cekal...
Takze to jsou moje prozatimni vysledky, snad to nekoho i zaujme. Ja byl
rozhodne prekvapen, protoze kdyz jsem v dobach davnych premyslel nad javou,
zda ma smysl se ji ucit, tak pri mych testech (bublinky, eratosthenes,
fibonacci nebo jak se to pise) byla vzdycky 4-10x pomalejsi nez C++. Zda se,
ze panove od sunu se vubec neflakaji :-)
-
Clovek je nejpomalejsi zname zarizeni typu I/O.
Quasimodo