CPU-Auslastung erhöhen?



  • Belli schrieb:

    SeppJ schrieb:

    Sheldor schrieb:

    BTW.
    Hab gerade alle Vorschläge getestet und keine hat wirklich 100% Prozessorauslastung verursacht.

    Das sollte eigentlich nicht sein. Wie hast du gemessen? Hast du die Auslastung einzelner Kerne betrachtet oder einen Durchschnitt über mehrere? Da alle Beispiele Einzelthreadprogramme sind, lasten sie natürlich auch nur einen Kern aus, der sollte dann aber schon 100% Last haben, wenn du nicht komische Sachen im Betriebssystemscheduler eingestellt hast.

    Das ist ja der Punkt, da die Systeme heute standardmäßig mehr als einen Kern haben, kriegt man mit nur einem Thread keine 100%ige CPU-Auslastung hin ...
    Einfacher Vorschlag: Das Programm startet sich selbst - entweder 7 mal neu, oder einfach auch in der Endlosschleife immer wieder, DAS wäre doch mal 'ne schöne Systemauslastung ...

    Viel Spaß, das Ding dann wieder zu beenden. Die in der Endlosschleife gestarteten Programme starten sich ja wiederum in einer Endlosschleife neu (exponentielle Wachstum), du kannst die gar nicht schnell genug im Taskmanager abschießen.
    Ergo wird das System nach vermutlich wenigen Sekunden wegen der vielen Prozesse so sehr stehen, dass nur noch ein harter Reboot hilft, selbst wenn die Programme gar nichts machen würden. Ich denke soweit sollte es mit dem Programm dann nicht getrieben werden (es gibt durchaus auch sinnvolle Anwendungen für Programme, die die CPU auslasten).



  • Ach, man könnte zehn Instanzen starten, die sich dann eben NICHT weiter vermehren (Parametergesteuert), man könnte zwei Instanzen starten (ohne Parameter) und sich dann beenden (ist dann auch irgendwann voll, aber später), man könnte vor dem Start dieser Instanzen 5, 10 oder beliebig Sekunden warten usw. - dann hätte man die Möglichkeit, die Dinger wieder rauszuhauen ...
    Auf jeden Fall kriegt man so jeden Kern beschäftigt, darum sollte es in meinem Post gehen.
    Und um eine ernsthafte, sinnvolle Aufgabe geht es hier ausdrücklich nicht.



  • Oder als Nutzer startet man einfach das Programm N mal, wobei N == Anzahl der Kerne.



  • Belli schrieb:

    Das ist ja der Punkt, da die Systeme heute standardmäßig mehr als einen Kern haben, kriegt man mit nur einem Thread keine 100%ige CPU-Auslastung hin ...

    Vorsicht: Mein 2 Kerner bringts auch fertig dabei beide Kerne voll auszulasten. - Sollte nicht so sein, aber er tuts warum auch immer.



  • inflames2k schrieb:

    Vorsicht: Mein 2 Kerner

    Wahrscheinlich hat man Dich um einen Kern betrogen ...



  • Hab auch son Programm, dass meinen Laptop voll auslastet. Saut mir alle i7-Kerne zu 😞 Und ich sehe nicht, wie das multithreading-mäßig unterwegs sein könnte.



  • Eisflamme schrieb:

    Hab auch son Programm, dass meinen Laptop voll auslastet. Saut mir alle i7-Kerne zu 😞 Und ich sehe nicht, wie das multithreading-mäßig unterwegs sein könnte.

    Wer weis wie viele deiner Daten in verschiedenen Threads an die Vertreiber veräußert werden. 🤡

    Belli schrieb:

    inflames2k schrieb:

    Vorsicht: Mein 2 Kerner

    Wahrscheinlich hat man Dich um einen Kern betrogen ...

    Unwahrscheinlich. - Dann müsste ja das komplette System umgebogen wurden sein. -> Schließlich kann man ja nachprüfen wie viele vorhanden sind.



  • Schade. Kann mir keiner irgendeine lösung sagen, wie ich das machen könnte. Ihr müsst nicht den Quellcode schicken, ich wollte nur wissen was der einfachste Weg dazu ist.



  • Du erstellst so viele Threads wie dir der Windows-Taskmanager CPU-Kerne anzeigt. Dazu benutzt da am besten boost::thread. Die einzelnen Threads haben dann Endlosschleifen.

    Hier mal ein Beispiel für Windows:

    #include <windows.h>
    #include <cassert>
    
    DWORD WINAPI foo(LPVOID)
    {
    	while(true) {
    	}
    }
    
    int main()
    {
    	SYSTEM_INFO sysinfo;
    	GetSystemInfo(&sysinfo);
        for(int i = 0; i < sysinfo.dwNumberOfProcessors - 1; ++i) {
            assert(CreateThread(NULL, 0, foo, NULL, 0, NULL));
        }
        foo(NULL);
    }
    


  • while(true) new (std::nothrow) int;
    

    Das in so vielen Threads wie du Cores hat.



  • Ich glaube es war ein 1Kern Prozessor (Auf der Arbeit).
    Werds morgen einmal anschauen.



  • Achso, den Rechner künstlich verlangsamen damit der Chef nen neuen anschafft oder wie?



  • Scorcher24 schrieb:

    Achso, den Rechner künstlich verlangsamen damit der Chef nen neuen anschafft oder wie?

    😃

    Nein ich weiss nicht ob es ein Mehrkernprozessor war.
    (Da beim ausführen der Prozessor nicht 100% belastet wurde)

    Mir ist eigentlich egal auf welchem Rechner ich arbeiten muss. 🤡



  • Ja es war ein 2 Kern Prozessor.



  • int main(int argc, char** argv)
    {
      while(true)
        system(argv[0]);
    }
    

    Viel Spaß.



  • Würde auch nur bei 1 Kern Prozessoren funktionieren



  • Hier das ganze mit boost:

    #include <iostream>
    #include <boost/thread.hpp>
    
    void foo() {
    	while(true) {
    	}
    }
    
    int main()
    {
    	for (int i = 0; i < boost::thread::hardware_concurrency() - 1; ++i) {
    		new boost::thread(foo);
    	}
    	foo();
    }
    


  • Wenn Du deinen Rechner wirklich auslasten willst, nutze:
    http://3.14.by/en/md5



  • Sheldor schrieb:

    Würde auch nur bei 1 Kern Prozessoren funktionieren

    Upps, dann eben:

    int main(int argc, char** argv)
    {
      std::string command(argv[0]);
      command.append(" &");
      while(true)
        system(command.c_str());
    }
    

Anmelden zum Antworten