Hallo,
Investox ProduktivPC:
- hier werden die MehrkernCPU's schon sehr gut unterstützt, d.h. man kann unter Investox mehrere Unterinstanzen installieren und dort die HS laufen lassen
- so kann man die HS besser gruppieren, z.B. nach Brokern (IB, virtueller Broker) oder nach der Periodendauer (z.B. 60min-HS, 24h-HS, usw.)
- das Konzept ist sehr anwenderfreundlich umgesetzt, z.B. werden bei Start des HauptInvestox auch gleich alle UnterInstanzen gestarten, viele Einstellmöglichkeiten, usw.
- Fazit: das ist perfekt
Investox EntwicklungsPC:
- die meiste Zeit geht bei der Entwicklung der HS, und hier speziell bei der Parametrisierung der Optimierungsvariablen verloren, d.h. hier gibt es viel Einsparpotential
- man hat einmal den Robustheitstest und den GA, die leider nur auf einer CPU laufen
- Verbesserungsvorschlag: der Investoxler hat ein 4KernCPU-PC und installiert Investox + 3 Unterinstanzen von Investox (für jeden CPU-Kern eine)
- dann wird ein Investox-Berechungsklaster gebildet, wo der InvestoxHauptinstanz die 3 Unterinstanzen als "Worker" zugewiesen werden
- a)Robustheitstest: da ist es ganz einfach, weil wenn man z.B. die Periode eines Indikators von 1 bis 400 variiert, dann sind alle 400 Berechnungen voneinander unabhängig, d.h. man kann den Berechnungsraum von 400 Berechungen durch 4 teilen und so berechnet jeder CPU-Kern über die 4 Investoxinstanzen parallel nur je 100 Berechnungen (die perfekte Arbeitsteilung). Zum Schluß sammelt die InvestoxHauptinstanz die Berechnungsergebnisse ein, fügt alles zusammen und zeigt das Ergebnis des Robustheitstest wie gewohnt an
- b)GA: anstatt bei einer Generationsberechnung, diese nur auf einen Kern auszuführen, wird diese auf allen 4 Kernen gestartet, dann alle Ergebnisse eingesammelt und das beste Berechnungsergebnis verwendet und weiter geht es zur nächsten Generationsberechnung. Ich denke so könnte man den GA parallelisieren und ein Optimum wird so schneller gefunden werden.
Wie kann man es umsetzen?
- die Parallelisierung des ROB und GA ist ja nichts neuen, alle Komponenten sind in Investox schon vorhanden und die Erweiterung setzt perfekt auf der bereits umgesetzten Parallelisierung über mehrere InvestoxInstanzen auf
- man benötigt zusätzlich einen Mechanismus zur internen Kommunikation zwischen den verschiedenen InvestoxInstanzen, als Protokoll könnte man z.B. XML verwenden oder besser noch JSON(ist weniger "gesprächig")
- im einfachsten Fall erfolgt die Kommunikation über das Filesystem: d.h. jede Investox-UnterInstanzen bekommt die Verzeichnisse "internInput" und "internOutput". Die InvestoxHauptInstanz verteilt die Arbeit an die "Worker", d.h. die Arbeitspakete werden in den Verz. "internInput" abgelegt. Jede Investox-UnterInstanzen schaut regelmäßig in dem Auftragsordner nach ob es Arbeit gibt und wenn ein JSON-Arbeitspaket vorliegt dann wird es abgearbeitet. Das Ergebnis der Berechnung wird im Verz. "internOutput" abgelegt. Zum Schluß sammelt der "Chef", d.h. die InvestoxHauptInstanz die Berechnungsergebnisse wieder ein, bereitet sie auf und bringt sie zu Anzeige bzw. beim GA fließt in den nächsten Berechnungsschritt mit ein.
- die Fileschnittstelle ist der 1.Schritt, um erstmal zu sehen ob es so funktioniert und von den InvestoxUser angenommen wird. Bei 4 Kernen schafft man bestimmt eine Leistungssteigerung auf 300%, trotz der langsamen Fileschnittstelle. Später kann man die Fileschnittstelle dann noch ersetzen, z.B. durch Services oder eine direkte Client-Server-Kommunikation oder ähnlichem
Vielleicht läst sich da was machen.
Es wäre wirklich ein gewaltiger Fortschritt, wenn man die sehr aufwendigen Berechnungen bei ROB und GA um ein vielfaches, unter Verwendung der bestehenden Ressourcen (4 KernCPU's sind heute fast schon Standard und der Trend geht zu immer mehr Kernen), beschleunigen könnte.
Danke.
Viele Grüße,
Sten
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »sten« (8. April 2014, 11:04)