Forum: PC-Programmierung suche Killeranwendung


von Michael (Gast)


Lesenswert?

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

von Udo S. (urschmitt)


Lesenswert?

Dann schreib Dir ein Programm, das mehrere Threads öffnet und sich 
selbst beschäftigt.
Ich verstehe ehrlich gesagt dein Problem nicht so richtig.

von Michael (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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
}

von Peter (Gast)


Lesenswert?

starte 4mal den Taschenrechner und lass die Fakultät von 9999999999 
berechnen.

von ... (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

> 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.

von oszi40 (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Pjotr Hansen (Gast)


Lesenswert?

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...

von Peter (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Ulli (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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?

von Michael (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

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.

von Erwin (Gast)


Lesenswert?

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 ?

von Michael (Gast)


Lesenswert?

Erwin schrieb:
> Kannst du die Oberfläche während der Berechnung noch bedienen ?

Nein das Ding ist derweil platt, Sanduhr.

von Sam .. (sam1994)


Lesenswert?

Schon mal was von prime95 gehört?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Erwin (Gast)


Lesenswert?

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.

von Peter (Gast)


Lesenswert?

Erwin schrieb:
> was dein Problem dann ganz normal
> erklärt.

und schon mal zeigt das man es auf jeden Fall etwas besser machen kann.

von Erwin (Gast)


Lesenswert?

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%.

von Michael (Gast)


Lesenswert?

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.

von Schwarzes Tigerle (Gast)


Lesenswert?

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:)

von Uwe (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

> 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

von U.R. Schmitt (Gast)


Lesenswert?

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?

von Peter II (Gast)


Lesenswert?

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.

von Uwe (Gast)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.