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
Dann schreib Dir ein Programm, das mehrere Threads öffnet und sich selbst beschäftigt. Ich verstehe ehrlich gesagt dein Problem nicht so richtig.
ja genau, wie sollte so ein Programm den aussehen ? Am PC hab ich bisher nur VB Programmiert. Zur Verfügung hab ich VS2005 viele Grüße Michael
z.B. in Java...
1 | public class KillerApp implements Runnable { |
2 | private static final int THREAD_COUNT = 10000; |
3 | |
4 | private long cnt = 0; |
5 | |
6 | private double dblcont = 0; |
7 | |
8 | /**
|
9 | * main Methode für KillerApp startet THREAD_COUNT Threads
|
10 | *
|
11 | * @param args
|
12 | */
|
13 | public static void main(String[] args) { |
14 | for (int i = 0; i < THREAD_COUNT; i++) { |
15 | Thread thread = new Thread(new KillerApp()); |
16 | thread.setPriority(Thread.MAX_PRIORITY); |
17 | thread.start(); |
18 | }
|
19 | }
|
20 | |
21 | /* (non-Javadoc)
|
22 | * @see java.lang.Runnable#run()
|
23 | */
|
24 | @Override
|
25 | public void run() { |
26 | while (true) { |
27 | cnt += 1; |
28 | dblcont += Math.PI; |
29 | }
|
30 | }
|
31 | }
|
starte 4mal den Taschenrechner und lass die Fakultät von 9999999999 berechnen.
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 ?
Erwin schrieb: > Kannst du die Oberfläche während der Berechnung noch bedienen ? Nein das Ding ist derweil platt, Sanduhr.
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.
Erwin schrieb: > was dein Problem dann ganz normal > erklärt. und schon mal zeigt das man es auf jeden Fall etwas besser machen kann.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.