# Erhöhung der Programmgeschwindigkeit während der Programmlaufzeit



## disconnectus (16. Jun 2016)

Hallo Zusammen,


Mein Programm hat maximale Ausführungszeitziele. Sie müssen gehalten werden, deswegen möchte ich beim Laufzeit die Ausführungszeit meines Programms messen. Falls es nicht schnell genug ist, möchte ich die Ausführungsgeschwindigkeit irgendwie erhöhen.

Ich kann die Ausführungszeit ohne Probleme messen. Das ist nicht schwer. Ich weiß aber nicht wie ich die Geschwindigkeit meines Programms während der Laufzeit erhöhen kann.

Könnten sie mir ein paar Ideen geben wie ich das machen kann?


Danke im Voraus


----------



## VfL_Freak (16. Jun 2016)

Moin,


disconnectus hat gesagt.:


> die Geschwindigkeit meines Programms während der Laufzeit erhöhen


Wie meinst Du das denn???

Es läuft immer mit der Geschwindigkeit, die quasi durch Deinen Code vorgegeben ist.
Das ließe sich allenfalls zur Compilezeit optimieren !!

Bremst Du es etwa selbst aus?
Oder redest Du von bspw. HW-Bremsen, die die CPU belasten/blockieren, Internet-Verbindungen etc. ??

Gruß Klaus


----------



## disconnectus (17. Jun 2016)

Ja. HW-Bremsen, die die CPU belasten/blockieren, sind ein gutes Beispiel. Was kann ich gegen diese Blockierungen machen?

Wie kann ich vom meinem Java-Code aus diese blockierende prozesse verhindern. Wenn mein Java-Programm in gegebene Zeit gegebene stellen im Code nicht erreichen kann, soll es z. B. die andere prozesse irgendwie blockieren. Kann man das machen?

Gibt es keine Andere lösungen? Kann mein Java-Programm nicht irgendwie die Prozessorgeschwindigkeit erhöhen?

Was meinst du mit "im Code quasi Geschwindigkeit vorgeben."?


----------



## Thallius (17. Jun 2016)

Ich würde mal sagen du solltest einfach besseren Code schreiben lernen.


----------



## tommysenf (17. Jun 2016)

disconnectus hat gesagt.:


> Gibt es keine Andere lösungen? Kann mein Java-Programm nicht irgendwie die Prozessorgeschwindigkeit erhöhen?



Über Java Hardware Extension könnest du dafür sorgen, dass deinem Rechner mehr Ressourcen zugewiesen werden:


```
Processor ps = new I86Processor(Processor.MAX_CYCLES);
java.lang.System.addResource(ps);
```

SCNR


----------



## Flown (17. Jun 2016)

Wie sollte ein Codeabschnitt/Algorithmus schneller zur Laufzeit gestaltet werden?
Wenn man soft/hard Zeitschranken hat, dann nimmt man auch Real-Time Java VMs. Ressourcen gibt es im Internet zu genüge.


----------



## JStein52 (17. Jun 2016)

Hast du an deinem Rechner keinen "Power"-Schalter ? Da musst du draufdrücken !


----------



## InfectedBytes (17. Jun 2016)

disconnectus hat gesagt.:


> Kann mein Java-Programm nicht irgendwie die Prozessorgeschwindigkeit erhöhen?


Meinst du sowas:

```
Thread.getCurrentThread().getProcessor().setSpeed(20); // setze Geschwindigkeit auf 20Ghz
```
Falls ja, muss ich dich leider enttäuschen, so funktioniert die Welt leider nicht. 
Dein Prozessor hat eben nur ne beschränkte Leistung, moderne Prozessoren wie die verschiedensten Intel i3/i5/i7 übertakten zwar automatisch, aber das kannst du nicht mal eben beeinflussen, zumal da eben unmengen an Faktoren hinzukommen.



disconnectus hat gesagt.:


> Wie kann ich vom meinem Java-Code aus diese blockierende prozesse verhindern. Wenn mein Java-Programm in gegebene Zeit gegebene stellen im Code nicht erreichen kann, soll es z. B. die andere prozesse irgendwie blockieren. Kann man das machen?


Hier ist das Problem, das du nicht so einfach voraussagen kannst, ob dein Programm eine bestimmte Programmstelle zu einem bestimmten Zeitpunkt erreichen wird. Außerdem kommt noch erschwerend hinzu das solch eine Überprüfung ja selbst auch wieder ausgeführt werden müsste und somit Leistung fressen würde. 

Das beste wäre vermutlich deinen bestehenden Code zu überarbeiten und schauen ob du nicht ggf Stellen verbessern kannst. Als kleine Verbesserung könntest du auch die Priorität deines Threads erhöhen, das könnte zumindest eine kleine Verbesserung bringen.


----------



## disconnectus (20. Jun 2016)

Den Code habe ich selbst nicht implementiert. Wir dürfen auch nicht sehr viele Änderungen im Code vornehmen. Meine Aufgebe ist nur die Ausführungszeit zu verringern ohne den Code umzustrukturieren.

Soweit ich verstehe kann man den folgende Lösungen versuchen:

1-  Priorität der Threads erhöhen.
2-  Mehr Ressourcen für meine Threads zuweisen
3-  Prozessortakt erhöhen
4-  Andere Prozesse Blockieren

Gibt es noch andere Lösungen?


Danke für die Hinweise für die erste 3 Punkte.
Weiß jemand vielleicht auch wie ich die andere Prozesse blockieren kann?


----------



## InfectedBytes (20. Jun 2016)

Vielleicht solltest du einfach mal die exakte Aufgabenstellung posten.


----------



## Flown (20. Jun 2016)

@disconnectus Das sind alles keine "Lösungen". Du hast in Realität keinen Einfluss wie die VM/OS die Threads zum Zug kommen lassen. Dabei helfen mehr Ressourcen und/oder Rechenleistung minimalst! oder gar nicht (Außer natürlich du upgradest von einem Pentium II auf einen Intel I7 - oder natürlich Server HW).

Was du benötigst ist eine andere OS-nahe Programmiersprache, die keine globige "VM" dazwischen hat. Oder wie ich dir in meinem letzten Post geschrieben habe nimmst du eine Real-Time Java VM.


----------



## Thallius (20. Jun 2016)

@Flown

Solange wir nicht wissen worum es überhaupt geht kann man auch keine Tipps geben. Vielleicht ist es einfach nur grotten schlechter Code, der würde auch in einer Realtime Engine nicht besser werden.

Bei dem was einfache Desktop PC's heute zu leisten im Stande sind, brauchst Du schon eine verdammt hochkomplexe Anwendung um da an die Grenzen zu kommen. Und ehrlich gesagt glaube ich nicht, dass es hier um irgendwelche KI oder andere physikalische, mathematische Wunderwerke geht...


----------



## Meniskusschaden (20. Jun 2016)

Die Aufgabenstellung wäre wirklich mal interessant, denn mir leuchtet der Sinn bisher überhaupt nicht ein. Es kann doch nicht Aufgabe einer Software sein, sich selbst möglichst viele Ressourcen zu verschaffen und andere dadurch womöglich auszubremsen. So etwas möchte ich nicht auf meinen Systemen haben. Dafür ist doch in erster Linie der Systemadministrator unter Nutzung der Tools des Betriebssystems zuständig. Es gibt doch eigentlich nur zwei Möglichkeiten: die Umgebung ist unterdimensioniert oder die Software ist ineffizient. Im ersten Fall ist der Administrator zuständig, im zweiten der Programmierer.


----------



## disconnectus (20. Jun 2016)

Das sind komplexe Modelle. Z. B. Eine Stadt ist sehr detailliert modelliert. So ein Modell kann man unter anderem für die Stadtplanung benutzen. Ich weiß auch nicht alles im Detail und ich denke, ich muss auch nicht unbedingt wissen.

Wir entwickeln diese Modelle nicht. Wir betreiben sie nur. Die Ausführungszeit dieser Modelle können aber je nach Einstellung mehrere Stünden dauern (bis 16 Stünden). Ich soll alles auf ein Testmodell, welche nur 20 Minuten dauert, testen.


----------



## mrBrown (20. Jun 2016)

Und was ist jetzt die Aufgabenstellung?


----------



## Thallius (20. Jun 2016)

Dann solltest du erstmal herausfinden was daran eigentlich so langsam ist. Ist es das Rechenprozess oder vielleicht doch eher die Datenbank dahinter? Solche komplexen Dinge sollten immer geclustered sein. Dann kann man problemlos auch beliebig viele Rechner an einem Modell rechnen lassen.


----------



## disconnectus (20. Jun 2016)

@mrBrown Die Aufgabenstellung ist die Ausführungszeit zu verkürzen ohne sehr viel im Code ändern zu müssen. Wir wollen dieses Performanzsteigerung auch auf verschiedene Modelle anwenden.


----------



## InfectedBytes (20. Jun 2016)

disconnectus hat gesagt.:


> @mrBrown Die Aufgabenstellung ist die Ausführungszeit zu verkürzen ohne sehr viel im Code ändern zu müssen. Wir wollen dieses Performanzsteigerung auch auf verschiedene Modelle anwenden.


Na also, es sind also doch Code Anpassungen erlaubt. Sie sollen sich zwar in Grenzen halten, sind aber möglich. Wenn du nun noch Infos zum Code gibst, kann man mal schauen was man da so Verbessern kann.


----------



## JStein52 (20. Jun 2016)

Auf welcher Art von Hardware läuft das Programm denn ? Und läuft es da alleine ? Wenn nein warum nicht ? Es könnte evtl. am billigsten und besten sein wenn du dir eine neue Hardware die 20% schneller ist hinstellst denn wenn ich dich richtig verstehe ist das Programm ja eher CPU-bound ??


----------



## JStein52 (20. Jun 2016)

disconnectus hat gesagt.:


> Ich weiß auch nicht alles im Detail und ich denke, ich muss auch nicht unbedingt wissen


Doch solltest du eigentlich schon wissen damit du weisst an welchen Schrauben man drehen muss.


----------



## Flown (20. Jun 2016)

Thallius hat gesagt.:


> Solange wir nicht wissen worum es überhaupt geht kann man auch keine Tipps geben. Vielleicht ist es einfach nur grotten schlechter Code, der würde auch in einer Realtime Engine nicht besser werden.


Ich lese Zeitschranken die eingehalten werden müssen, kenne dazu das Werkzeug, dann nenn ich es auch. Mehr war auch nicht dahinter.


----------

