rechenzeit

Status
Nicht offen für weitere Antworten.

nameac

Bekanntes Mitglied
hi,

kennt jamand ne funktion mit der ich die anzahl der takte die zum ausführen eines bestimmten algorythmus nötig sind messen kann?

die systemzeit zu messen ist mir nicht exakt genug könnte ja sein das sich andere threads dazwischen mogeln.

will damit rechenzeit von java java und jni und reinem c vergleich.
 

RaoulDuke

Bekanntes Mitglied
Ich glaube nicht das es unter Java richtig Sinn macht benötigte Taktzyklen der CPU zu ermitteln. Je nach Optimierungsgrad mit dem die JVM dein Programm gerade ausführt ändert sich das ja. Soweit ich das mitbekommen hab geht die VM ja bei sehr häufig benutzten Programmbestandteilen hin und wandelt sie im Betrieb in maschinenabhängigen Code um die Ausführungsgeschwindigkeit weiter zu erhöhen.

Vielleicht solltest du einen Profiler benutzen und dein Programm damit analysieren.
 
S

SlaterB

Gast
nicht das was du suchst, aber falls du noch dran gedacht hast:
wenn du eine bestimmte Operation 10.000x ausführst und die gemessene Systemzeit durch 10.000 teilst,
dann ist das weniger fehleranfällig als eine einzelne Messung

allerdings würden da natürlich immer noch Garbage-Collector, Schleifenlogik und was weiß ich noch alles dazwischenfunken,
das wäre dann im laufenden Betrieb aber auch nie anders in Java
 

nameac

Bekanntes Mitglied
@SlaterB gute idee aber jetz taucht ein problem auf das 100 testdurchläufe im mittel schneller sind als 1.
Code:
public static void arraykopieren(int wert, double testläufe) {
		int[] array = new int[wert];
		int[] array1 = new int[wert];
		long time1 = 0;
		long time2 = 0;
		for (int i = 0; i < wert; i++) {
			array[i] = wert;
			array1[i]=2;
		}
		time1 = System.nanoTime();
		for (int k = 0; k < testläufe; k++) {
			for (int i = 0; i < wert; i++) {
				array1[i] = array[i];
			}
		}
		time2 = System.nanoTime();

		double erg = (time2 - time1) / 1000.0/ testläufe;
		System.out.println(erg + " Millisekunden um " + wert
				+ " Elemente zu kopieren");

		time1 = System.nanoTime();
		for (int k = 0; k < testläufe; k++) {
		System.arraycopy(array, 0, array1, 0, wert);
		}
		time2 = System.nanoTime();
		erg = (time2 - time1) / 1000.0/testläufe;
		System.out.println(erg + " Millisekunden um " + wert
				+ " Elemente zu kopieren");
	}
 

RaoulDuke

Bekanntes Mitglied
Lies mein Posting oben nochmal, dann weisst du warum 100 Durchläufe im Mittel schneller sind als ein Einzelner. Von Messfehlern mal abgesehen.
 

hupfdule

Top Contributor
nameac hat gesagt.:
jetz taucht ein problem auf das 100 testdurchläufe im mittel schneller sind als 1.

Wenn dir derartige Verhaltensweisen nicht klar sind, solltest du dir nicht anmaßen einen sinnvollen Vergleich der Performance durchführen zu wollen.
 

nameac

Bekanntes Mitglied
@hupfdule quatsch nich blöde und sag mir lieber in 2 sätzen woran das liegt oder halt deine vorlaute klappe. nee besser sag mir einfach welcher wert sinnvoller ist der durchschnittswert von ca. 1000 durchläufen oder ist der erste eher der entscheidende bei der ausführung einer funktion.
 
S

SlaterB

Gast
Besser vorlaut als unfreundlich, viel Spass noch mit deinem Problem..
 

hupfdule

Top Contributor
nameac hat gesagt.:
wo ist da der unterschied?

Vorlaut:
Wenn dir derartige Verhaltensweisen nicht klar sind, solltest du dir nicht anmaßen einen sinnvollen Vergleich der Performance durchführen zu wollen.

Unfreundlich:
quatsch nich blöde und sag mir lieber in 2 sätzen woran das liegt oder halt deine vorlaute klappe

Desweiteren schließe ich mich SlaterB an:
viel Spass noch mit deinem Problem
 

nameac

Bekanntes Mitglied
wenn du meinst dann empfehl ich dir den zweig zu wechseln wie wärs mit nem germanistik studium oder so freundlich genug? :lol:
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben