tag:blogger.com,1999:blog-24419026.post6211078574000200698..comments2024-03-22T17:03:22.754+01:00Comments on przemelek: C# i Java okazały się szybsza od Pythona :-) [było Java okazała się szybsza od C# i Pythona]przemelekhttp://www.blogger.com/profile/14956032882265621104noreply@blogger.comBlogger38125tag:blogger.com,1999:blog-24419026.post-65237696888740514072012-11-13T16:15:32.711+01:002012-11-13T16:15:32.711+01:00c# (.net 4.0) RunTime 00:00:01.32
java (1.6) Ru...c# (.net 4.0) RunTime 00:00:01.32<br />java (1.6) RunTime: 3.526 s<br /><br /><br />using System;<br />using System.Collections.Generic;<br />using System.Text;<br />using System.Diagnostics;<br />namespace speedtest<br />{<br /> class Program<br /> {<br /> const int N = 10000;<br /> const int M = 1000;<br /> static double calc()<br /> {<br /> double sum = 0;<br /> for (int i = 0; i < N; i++)<br /> {<br /> double x = 20.0f * i / N - 10.0f;<br /> sum += Math.Pow(Math.E, -x * x) * (20.0 / N);<br /> }<br /> return sum;<br /> }<br /> static void Main(string[] args)<br /> {<br /> Stopwatch watch = new Stopwatch();<br /> watch.Start();<br /> double s = 0;<br /> for (int i = 0; i < M; i++)<br /> {<br /> s+=calc();<br /> }<br /> watch.Stop();<br /> TimeSpan ts = watch.Elapsed;<br /><br /> // Format and display the TimeSpan value. <br /> string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds,<br /> ts.Milliseconds / 10);<br /> Console.WriteLine("RunTime " + elapsedTime);<br /> Console.ReadKey();<br /> }<br /> }<br />}<br /><br />import com.google.common.base.Stopwatch;<br /><br /><br />public class Speed {<br /> private static final int N=10000;<br /> private static final int M=1000;<br /> static double calc() {<br /> double sum = 0;<br /> for (int i=0; i<N; i++) {<br /> double x = 20.0*i/N-10.0;<br /> sum+=Math.pow(Math.E, -x*x)*(20.0/N);<br /> }<br /> return sum;<br /> }<br /> //public static void main(String[] args)<br /> public static void main(String[] args) {<br /> //long start = System.currentTimeMillis();<br /> Stopwatch stopwatch = new Stopwatch().start();<br /> double s=0;<br /> for (int i=0; i<M; i++) {<br /> s+=calc();<br /> }<br /> stopwatch.stop(); // optional<br /><br /> long millis = stopwatch.elapsedMillis();<br /><br /> <br /> System.out.println("RunTime: " + stopwatch); <br /> }<br /> <br />}<br /><br />Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-76861768169543991002011-10-18T23:23:16.878+02:002011-10-18T23:23:16.878+02:00Laptop Firmowy Dell Latitude D830
Ubuntu 10.04, ją...Laptop Firmowy Dell Latitude D830<br />Ubuntu 10.04, jądro 2.6.32-34<br />CPU 0 - 2.20 GHz (Intel Core 2 Duo)<br />CPU 1 - 2.20 GHz (Intel Core 2 Duo)<br /><br />Java (1.6.0_26) : 3.246 s<br />Mono (v.2.4.4) : 18.903 s<br />Python (2.6.5) : 10.072 s<br />c : 1.635 sAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-44125567035624854002010-12-12T21:48:23.717+01:002010-12-12T21:48:23.717+01:00Poprawiona wersja w Fortranie 90 :)
program speed...Poprawiona wersja w Fortranie 90 :)<br /><br />program speed <br /> !Skompilowac mozna np. tak:<br /> !gfortran -O3 -fomit-frame-pointer speed.f90 -o speed-fortran.exe<br /> !~3.02 ms i ~2.75 ms dla wersji alternatywnej<br /> real(kind=8), parameter :: e = 2.71828182845904524<br /> real(kind=8) :: x <br /> integer(kind=2), parameter :: n = 10000<br /> integer(kind=4) :: i, j<br /> real(kind=8) :: wynik, t_pocz, t_koniec, pokaz<br /> call cpu_time(t_pocz)<br /> do j= 1,1000<br /> sum=0.<br /> do i = 0,10000<br /> x = 20.*i/n-10.<br /> !wynik=exp(-x*x)*(20./n) wersja alternatywna<br /> wynik=e**(-x*x)*(20./n)<br /> sum = sum + wynik<br /> end do<br /> end do<br /> call cpu_time(t_koniec)<br /> pokaz = sum<br /> print '(A,1f22.17)','Wynik calkowania :', pokaz<br /> print '(A,1f14.9)','Czas trwania [ms]:',t_koniec-t_pocz<br /> !call sleep jest potrzebne tylko na MS systemach<br /> call sleep(12)<br /> endCrunchyhttp://statystycy.pl/noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-76974690789248556962010-12-12T00:40:22.899+01:002010-12-12T00:40:22.899+01:00Nie mogłem się oprzeć ;)
program speed
real(kind=...Nie mogłem się oprzeć ;)<br /><br />program speed<br />real(kind=8), parameter :: e = 2.718281828459045<br /> real(kind=8) :: x<br /> integer(kind=2), parameter :: n = 10000<br /> integer(kind=2) :: i, j<br /> real(kind=8) :: wynik, t_pocz, t_koniec, pokaz<br /> call cpu_time(t_pocz)<br /> do j= 1,1000<br /> sum=0.<br /> do i = 0,10000<br /> x = 20.*i/n-10.<br /> wynik=e**(-x*x)*(20./n)<br /> sum = sum + wynik<br /> end do<br /> end do<br /> call cpu_time(t_koniec)<br /> pokaz = sum<br /> print *,'Wynik calkowania :', pokaz<br /> print *,'Czas trwania [ms]:',t_koniec-t_pocz/1000<br /> call sleep(15)<br /> endCrunchyhttp://statystycy.pl/noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-41273662262751531142010-03-10T00:51:42.816+01:002010-03-10T00:51:42.816+01:00To jeszcze moje wyniki dla przeglądarek:
- Epiphan...To jeszcze moje wyniki dla przeglądarek:<br />- Epiphany (Webkit) - 2.342<br />- Chrome - 2.884<br />- Firefox 3.6 - 6.487<br />- Opera 10.10 - 11.811<br /><br />Operka pewnie lepiej by wypadła w najnowszej wersji 10.50, ale niestety nie mam jak tego przetestować ze względu na system (Ubuntu). Firefox też powinien mieć lepszy wynik pod Windowsemdeallashttps://www.blogger.com/profile/11292138265938407068noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-44935534984351854942010-03-10T00:31:15.016+01:002010-03-10T00:31:15.016+01:00kurde :F wklejałem źródła PHP ale je wywalił jakiś...kurde :F wklejałem źródła PHP ale je wywalił jakiś hmmmm zabezpieczacz przed wstrzyknięciem kodu ;) pewnie przez to, że znaczniki php dostałem :F<br /><br />Tutaj źródła PHP<br /><br />function getTime() {<br /> list($usec, $sec) = explode(' ', microtime());<br /> return ((float)$usec + (float)$sec);<br /> }<br /><br /> $N = 10000;<br /> $M = 1000;<br /><br /> function calc() {<br /> global $N, $M;<br /> $sum = 0;<br /> for ($i = 0; $i < $N; $i++) {<br /> $x = 20.0 * $i / $N - 10.0;<br /> $sum += exp(-1*$x * $x) * (20.0 / $N);<br /> }<br /> return $sum;<br /> }<br /><br /> $start = getTime();<br /> $s = 0;<br /> for ($i = 0; $i < $M; $i++) {<br /> $s += calc();<br /> }<br /> $time = getTime();<br /> echo round($time - $start,6);<br /><br />co do C# jedyną zmianą jaką wprowadziłem w Twoje źródła opisałem wyżej - przeliczenie z użyciem funkcji od ticków. <br /><br />Co do Javy z przełącznikiem server u mnie wydajność skoczyła mniej więcej o dwa razy - 2324<br /><br />Moje wątpliwości zrodziły się z tego, że byłem przekonany, że mam już świeże źródła (te po poprawkach)<br /><br />lol :F<br /><br />JavaScript:<br /><br />1355 - FF 3.5.8 - szybciej niż Java oO<br /><br />Z ciekawości jeszcze Java ME zrobie :F (ciągnę moduły do Beans'ów)jmailhttp://jmail.plnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-58506191236988463862010-03-09T23:42:14.894+01:002010-03-09T23:42:14.894+01:00Super, dzięki za kod w PHP :-)
Ciekawe wyniki, cho...Super, dzięki za kod w PHP :-)<br />Ciekawe wyniki, choć może trochę trudne do odczytania, wypadałoby chyba zwiększyć ilość powtórzeń żeby wyniki były bardziej widoczne.<br />Dziwne, że Mono wypadło tak słabo, ciekawe w ogóle jak Mono wypada w porównaniu do .NET na Windows.<br /><br />Słyszałem o projekcie HipHop, choć nie przepadam za PHP to bardzo podoba mi się podejście Facebooka, zamiast przepisywać na "lepsze" technologie postanowili uderzyć w słabość technologii której używali dzięki czemu uzyskali chyba lepsze wyniki i to taniej niż gdyby przenieśli wszystko na jakaś "poważną" platformę.<br />"" z racji tego, że takie terminy jak "lepsza technologia" i "poważna" są dość umowne ;-)przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-66790853191433387582010-03-09T23:33:03.607+01:002010-03-09T23:33:03.607+01:00Kod PHP:
$N = 10000;
$M = 1000;
$E = 2.718281828...Kod PHP:<br /><br />$N = 10000;<br /><br />$M = 1000;<br />$E = 2.71828182845904523536;<br /><br />function calc() {<br /> global $N;<br /> global $E;<br /><br /> $sum = 0;<br /> for ($i=0; $i<$N; $i++) {<br /> $x = 20.0*$i/$N-10.0;<br /> $sum+=pow($E, -$x*$x)*(20.0/$N);<br /> }<br /> return $sum;<br />}<br /><br />$time = microtime(true);<br />$s = 0;<br />for ($i=0; $i<$M; $i++) {<br /><br /> $s+=calc();<br /><br />}<br />$time2 = microtime(true)-$time;<br />$time = $time2/$M;<br />printf("%.3f\r\n", $time);<br /><br />Wyniki:<br />PHP: 0.034s<br />Mono: 0.017s<br />Python: 0.010s<br />Java: 0.003s<br />PHP+HipHop: 0.003s<br /><br />Z czego ostatni wynik nie świadczy o szybkości PHP tylko C++. HipHop for PHP działa na takiej zasadzie że przetłumacza kod PHP na C++, a następnie go kompiluje. Link do projektu: http://developers.facebook.com/hiphop-php/<br /><br />P.S Sorry za podwójnego postadeallashttps://www.blogger.com/profile/11292138265938407068noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-72320751140748192692010-03-09T23:28:09.313+01:002010-03-09T23:28:09.313+01:00Ten komentarz został usunięty przez autora.deallashttps://www.blogger.com/profile/11292138265938407068noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-56265667374034219052010-03-08T02:46:51.996+01:002010-03-08T02:46:51.996+01:00@jmail: jeszcze jedno, jak możesz podziel się źród...@jmail: jeszcze jedno, jak możesz podziel się źródłem w PHP i swoimi wersjami dla C# i Java'y. Bo ewidentnie widzę, ze trzeba będzie jeszcze raz to opisać [bo nie wszyscy czytają update].przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-81338845802082036252010-03-08T01:36:04.873+01:002010-03-08T01:36:04.873+01:00@jmail:
1) jest opisane, że w pierwszej wersji bł...@jmail: <br />1) jest opisane, że w pierwszej wersji błędnie założyłem, że funkcja .NETowa zwraca nanosekundy, dlatego wyniki dla .NET zostały poprawione [czyli czas został zmniejszony o 10, co zresztą pokazały testy już z poprawionym obliczaniem]. Dodatkowo to czy mierzy się nanosekundy, milisekundy czy nawet godziny nie ma znaczenia w momencie gdy zapewni się odpowiedni interwał na pomiar. W przypadku milisekund i nanosekund gdy na cały test potrzeba 2 sekund, a w tym trakcie wykonuje się 10 mln operacji [gdy jako operację traktujemy pojedynczą iterację pętli] to zmiana jednostki pomiarowej wprowadza w najgorszym przypadku [czyli takim gdy coś trwało nie 2000 milisekund, a 1999.001 milisekundy [a zostało policzone jako 2000] różnicę wyniku na poziomie 0.5 promila, to było wałkowane wyżej w komentarzach gdy była mowa o JavaScripcie. To potwierdzają też testy przeprowadzone z użyciem System.nanoTime(). Z tego co pamiętam kod testów nie był zmieniany żeby była dokumentacja wcześniejszego błędu o którym przeczytać możesz u góry postu.<br />2) masz info o błędzie, fakt jest to dziwne bo błędne<br />3) była, o czym masz w updacie o której mowa w wyższych punktach.<br />4) zrób test dla Java'y z przełącznikiem -server, wtedy dostaniesz takie wyniki jak moje. O czym też masz w opisie.<br /><br />Szczerze to nadal dziwią mnie wyniki Java'y zważywszy, że nie może ona używać do obliczeń kooprocesora [w pełni], a C# może. W przypadku .NET/C# jest też przyrost prędkości w .NET 4.0. W Java'ie prędkość spada po przejściu z 1.5 na 1.6 ;-)<br /><br />Ciekawy wynik dla PHP.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-23337856581786040722010-03-07T23:50:05.500+01:002010-03-07T23:50:05.500+01:00z ciekawości zrobiłem to samo w PHP
Wynik u mn...z ciekawości zrobiłem to samo w PHP<br /><br /><br /><br /><br />Wynik u mnie: 7.093357jmailhttp://jmail.plnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-51214153450424329252010-03-07T23:02:06.654+01:002010-03-07T23:02:06.654+01:00Ta. Teraz zauważyłem (to ten sam Anonimowy co wczo...Ta. Teraz zauważyłem (to ten sam Anonimowy co wczoraj) niestety ale bezedurny sposób zliczenia. <br /><br />1. System.currentTimeMillis() - zwraca w milisekundach, więc ta sama jednostka powinna być użyta przy .NET ....<br />2. Obliczenie milisekund w .NET milisekund tak <br />Console.WriteLine(time / 1000 / M); <br />jest conajmniej dziwne....<br />3. Do obliczenia powinna być użyta ta konstrukcja<br />Console.WriteLine(time / TimeSpan.TicksPerMillisecond / M);<br />co da nam rzeczywiste wyniki.<br /><br />Z moich testów po poprawieniu wynika, że .NET jest 4 razy szybszy niż Java...<br /><br />Porównanie wychodzi <br /><br />1125 dla .NET i 4641 dla Javy. Pythona nie instalowałem bo nie mam takie potrzeby. Dla ciekawości wrzucę aplikację w nocy na jakiś mocny serwer i zobaczymy ile tam będzie działać.jmailhttp://www.jmail.plnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-6656729191738006782010-03-06T23:40:43.297+01:002010-03-06T23:40:43.297+01:00A gdy testuje JVM mam włączonego .NETa. Testowałem...A gdy testuje JVM mam włączonego .NETa. Testowałem to też poza środowiskami i wyniki są porównywalne. Jeśli twierdzisz inaczej, to proszę o dowody, chętnie je przejrzę. <br />Btw. jak na screenach widać, że JVM zżera więcej zasobów niż .NET? Chodzi o to, że więcej okien jest otwarte?<br />Porównywalne wyniki były gdy odpalałem JVM i .NETa jako "jedyne" procesy [poza systemowymi i explorerem].przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-88576858612394408292010-03-06T23:35:01.442+01:002010-03-06T23:35:01.442+01:00Ja dodam od siebie (mimo, ze to dawno było), ze me...Ja dodam od siebie (mimo, ze to dawno było), ze metoda testowa jest conajmniej zła. Żeby zbadać prawidłowo czas wykonania aplikacji (nie używaj w C# trybu deubga - skompiluj i uruchom z linii poleceń będzie działał szybciej) to jeszcze wypadałoby zadbać o to, żeby takie same i taka sama ilość procesów była uruchomiona. C# testujesz kiedy masz włączone JVM a JVM zżera więcej zasobów niż .NET framework (widać na screenach). Taka różnica przy tak niewielkich różnicach czasowych może naprawdę kolosalną róznicę zrobićAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-53605125766127022922010-01-15T18:11:51.535+01:002010-01-15T18:11:51.535+01:00@KomarWodny: Możesz zapodać źródła z tego drugiego...@KomarWodny: Możesz zapodać źródła z tego drugiego testu, bo literki ciut małe i nie umiem doczytać.<br /><br />A wyniki pierwszego testu już rozumiem. Walnąłem babola w kodzie dla C# i nikt go nie zauważył [chociaż rozumiem dlaczego, bo nie widać go w treści postu a nikt niestety nie pociągnął całych źródeł], w C# używałem DateTime.Now.Ticks zakładając, że zwraca ono nanosekundy, a zwraca 1/10 nanosekudny, czyli z grubsza można by próbować dzielić wyniki wyżej przez 10 by uzyskać prawidłowe wartości, wtedy wg. powyższych wyników Java byłaby 3 razy wolniejsza. <br />Chociaż w rzeczywistości jest podobnie wydajna, tutaj wyniki dla Java'y<br />http://myscreen.przemelek.pl/img?id=agpzY3JlZW4ybmV0chELEgpTY3JlZW5TaG90GM5lDA<br />A tu dla C#:<br />http://myscreen.przemelek.pl/img?id=agpzY3JlZW4ybmV0chELEgpTY3JlZW5TaG90GLZtDA<br />już po usunięciu błędu.<br /><br />Będę musiał zmienić treść posta żeby odpowiadał rzeczywistości. Dzięki za sprawdzenie.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-21566595790847025862010-01-15T16:13:04.826+01:002010-01-15T16:13:04.826+01:00Hmmm... bardzo ciekawe
Moje wyniki .Net 4.0 vs Jav...Hmmm... bardzo ciekawe<br />Moje wyniki .Net 4.0 vs Java 1.6.0_07 na Core-i7:<br />http://img515.imageshack.us/img515/9586/bnc3.png<br /><br />Jak widac, DIAMETRALNIE rozne.<br />Inny prosty test:<br />http://img42.imageshack.us/img42/6766/bnccs.jpg<br />http://img683.imageshack.us/img683/5762/bncjv.jpg<br /><br />Tutaj Java 17(sic!) razy wolniejsza od c#4.0<br />Skad te wyniki? Przyznaje, ze srednio znam sie na Javie, wiec moze robie cos nie tak?KomarWodnynoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-8759981010114300842009-12-07T22:47:08.197+01:002009-12-07T22:47:08.197+01:00Coś jest na rzeczy :-)
Z psyco i kompilacją JIT 5....Coś jest na rzeczy :-)<br />Z psyco i kompilacją JIT 5.83 ms, bez 13.68 ms na moim Core 2 Duo 2.2 GHz [czy jakoś tak]. Jest poprawa :-)<br />Dla porównania Java 64 bit potrzebuje 4.43 ms na 1 iterację.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-4109369094506055682009-12-07T16:51:06.370+01:002009-12-07T16:51:06.370+01:00Hej,
Można by się pokusić o odpalenie testu dla Py...Hej,<br />Można by się pokusić o odpalenie testu dla Pythona z JITem, dla wyrówniania szans - CPython domyślnie nie używa JITa. Wystarczy zainstalować psyco umieścić na początku skryptu:<br />import psyco<br />psyco.full()Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-82186951591469154562009-10-29T11:26:32.978+01:002009-10-29T11:26:32.978+01:00@blog Uruchamianie JVM jest tricy ;-) może zająć d...@blog Uruchamianie JVM jest tricy ;-) może zająć do 4 sekund, szczególnie gdy uruchamia się po raz pierwszy, a w innym momencie może pójść jak burza. Przed chwilą zrobiłem testy i teraz przy pierwszym uruchomieniu potrzebowała 400-500 ms, a w kolejnych już tylko 120-160 ms.<br /><br />Chodzi też o to, że niedokładność pomiaru wynikła z "szumów" jest zazwyczaj podobna dla wszystkich pomiarów, czyli błąd względny jest prawie zawsze taki sam [i dla Windows wynosi około 3.5%], fakt że jak coś się wykonuje 10 ms to ten błąd może wynieść 0.35 ms, a jak coś się wykonuje 100 ms to wyniesie 3.5 ms, ale porównanie rzędów wielkości jest nadal uzasadnione, bo 10 ms +/i 0.35 ms jest 10 razy mniejsze niż 100 ms +/- 3.5 ms.<br />Doliczanie czasu potrzebnego na uruchomienie faworyzuje C i w przypadku Windows prawdopodobnie również .NET, a "krzywdzi" Java'ę i Pythona.<br /><br />A jako fizyk z wykształcenia nie mogę sobie pozwolić na nieścisłości w "procedurze" badawczej ;-)<br />Każdy program jest uruchamiany 3 razy [czasem więcej] i jako wynik podawana jest średnia z tych uruchomień, wszystkie wyniki które odstają zbytnio od normy są odrzucane, odstawanie od normy znaczy co najmniej 30-40% odchyłkę, bo widać wyraźnie, że w tym czasie komputer miał ciekawsze rzeczy do robienia.<br />Jest tu milczące założenie, że komputer w trakcie wszystkich uruchomień jest podobnie obciążony, co można uznać za uzasadnione przypuszczenie z racji tego, że w momencie testów robię testy dla jednego języka, później dla drugiego, trzeciego i tak dalej, a następnie odpalam znów dla wszystkich języków i sprawdzam ich wyniki [praktycznie zawsze są porównywalne z tymi wcześniejszymi].<br /><br />OK, tu testy w których wszystko wykonywało się 30 sekund :-) [wyniki są uśrednione z 3 pomiarów]<br />Java - 10.25 ms<br />C# - 34.14 ms<br />Python - 29.19 ms<br />C - 4.25 ms<br />Żeby nie liczyć zbytnio czasów potrzebnych na odwołanie się do systemu w celu ustalenia czasu, działa to tak, że jest 100 iteracji, pobranie czas i sprawdzenie czy już kończyć, później czas jest dzielony przez liczbę wykonań funkcji calc().przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-68674105458447341472009-10-29T10:24:27.047+01:002009-10-29T10:24:27.047+01:00@GMK,
co do porównania z Fx3.5 to spróbuję później...@GMK,<br />co do porównania z Fx3.5 to spróbuję później jeszcze coś wykombinować. Zazwyczaj v8 jest szybsze, ale w tym przypadku może być inaczej - wszystkie te nowe maszyny wirtualne są dość trudne do przewidzenia, co chwilę dodają kolejne optymalizacje kodu.<br /><br />Jeśli chodzi o naszą dyskusję na temat polecenia time, to wychodzą tu różnice pomiędzy używanymi przez nas systemami:<br /><br />U mnie start JVM to 0,2 - 0,4s<br />natomiast różnice wynikające z "szumów tła" to 1,2s <br /><br />Tu masz przykład Twojego programu dla N=0<br /><br />$ time java -server Speed<br />0<br />java -server Speed 0,19s user 0,04s system 67% cpu 0,339 total<br /><br />Zgaduję że większość czasu pożerają operacje dyskowe.<br /><br />Przyszła mi do głowy jeszcze jedna rzecz... Zgaduję że robiąc kilka testów odrzucasz te z "nieprawidłowymi" wynikami? Jeśli tak to faworyzujesz programy z krótkim czasem wykonywania.<br />Wyobraź sobie co będzie jeśli np Twój zegarek co 30s rysuje wskazówki zabierając 100% czasu procesora na 1s. Na monitorze systemowym niewiele będzie widać, bo ten uśrednia wyniki - będziesz tylko widział 3% obciążenie systemu.<br />Krótki program będzie miał szczęście, ale jeśli coś działa minutę, albo dwie?Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-9058432511162300352009-10-28T14:51:07.117+01:002009-10-28T14:51:07.117+01:00@blog U mnie okazuje się, że V8 jest wolniejszy od...@blog U mnie okazuje się, że V8 jest wolniejszy od FF3.5.2 :-) ale możliwe, że to nie wina samego silnika, ale tego, że jest osadzony w przeglądarce, i czas zabierać może przeglądarka.<br /><br />Z tego co widzę na WinXP przy użyciu timeit [z Windows Resource Kit, który podobno jest odpowiednikiem time] to procesy "testowe" używają procesora w 96.5%, a uruchomienie JVM potrafi zająć nawet 4 sekundy ;-) czyli żeby porównywać czas ładowania JVM i przełączania wątków to programy dla JVM powinny działać ponad 114 sekund. Tak btw. w ciągu przeciętnie tych 11 sekund moja Winda przerzuca kontekst ponad 100 razy ;-) czyli ponad 10 tysięcy razy na sekundę.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-33375090641273536572009-10-28T12:00:49.423+01:002009-10-28T12:00:49.423+01:00@RMK
Nie do końca. Czas startu JVM przy 1000 itera...@RMK<br />Nie do końca. Czas startu JVM przy 1000 iteracjach jest mniejszy od błędów pomiaru wynikających z tego że mierzysz czas rzeczywisty zamiast czasu procesora.<br /><br />Zobacz zresztą jeszcze raz wyniki:<br /><br />$ time java -server Speed<br />12<br />java -server Speed 11,82s user 0,09s system 95% cpu 12,487 total<br /><br />Pierwszą liczbę wydrukował Twój program, resztę wypisał "time".<br /><br />Te liczby są baaaardzo podobne, z tym że proces wykorzystał "tylko" 95% czasu procesora - więc pomiar czasu rzeczywistego jest obarczony 5% błędem.<br /><br />Taka ciekawostka,<br />pobawiłem się Waszym przykładem w JavaScript i tu wyniki są jeszcze ciekawsze. Widać jak długą drogę przebył ten język od swych narodzin :)<br /><br />Spidermonkey (silnik ze starego firefox'a)<br />$ time js speed.js<br />178.142<br />js speed.js 174,36s user 0,87s system 98% cpu 2:58,80 total<br /><br />Rhino (implementacja java)<br />$ time rhino speed.js<br />55.721<br />rhino speed.js 53,82s user 0,50s system 95% cpu 56,905 total<br /><br />Google V8 (wersja z przed pół roku)<br />time ~/app/js-v8 speed.js<br />16.732<br />~/app/js-v8 speed.js 16,47s user 0,10s system 97% cpu 16,971 total<br /><br />Niestety nie mam najnowszego silnika, który siedzi w Fx3.5 a który ma własny JIT - jego wyniki powinny znajdować się gdzieś pomiędzy Rhino a V8.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-24419026.post-17733874624258706452009-10-28T10:42:21.027+01:002009-10-28T10:42:21.027+01:00@blog po to odpalałem te programy testowe po kilka...@blog po to odpalałem te programy testowe po kilka razy. Przełączenie między wątkami i procesami kosztuje, ale mniej niż np. uruchomienie JVM.przemelekhttps://www.blogger.com/profile/14956032882265621104noreply@blogger.comtag:blogger.com,1999:blog-24419026.post-85895427544748863702009-10-28T10:36:57.906+01:002009-10-28T10:36:57.906+01:00Są niestabilne, bo zapewne przeglądarka ciągnie te...Są niestabilne, bo zapewne przeglądarka ciągnie też inne duperele np. pluginy, które korzystają z JS. Samo przetwarzanie JS jest jednowątkowe więc każda duperela otwarta w tle będzie zaburzać pracę.Koziołekhttps://www.blogger.com/profile/17083309584011564718noreply@blogger.com