Hallo,
ich bin auf der Suche nach einer(!) einfachen Anwendung welche es
schafft bei einem Intel Multcoresystem unter Windows (7,XP) alle CPUs zu
100% auszulasten.
z.b. für eine CPU wäre primitivst Batchdatei:
echo off
:loop
goto loop
vollkommen ausrechend.
Es sollte jedoch am besten eine exe-Datei (Anwendung) sein welche im
Code Volllast auf allen verfügbaren Kernem produziert ohne das dieses
Programm weitere Programme oder sich selbst startet.
Es geht in meinem Fall darum das ich windows anschauen möchte wie es
reagiert. Ich würde beahupten wenn eine Anwendung welche für mehrere
Kerne Entwickelt ist es schafft unter Vollast der Anwendung alle CPUs zu
annähernd 100% auszulasten.
Ich habe eine Anwendung (proprietär) die meiner Meinung nach nicht
Multicore tauglich ist. Der Hersteller wird aber sicherlich das
Gegenteil behaupten. Ist das überprüfbar ?
Beispiel, die Batch datei oben ist 100% nicht Multicorefähig erzeugt
aber im Taskmanager 50% Last aber nicht auf einem Kern sondern Verteilt
auf alle kerne.
Ich würde behaupten das MS diesen Task von Kern zu Kern schiebt um eine
art Lastverteilung zu erhalten. Wenn dieser Task nun von der
Prozesshirarchie auf realtime gesetzt wird klebt er auf einem Kern fest
da scheinbar Windows nicht wirklich mehr die Zeit hat den Task
weiterzureichen.
Jedoch 2x gestartet habe ich auf jedem Kern einmal den Batch laufen und
somit 100% Last.
viele Grüße
Michael
Das ist die Killeranwendung. Folgendes musst du machen:
1. entpacken
2. auf das JAR File clicken und starten
3. Menü Remote->Start remote server
4. Menü Remote->Calculate remote
Das Programm berechnet, zu welchem Magneten ein Pendel schwingen würde,
wenn es von einem bestimmten Punkt losgelassen wird. In der Datei
remote_server.txt kannst du die Anzahl der Threads verändern. (Im Moment
32) In der Datei können noch andere Rechner angegeben werden, die sich
dann an der Berechnung beteiligen, wenn dort das gleiche Programm läuft
und auch der remote server gestartet wurde.
> z.b. für eine CPU wäre primitivst Batchdatei:>> echo off> :loop> goto loop
Warum sollte das 100% Last erzeugen? IMHO erzeugt das zeitlich gemittelt
maximal die Last, die vom Multitasker des OS dem Batchinterpreter an
Rechenzeit auf dem Kern zugestanden wird.
Normalerweise verteilt der MS-Server die Arbeit ringsum, damit nicht nur
eine CPU "ausglüht".
Die hakligen Sachen mit 100%CPU-Last waren bei mir immer auf EINEM Kern
und dann hing die Weiterleitung auf den nächsten Kern durch das System.
Je mehr Kerne die CPU hat, desto später fällt das Hängen auf, da oft nur
die Gesamtlast aller Kerne in Prozent angezeigt wird. Solche Fehler sind
mühsam zu finden. Oft hat der Techniker dann die CPU getauscht und es
ging wieder ein paar Monate.
Michael schrieb:> Ich habe eine Anwendung (proprietär) die meiner Meinung nach nicht> Multicore tauglich ist. Der Hersteller wird aber sicherlich das> Gegenteil behaupten. Ist das überprüfbar
man kann nur das gegenteil prüfen, wenn die anwednung nur 1Thread hat,
dann ist sie auf jeden Fall nicht multicore fähig. Aber das heist nicht
wenn sie mehere Threads hat, das sie sinnvoll auf mehere cores läuft.
Hallo,
danke für die Beiträge. Das hilft mir schonmal weiter.
Leider brauche ich für den Code Java, aber ich denke es sollte mir nun
möglich sein eine Anwendung zu erstellen die mehrere Threads aufmacht,
ich hatte davon scheinbar eine falsche vorstellung wie das überhaupt zu
funktionieren hat.
Zu der Anwendung, ich denke das diese eine wirklich alte Anwendung ist
die nur immerwieder etwas ergänzt wurde jetzt aber bei unserem Einsatz
aus allen nähten platzt. Der Hersteller schiebt es auf die zur Verfügung
gestellten Hardware.
Natürlich läuft auch eine schlecht programmierte Software auf schneller
Hardware schneller.
Aber in diesem Fall nimmt sich eben die Anwendung sich einfach nicht die
Leistung vom System die sie haben könnte, eben bei einem 3GHz Quadcore
Xeon nur 25% lt. Taskmanager = 1 Core
Bei der Applikation ist bei meinem Verständniss es nicht sonderlich
schwehr diese auf Multicorefähigkeit umzuprogrammieren falls man eben
die Zeit investieren möchte. Die Anwendung macht Berechnungen von
Mittelwerten der Vergangenheit über 1000e Werte. Und das dauert einfach
zu lange. Der Hersteller sagt einfach auf einer Schnelleren Hardware
würde es schneller laufen, klar hat er recht, aber das ist doch Mist.
Für mich als haupsächlich Hardwerker ist kein Flaschenhals zu sehen was
die Leistung bremsen könnte I/O oder RAM Zugriffe oder Netzwerk. Die
Anwendung verarbeitet auch nicht 100MB an Daten sondern eben diese paar
1000e bis 10000e was meiner Meinung nach nicht wirklich viel ist.
viele Grüße
Michael
Michael schrieb:> Bei der Applikation ist bei meinem Verständniss es nicht sonderlich> schwehr diese auf Multicorefähigkeit umzuprogrammieren falls man eben> die Zeit investieren möchte.
Vielleicht reicht dein Verständniss nicht aus?
Bist du sicher, das das Problem 100%ig parallelisierbar ist? Das ist
nämlich längst nicht so trivial, wie es sich anhört...
Michael schrieb:> Für mich als haupsächlich Hardwerker ist kein Flaschenhals zu sehen was> die Leistung bremsen könnte I/O oder RAM Zugriffe oder Netzwerk. Die> Anwendung verarbeitet auch nicht 100MB an Daten sondern eben diese paar> 1000e bis 10000e was meiner Meinung nach nicht wirklich viel ist.
wenn es wirklich so trivial ist, dann könnte man ja mal ein demo
programm schreiben und mal verlgeichen. Dafür müsste man aber etwas mehr
wissen. Ich kenn selber genug software wo ich weiss das sie sehr
schlecht Programmiert ist und der Hersteller es nicht einsieht. (Ich bin
selber Programmierer!). z.b. Behauptet ein Hersteller das man zur Hash
berechnung in Java die komplette Datei in den Ram laden muss - was bei
2GB Dateien blöd ist.
Mein Demo program bruachte dafür nur 2MB Ram.
Ich habe vergessen zu schreiben was die Anwendung hauptsächlich macht,
sie bildet über diese 10000e Werte welche von Mehrern Tagen, Wochen
stammen hauptsächlich Mittelwerte, z.b. Tages- Monatsmittelwerte, da
kann ich mir gut vorstellen in jedem Thread den zu Berechnenden Zeitraum
durch die Anzahl verfügbarer Kerne zu teilen und berechnen zu lassen.
Michael schrieb:> Für mich als haupsächlich Hardwerker ist kein Flaschenhals zu sehen was> die Leistung bremsen könnte I/O oder RAM Zugriffe oder Netzwerk. Die> Anwendung verarbeitet auch nicht 100MB an Daten sondern eben diese paar> 1000e bis 10000e was meiner Meinung nach nicht wirklich viel ist.
Es reichen schon IO-Zugriffe usw. (laden/speichern) oder halt die GUI,
die bedient werden will, dann wird die Berechnung wohl in einem Timer
laufen und nicht 100% Last erzeugen.
Peter schrieb:> wenn es wirklich so trivial ist
Auf die schnelle leider nicht, das Programm ist ein Unterprogramm der
Hauptanwendung und wird dementsprechend gerufen.
Die Daten bekommt das Programm aus einer Oracle Datenbank welche sich
nur samt Platten nur langweilt und spätestends bei der 2. identischen
Abfrage alle Daten aus dem Cache liefert. Die Anwendung rechnet sich
aber zu tode zum Teil bis zu 10-30 Sekunden, der Anwender sitzt davor
und wartet.
was sind das für werte, einfache zahlen oder etwas komplexeres? Für
welche Datenmenge braucht er wie lange? Sind es einfache Text-Dateien wo
du mal ein beispiel hochladen könntest?
Ulli schrieb:> Es reichen schon IO-Zugriffe usw. (laden/speichern) oder halt die GUI,>> die bedient werden will, dann wird die Berechnung wohl in einem Timer>> laufen und nicht 100% Last erzeugen.
IO kann ich zu dem zeitpunt eben nicht feststellen, weder Platte noch
Netzwerk.
Die Daten erscheinen auf einen Schwups und werden nicht nacheinander in
die GUI geschrieben.
Michael schrieb:> Die Daten bekommt das Programm aus einer Oracle Datenbank welche sich> nur samt Platten nur langweilt und spätestends bei der 2. identischen> Abfrage alle Daten aus dem Cache liefert.
da könnte aber schon das Problem liegen, wenn sie jeden Datesatz einzeln
mit einem Select abrufen dann spielt die Latenz vom Netzt eine große
rolle.
Peter schrieb:> was sind das für werte, einfache zahlen oder etwas komplexeres? Für>> welche Datenmenge braucht er wie lange? Sind es einfache Text-Dateien wo>> du mal ein beispiel hochladen könntest?
z.B. 100e Wete wie 38,32 +- 20
oder auch dreistellige Temperaturwerte 146,58
Keine riesige Wete die in die 1000000e gehen.
Peter schrieb:> da könnte aber schon das Problem liegen, wenn sie jeden Datesatz einzeln>> mit einem Select abrufen dann spielt die Latenz vom Netzt eine große>> rolle.
Ah ok danke für den Tipp das kann ich mit Wireshark anschauen, die
Netzwerkgeschwindikkeit liegt allerdings bei 10GBit.
Es macht auch keinen unterschied wieviele User auf die DB zugreifen die
Anwendung macht auf den Strich 25% Last.
Wenn du das select sieht könntst du die Daten ja mal in ein Excel laden
und dort die Berechnung machen. Wenn du dort schneller bist hast du den
Beweiss das sie mist machen.
Michael schrieb:> Ah ok danke für den Tipp das kann ich mit Wireshark anschauen, die> Netzwerkgeschwindikkeit liegt allerdings bei 10GBit.> Es macht auch keinen unterschied wieviele User auf die DB zugreifen die> Anwendung macht auf den Strich 25% Last.
Kannst du die Oberfläche während der Berechnung noch bedienen ?
Michael schrieb:> kann ich mir gut vorstellen in jedem Thread den zu Berechnenden Zeitraum> durch die Anzahl verfügbarer Kerne zu teilen und berechnen zu lassen.
Ja vorstellen kann man sich viel ist aber idR viel zu Aufwendig und
Fehlerträchtig, zumal dann ggf. der Zugriff auf die Daten wieder
syncronisiert werden muß etc. etc.
Zumal Anzahl Threads = Anzahl CPUs nicht zwangsläufig die Perfmormance
steigern muss.
Michael schrieb:> Erwin schrieb:>> Kannst du die Oberfläche während der Berechnung noch bedienen ?>> Nein das Ding ist derweil platt, Sanduhr.
Wie platt ? Die Oberfläche refresht sich nicht mehr und Win meckert das
die Anwendung hängt ? Wenn nicht, läuft die Berechnung im Timer oder in
der Berechnung wird die GUI refresht, was dein Problem dann ganz normal
erklärt.
Peter schrieb:> Erwin schrieb:>> was dein Problem dann ganz normal>> erklärt.>> und schon mal zeigt das man es auf jeden Fall etwas besser machen kann.
Ja, das ist aber, wie der Hersteller schon sagte, CPU Abhängig. Oft
berechnet man mehrere Werte z.B. 100 und dann refresht man die
Oberfläche, damit der Anwender nicht denkt das die Applikation hängt. Je
nach der Anzahl der berechneten Werte, Oberfläche/OS (Themes etc.) und
CPU hast du auf einem Rechner 100% Auslastung und auf einem anderen nur
25%.
Erwin schrieb:> Wie platt ? Die Oberfläche refresht sich nicht mehr und Win meckert das>> die Anwendung hängt ? Wenn nicht, läuft die Berechnung im Timer oder in>> der Berechnung wird die GUI refresht, was dein Problem dann ganz normal>> erklärt.
GuI refrehst sowiso erst wenn es fertig ist, keine laufende Darstellung.
Windows meldet nicht das die Anwendung hängt.
Mann kann die Anwendung noch problemlos schließen und muss sie nicht
abschießen.
Es gibt aber keinen "abbrechen" Knopf.
Mit Assembler:
Start:
JMP Start
sind 2Byte die auch unter WinXP jeden Kern zu 100% auslasten
daher bei 2 Kernen und zweimal gestartet gibt's 'nen durchgehenden
Strich bei 100%. (Bei Windows 9x geht der ganze Rechner in die Knie:)
son 3GHz müßte theoretisch 38GFlops haben. Das heißt 38 Giga Flißkomma
Operationen pro Sekunde. Also ein Core könnte dann so um die 10GFlops.
Jetz sagen wir es ist ganz schlecht Programmiert und wir schaffen nur
1GFlop dann würde er immer noch 1 Miliarde Werte pro Sekunde verabeiten
können. Du hast aber 1000e Werte in 30 Sekunden ??!!!
Wenn ich das jetzt zurückrechne bist du 1000000*30 mal langsamer !! Also
30 Millionen mal langsammer als ne 1GFlop CPU -> 1GFlop/30000000=
Also 33 Fließkomma Operationen pro Sekunde ?????
Da ist nen C64 Schneller.
OMG da helfen 4 Cores auch nicht.
Tut mir leid ist nicht bös gemeint aber ich muß gerade echt Grinsen.
Irgedetwas anderes ist da nicht OK
> z.b. Behauptet ein Hersteller das man zur Hash> berechnung in Java die komplette Datei in den Ram laden muss - was bei> 2GB Dateien blöd ist.> Mein Demo program bruachte dafür nur 2MB Ram.
...und ein C Programm hätte nur 2kB gebraucht scnr
Uwe schrieb:> son 3GHz müßte theoretisch 38GFlops haben. Das heißt 38 Giga Flißkomma> Operationen pro Sekunde. Also ein Core könnte dann so um die 10GFlops.
Blöde frage, wie kommst du auf 12,66 Floatingpointoperationen pro Takt?
Peter schrieb:> z.b. Behauptet ein Hersteller das man zur Hash> berechnung in Java die komplette Datei in den Ram laden muss - was bei> 2GB Dateien blöd ist.> Mein Demo program bruachte dafür nur 2MB Ram.
kann wir den gleichen Herstellen? Fängt der mit ES an?
Mir glaubt der Hersteller auch nicht - schon peinlich was sich andere
erlauben und dann noch nich mal einsichtig.
4xSSE Einheiten a 3GHz is nur ca. (hab den Wert mal gelesen für irgen
nen 3GHz Quad). Muß man mal googlen. Aber 33 Flops/s das sind 33 Werte
die PRO SEKUNDE ADDIERT WERDEN !!!! selbst wenn es 30000Flops/s wären
das kann nicht sein !!!!! Und als lösung 4 Cores zu nehmen ist
schwachsinnig dann sind es 100000 Werte pro Sekunde , das ist doch
lachhaft. Die Software könnte in ein paar Millisekunden das Ergebnis
liefern bzw. Microsekunden.
Peter schrieb:> z.b. Behauptet ein Hersteller das man zur Hash> berechnung in Java
Kommt auf die Blocklänge an ;P
Auch Java kann aber ganz normal einen Stream hashen... nutze ich sleber
zur Überprüfung von heruntergeladenen Dateien.