inline
-
public class ArrayTest { public static void main(String[] args) { int size = Integer.parseInt(args[0]); int num = Integer.parseInt(args[1]); int num2 = Integer.parseInt(args[2]); long start = System.currentTimeMillis(); int[] array = new int[size]; int a = 0; for (int j = 0; j < num; ++j) { for (int i = 0; i < num2; ++i) { array[i % size] += array[(j*i)%size] + i; } } for (int i = 0; i < size; ++i) { a += array[i]; } long time = System.currentTimeMillis() - start; System.out.println(size+ " " + num + " " +num2 + " erg: "+ a + " time: " + time); } }
100000 500 300000 erg: -1896966358 time: 21938
vs.
int main(int argc, char **argv){ int size = atoi(argv[1]); int num = atoi(argv[2]); int num2 = atoi(argv[3]); struct __timeb64 start; struct __timeb64 end; _ftime64( &start ); int* array = new int[size]; memset(array,0,size); int a = 0; for (int j = 0; j < num; ++j) { for (int i = 0; i < num2; ++i) { array[i % size] += array[(j*i)%size] + i; } } for (int i = 0; i < size; ++i) { a += array[i]; } _ftime64( &end ); long time = (end.time - start.time) * 1000 + (end.millitm - start.millitm); printf("%d %d %d erg: %d time: %d",size,num,num2,a, time); getch(); return 0; }
100000 500 300000 erg: -1896966358 time: 18375
java -server funktioniert bei mir nicht.
-
6458345 schrieb:
java -server funktioniert bei mir nicht.
Schade. Das kann nämlich einen enormen Unterschied machen. Man schaue sich zum Beispiel den Unterschied zwischen Client-VM und Server-VM da an:
http://weblogs.java.net/blog/opinali/archive/2005/11/mustangs_hotspo_1.html
...und welche Javaversion und welchen C++ Compiler nutzt Du eigentlich?
Naja, ist ja auch egal. Ich will das nicht unbedingt vertiefen. Letztendlich ist das hier alles ein bischen OT.
-
Und wenn man in C Pointer verwendet:
int main(int argc, char **argv){ int size = atoi(argv[1]); int num = atoi(argv[2]); int num2 = atoi(argv[3]); struct __timeb64 start; struct __timeb64 end; _ftime64( &start ); int* array = new int[size]; memset(array,0,size); int *ptr = &array[0]; int a = 0; int pos = 0; for (int j = 0; j < num; ++j) { for (int i = 0; i < num2; ++i) { (*ptr) += i; if(pos == size) { pos = 0; ptr = &array[0]; } } } for (int i = 0; i < size; ++i) { a += array[i]; } _ftime64( &end ); long time = (end.time - start.time) * 1000 + (end.millitm - start.millitm); printf("%d %d %d erg: %d time: %d",size,num,num2,a, time); getch(); return 0; }
100000 500 1000000 erg: -1706365568 time: 2406
public class ArrayTest { public static void main(String[] args) { int size = Integer.parseInt(args[0]); int num = Integer.parseInt(args[1]); int num2 = Integer.parseInt(args[2]); long start = System.currentTimeMillis(); int[] array = new int[size]; int a = 0; int pos = 0; for (int j = 0; j < num; ++j) { for (int i = 0; i < num2; ++i) { array[pos++] += i; if(pos == size) { pos = 0; } } } for (int i = 0; i < size; ++i) { a += array[i]; } long time = System.currentTimeMillis() - start; System.out.println(size+ " " + num + " " +num2 + " erg: "+ a + " time: " + time); } } 100000 500 1000000 erg: -1706365568 time: 5516
-
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)Visual studio .NET 2003
-
ach ja. Ich hatte das ja auch nicht erwähnt:
gregor@linux:~> /usr/java/jdk1.6.0/bin/java -server -version java version "1.6.0-beta2" Java(TM) SE Runtime Environment (build 1.6.0-beta2-b78) Java HotSpot(TM) Server VM (build 1.6.0-beta2-b78, mixed mode) gregor@linux:~> g++ --version g++ (GCC) 3.3.5 20050117 (prerelease) (SUSE Linux) Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Der C++ Compiler ist bei mir also zugegebenermaßen nicht mehr so ganz neu. Ich weiß nicht, ob sich da inzwischen viel bezüglich der Performance getan hat. Aber Du hast ja auch nicht unbedingt die optimale VM für Java verwendet.
-
Verwende Prepared Statements (info bei SUN oder Javadoc),
ist unendlich viel schneller....