Rechenlastiges Browser-Multithreating Programm

ZuseZ3

Lt. Commander
Registriert
Jan. 2014
Beiträge
1.666
Als Projekt möchte ich eine Webseite erstellen über welche man verschiedene Einstellungen für ein Spiel machen kann und das Ergebnis simuliert. Da das ganze äußerst rechenlastig ist und ich ohnehin nur ungern in anderen Sprachen programmiere wäre C(++) für mich wünschenswert, Java dürfte aber für derartige Programme passender sein, oder?
Das ganze soll mittelfristig auch Multithread fähig werden was noch vergleichsweise simpel ist, da jede der Simulationen unabhängig von den anderen läuft. Dazu soll das ganze noch ohne Flash laufen.
Vorkenntnisse habe ich mir Privat angeeignet bzw. aus einem Semester IT Studium, daher durchschnittlich.

Da ich vorzugsweise mit dem Terminal arbeite also folgende Fragen.
Welche ide (vorzugsweise unter Linux), notfalls Windows soll ich nehmen.
Welche Sprache, eine C-irgendwas oder Java?
Und wie bekomme ich das Programm auf eine Webseite (oder verschiebe ich das auf den Zeitpunkt wo meine Simulation lokal lauffähig ist)?
 
Zuletzt bearbeitet:
https://java.com/en/download/faq/chrome.xml

[h=4]Chrome no longer supports NPAPI (technology required for Java applets)[/h]The Java plug-in for web browsers relies on the cross platform plugin architecture NPAPI, which has been supported by all major web browsers for over a decade.

Nur als Hinweis, dass Java-Unterstützung bei den Browsern zurückgeht. Wenn das ein langstehendes Projekt ist, wäre HTML5/JavaScript wohl die bessere Wahl, außer es darf auch eine "unbequeme" Lösung sein.
 
ZuseZ3 schrieb:
Und wie bekomme ich das Programm auf eine Webseite (oder verschiebe ich das auf den Zeitpunkt wo meine Simulation lokal lauffähig ist)?
Dafür muss es JavaScript sein, also keine Performance wie C ;) Mit asm.js gibt es aber eine Möglichkeit C-Code in eine schnellere Variante von JavaScript zu kompilieren, und mit WebAssembly in Zukunft eine weitere. Aber dir bleibt nur ersteres übrig.
 
wozu das ganze ich erkenne den Sinn dabei nicht ...

Spieleleistung ist nicht immer gleich CPU Leistung -> Daher schon etwas Sinnfrei.

