Vykon Javy

Ladislav Dobias Lada na Dobias.info
Čtvrtek Leden 22 20:20:31 CET 2004


Ahoj!

On Thu, 22 Jan 2004, Ladislav Dobias wrote:

> Muzete ten cyklus dat do programu a spustit to znovu?

Tak jsem se do toho pustil sam ;-)

Nejsem sice moc programator (spis administrator), ale zkusil
jsem ty programy upravit tak, aby tam byl ten cyklus. Jsou
vlozeny dole v mailu. Pridal jsem tam "Cy", jako, ze je to
s cyklem. Takze to ctete oddelene :-)

Nekde jsem slysel, ze aby se projevila technologie HotSpot
(optimalizace za behu programu), tak se musi dat parametr
"-server", tak jsem to pretestoval i s timto parametrem.
Vysledky jsou uchvatne!

Me vysledky jsou v tabulce (na P4Mobile 1.6GHz, Debian
Linux unstable), serazeny dle rychlosti od nejlepsiho
k nejhorsimu. Spoustel jsem kazdy test 3x a vybral nejlepsi
cas. Log testovani je dole v mailu.

Prekladac/interpret    Cas [s]
=====================  ========
java-1.4.2_03 -server   32,397
java-1.4.2_01 -server   32,938
IBMjava1.4.1            34,976
gcc-3.3.3               36,410
gcc-2.95.4              36,480
java-1.3.1_09           39,422
java-1.4.2_03           76,360
java-1.4.2_01           76,502
java-1.3.1_09 -server  171,273
java-1.2.2_017         431,534

java-* = JDK od Sunu
JRockit 8.1 (BEA java) jsem nerozchodil.

Cili - me zavery jsou presne opacne, nez kolegy Tomana:
Java od Sunu se stale zlepsuje a z testovanych produktu je
na tomto mini-benchmarku nejrychlejsi (o 8 procent lepsi,
nez nejblizsi konkurent). Take je videt, ze od dob 1.2.2 se
na Linuxu zrychlila vice, nez 10x...

Ale jak bylo videt - je potreba mit program v Jave, ktery
bezi alespon 5 sec (napr. na serveru bezi java stale, nez se
upgraduje), aby se vykonnost projevila :-)  A nezapominat
na parametr "-server" pro serverove aplikace, aby se projevila
technologie HotSpot.

Ale na desktop ji zatim nechci, je silene pomala. Treba za
dalsich 10 let vyvoje ji Sun trosku urychli i na desktopu :-)

Pokud byste nekdo me chtel opravit (napr. dat nejake lepsi
parametry pri prekladu nebo pri spousteni), napiste do
konference, at se poucim, jak se zrychluji programy ;-)
(Nejsem programator)

Zdravi
Lada Dobias

===== VypocetPiCy.java ====
public class VypocetPiCy {
   public static void main(String[] args) {
      double currPi=0;
      double i=1;
      int n;
      long begin, end;

      begin = System.currentTimeMillis();

      for (n=0;n<100;n+=1) {
      currPi = 0;
      i = 1;
        do {
           currPi += 4/i - 4/(i+2);
           i+=4;
        } while (Math.abs(Math.PI - currPi) > 1E-7);
      }

      end = System.currentTimeMillis();

      System.out.println("Vypocteno Pi = " + currPi +
                         " v case: " + (end-begin) + " ms.");
   }
}
===== konec VypocetPiCy.java ====

===== VypocetPiCy.c ====
#include <stdio.h>
#include <math.h>
#include <time.h>
#define PI 3.141592653589793

int main(void) {
  double currPi=0, i=1;
  clock_t begin, end;
  int n;

  begin = clock();
  for(n=0;n<100;n+=1) {
    currPi=0, i=1;
    do {
      currPi+=(4/i - 4/(i+2));
      i+=4;
    } while(fabs(PI-currPi) > 1e-7);
  }
  end = clock();

  printf("Vypocteno Pi = %.15f v case: %f ms.\n", currPi,
         (float)(end-begin)/CLOCKS_PER_SEC * 1000);
}
===== konec VypocetPiCy.c ====


Zaznam testovani:

==================================================================
$ cc -O2 -o VypocetPiCy VypocetPiCy.c

$ cc -v
Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.3/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux
Thread model: posix
gcc version 3.3.3 20031206 (prerelease) (Debian)


$ ./VypocetPiCy
Vypocteno Pi = 3.141592553589800 v case: 36410.000000 ms.

==================================================================
$ gcc-2.95 -O2 -o VypocetPiCy VypocetPiCy.c

$ gcc-2.95 -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011002 (Debian prerelease)

$ ./VypocetPiCy
Vypocteno Pi = 3.141592553589793 v case: 36480.000000 ms.

==================================================================
$ java -version
java version "1.4.2_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06)
Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mode)

$ javac -O VypocetPiCy.java
$ java VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 76502 ms.

$ java -server -version
java version "1.4.2_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06)
Java HotSpot(TM) Server VM (build 1.4.2_01-b06, mixed mode)

$ java -server VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 32938 ms.

==================================================================
$ javac -O VypocetPiCy.java

$ java -version
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)

$ java VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 76360 ms.

==================================================================
$ javac -O VypocetPiCy.java

$ java -server -version
java version "1.4.2_03"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
Java HotSpot(TM) Server VM (build 1.4.2_03-b02, mixed mode)

$ java -server VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 32397 ms.


==================================================================
$ /tmp/java/bin/javac -O VypocetPiCy.java

$ /tmp/java/bin/java -version
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1)
Classic VM (build 1.4.1, J2RE 1.4.1 IBM build cxia321411-20030930 (JIT enabled: jitc))

$ /tmp/java/bin/java VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 34976 ms.

==================================================================
$ javac -O VypocetPiCy.java

$ java -version
java version "1.3.1_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_09-b03)
Java HotSpot(TM) Client VM (build 1.3.1_09-b03, mixed mode)

$ java VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 39422 ms.

==================================================================
$ javac -O VypocetPiCy.java

$ java -server -version
java version "1.3.1_09"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_09-b03)
Java HotSpot(TM) Server VM (build 1.3.1_09-b03, mixed mode)

$ java -server VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 171273 ms.

==================================================================
$ javac -O VypocetPiCy.java

$ java -version
java version "1.2.2"
Classic VM (build JDK-1.2.2_017, green threads, nojit)

$ java VypocetPiCy
Vypocteno Pi = 3.141592553589794 v case: 431384 ms.
==================================================================


Další informace o konferenci Konference