Hallo Forum,
ich bin ein learn-by-doing Mensch und habe mir als Lernprogramm eine Art CPU-Benchmarktool überlegt. Folgendes Konzept:
Anzahl der Kerne auslesen, pro kern ein Thread erstellen.
Es wird mit einer Pi-methode dann gerechnet, also genauigkeitswert habe ich Konstant 987.654!
Pro Thread kommt dann noch ein Modifikator vor diese Zahl, abhängig von Kernen. Wird so gerechnet: Modifikator = 24/Anzahl Kerne.
Damit wird theoretisch gleich viel gerechnet, egal bei wie vielen Threads. Doch bevor ich mehrere Thread einrichten kann (verstand ich auch noch nicht ganz), muss es überhaupt mal laufen. (Ohne Threads klappt es natürlich gewollt, nur reizt es eben CPU nicht aus)
Fehlermeldung beim Erstellen eines Threads:
"Cannot make a static reference to the non-static method start() from the type Thread"
Derslebe Fehler kommt, wenn ich eine Funktion aufrufen will, die ein paar Variablen festlegen soll.
Also, folgender Code:
pithread.java
Und die threadsForPi.java:
Danke für Hilfe!
edit: Fehlermeldung treten in der ersten Datei in Zeile 20 und 23 auf. Der Rest ist problemlos.
ich bin ein learn-by-doing Mensch und habe mir als Lernprogramm eine Art CPU-Benchmarktool überlegt. Folgendes Konzept:
Anzahl der Kerne auslesen, pro kern ein Thread erstellen.
Es wird mit einer Pi-methode dann gerechnet, also genauigkeitswert habe ich Konstant 987.654!
Pro Thread kommt dann noch ein Modifikator vor diese Zahl, abhängig von Kernen. Wird so gerechnet: Modifikator = 24/Anzahl Kerne.
Damit wird theoretisch gleich viel gerechnet, egal bei wie vielen Threads. Doch bevor ich mehrere Thread einrichten kann (verstand ich auch noch nicht ganz), muss es überhaupt mal laufen. (Ohne Threads klappt es natürlich gewollt, nur reizt es eben CPU nicht aus)
Fehlermeldung beim Erstellen eines Threads:
"Cannot make a static reference to the non-static method start() from the type Thread"
Derslebe Fehler kommt, wenn ich eine Funktion aufrufen will, die ein paar Variablen festlegen soll.
Also, folgender Code:
pithread.java
Java:
import java.util.Scanner;
public class pithread {
public static void main(String[] args)
{
//CPU Kerne auslesen
int cores = Runtime.getRuntime().availableProcessors();
//Modifikator wird erstellt
int modi = 24/cores;
//Eingabe einleiten
Scanner loopobj = new Scanner(System.in);
System.out.println("Wieviele Loops sollen bearbeitet werden?: ");
int loops = loopobj.nextInt();
//for(int laufend = 0;laufend <= cores; laufend++) {
threadsForPi threadObj = new threadsForPi();
threadsForPi.setModi(modi, loops);
try {
threadsForPi.start();
}
catch (InterruptedException e) {
System.out.println("Thread interrupted");
}
//}
}
}
Und die threadsForPi.java:
Java:
public class threadsForPi extends Thread {
int genauigkeit = 987654; //Anzahl Brueche fuer PI Berechnung
int modi; //Modifikator, abhaengig von CPU Kernen
int loops; //Anzahl der Durchgaenge
@Override
public void run(){
//Zeitmessung Start
long start = System.currentTimeMillis();
//loops durchgehen
for(int counter=1;counter <= loops; counter++) {
//Pi berechnen
gebePi(modi*genauigkeit);
}
//Ausgabe wenn fertig
long duration = System.currentTimeMillis() - start;
System.out.println("Kern " + 24/modi + "ist fertig. Dauer: " + duration + " ms");
}
public void setModi(int modi, int loops) {
this.loops = loops;
this.modi = modi;
}
public static void gebePi(int i) {
//Hier wird Pi mit den paramtern berechnet..
}
Danke für Hilfe!
edit: Fehlermeldung treten in der ersten Datei in Zeile 20 und 23 auf. Der Rest ist problemlos.