Ist dir überhaupt klar was und wie du testen willst ?
( Spiele sagst du ... eines mehrere ... welche Einstellungen überhaupt ... woher nimmst du die Kenntniss das z.b. die BOT´s im Shooter xyz 0,21 Terraflop Rechenleistung brauchen ?

Was für Grundsachen du dafür braucht und welche Datenmengen z.b.


Eine reine CPU Berechnungsskalaen gibts schon so viele da würde ich persönlich nicht auf eine Webseite gehen die auf meinem Rechner Berechnungen ausführen darf ( wer schützt mich vor Schadcode z.b. )
 
Zuletzt bearbeitet:
Vielen Dank schon mal, im Gegenteil, ich sah Java eh als unsaubere, aber einfache Lösung.
Das Flash kaum noch Freunde hat wusste ich, das für Java allgemein ähnliches gilt war mir gerade nicht bewusst.
Dann mach ich mich mal daran mir ein paar Dokumentationen zu der Kombination anzusehen, irgendwelche Vorschläge womit ich solche Programme am besten Entwickel? Bisher haben mir vim/Codeblocks für c/java gereicht.

@ xxMuahdibxx: Ich habe nicht vor CPU Belastungstest zu schreiben. Es geht mir um eines der Typischen onlinegames mit einem etwa komplexeren Schere Stein Papier Kampfsystem bei dem die verschiedenen Einheiten in gewissem Rahmen und rundenbasiert eine zufällige Schadensmenge verursachen. Bei ein paar hundert Einheiten pro Seite lässt das den Prozessor ordentlich qualmen, vor allem wenn man bei gegebenen Gegnern die Optimalen Angriffseinheiten bestimmen will. Nur um ein paar Punkte zu nennen die das Programm machen soll. Wie man sieht vom Ansatz her nicht schwer, interessant ist nachher halt nur die Performance. Mit typischer Bot Programmierung möchte ich mich gerade nicht beschäftigen.

Datenmengen sind Trivial, es gibt geschätzt 50 Einheiten mit jeweils 4 Attributen. Die Eingabe wird sein wie viele von jedem Typ pro Seite vorhanden sind.
 
Zuletzt bearbeitet:
Nun du hattest Spiel halt nicht konkretisiert daher die Fragen.

BOT ist nicht gleich Aimbot oder klickbot ... sondern CPU Berechnete Gegner die halt auch Rechenleistung brauchen. Deswegen ja auch die Anmerkung Shooter.

Was du vorhast ist einfach Einheiten -> Schadenstabellen zu vergleichen
 
Eine einfache Abfrage geht nicht Muahdib, da Pro Seite und Pro Runde der Schaden aus dem Intervall ]maxDMG,maxDMG/2[ pro Einheitstyp ausgewürfelt wird.

Dies führt bei allen anderen (btw. größtenteils Flash basierten) Simulatoren dazu dass sie unter vielen Umständen (bestimmen der besten Angreifer nach mehreren Gewichtungen, durchschnittliche Verluste bei gegebenen Angreifern) lange bis ewig rechnen.
Nur mal als Rechenbeispiel, sei die Intervallänge über die verschiedenen Einheitentypen hinweg im Schnitt 30(maxDmg = 60, minDmg = 30) und es gibt pro Seite 5 Einheiten und einen 5-ründigen Kampf. Das macht (30*5*2)⁵ Kombinationen.

Meine Hoffnung ist, dass ich mit HTML5 eine bessere Performance hin bekomme.


Ich habe mal Aptana als IDE genommen und damit eine Seite zu erstellen scheint gut machbar.
 
Zuletzt bearbeitet:
Ich denke auch, dass Du mit Dart/Javascript sehr gut fährst. Stichwort sind die neuen Web Worker.
 
Nur so hypothetisch: Koennte man das nicht nativ als C++-Programm auf dem Server laufen lassen und nur die Ergebnisse hin- und herschaufeln, oder wuerde das schlecht performen?
 
soll der client die berechnungen ausführen oder ein backend auf einem server?
 
ZuseZ3 schrieb:
Nur mal als Rechenbeispiel, sei die Intervallänge über die verschiedenen Einheitentypen hinweg im Schnitt 30(maxDmg = 60, minDmg = 30) und es gibt pro Seite 5 Einheiten und einen 5-ründigen Kampf. Das macht (30*5*2)⁵ Kombinationen.

Bei der Menge an Berechnungen wirdt du immer massive Probleme haben! Du schreibst keine Simulation für Fusionsreaktoren oder ähnliches du brauchst gar keine perfekte Genauigkeit.
Mach dir Gedanken wie du die Anzahl an Berechnungen massiv senken kannst, dabei aber nur minimal ungenauere Ergebnisse erhälst. Das ist der Weg zum Ziel!

Wer will dein Programm schon 15min rechnen lassen, wenn er nach 30sek ein Ergebnis haben kann, welches zu 98% identisch ist...
 
Als C Programm auf dem Server dürfte es am schnellsten gehen, aber da ich nicht vorhabe Geld für einen ansatzweise performanten Server auszugeben sondern dass nehme, was ich kostenlos bekomme rechne ich damit dass das nicht umsetzbar ist.
 
Zuletzt bearbeitet:
ZuseZ3 schrieb:
Eine einfache Abfrage geht nicht Muahdib, da Pro Seite und Pro Runde der Schaden aus dem Intervall ]maxDMG,maxDMG/2[ pro Einheitstyp ausgewürfelt wird.

Dies führt bei allen anderen (btw. größtenteils Flash basierten) Simulatoren dazu dass sie unter vielen Umständen (bestimmen der besten Angreifer nach mehreren Gewichtungen, durchschnittliche Verluste bei gegebenen Angreifern) lange bis ewig rechnen.
Nur mal als Rechenbeispiel, sei die Intervallänge über die verschiedenen Einheitentypen hinweg im Schnitt 30(maxDmg = 60, minDmg = 30) und es gibt pro Seite 5 Einheiten und einen 5-ründigen Kampf. Das macht (30*5*2)⁵ Kombinationen.
Du willst so eine Art Ergebnisbaum bauen, um daran die optimale Lösung festzumachen, kann man machen, muss man aber nicht. Rechne mal nicht für jeden möglichen Damage im Intervall sondern einfach mit dem Mittelwert, der angerichtete Damage ist nämlich eine zufällige Größe und damit ist es IMHO recht sinnfrei den mit in den Ergebnisbaum aufzunehmen. Wenn nun Stein/Schere/Papier ins Spiel kommt brauchst du natürlich wieder einen Ergebnisbaum, da kann man aber bestimmte Szenarien gleich direkt wegignorieren. Ein Fußsoldat mit Knüppel braucht kein Flugzeug anzugreifen zB., das heißt man hebt sich je Zug nur die Züge auf, die maximalen Damage machen.

Das nimmt dann glaube ich genug Komplexität aus der Sache, selbst wenn nicht ist das ein Allerweltsproblem für das es mehr als genug Erfahrungswerte gibt, ein oder zwei Tutorials über Gamedesign sollten das schon so ziemlich erschlagen.
 
Zurück
Oben