Warum ist der c ++ - Prozess bei gleicher Hardware / Software viel langsamer als auf anderen Rechnern?

5

Ich habe ein C ++ - Programm (kompiliert mit Visual Studio 2010 für Windows x64), das einige mathematische Optimierungen durchführt und keine interaktiven Elemente enthält (der (einzelne) Prozess wird nur über die Konsole gestartet und endet, wenn die Optimierung abgeschlossen ist). Die Laufzeit hängt von der jeweiligen Eingabe ab und kann beispielsweise ca. 4 Minuten.

Wenn ich diesen Prozess auf meinem Computer ausführe (Dell Latitude E6420, Intel Core i7-2720QM 2,2 GHz, 8 GB RAM, Windows 7 (64 Bit)), werden 13% der gesamten CPU verwendet (das sollte korrekt sein, da es auch verwendet werden kann ein einzelner Kern). Das Problem ist, dass es mehr als 4- bis 8-mal langsamer läuft als auf einem anderen Dell Latitude E6420 (mit genau denselben Statistiken und sogar größtenteils derselben installierten Software), während die Ressourcen eines Kerns verwendet werden. Beispiel: Der Vorgang dauert auf meinem Computer 20 Minuten, auf dem anderen 4 Minuten.

Außer den Systemprozessen werden keine anderen Prozesse ausgeführt (die CPU-Auslastung beträgt fast 0%, mit Ausnahme des ausgeführten c ++ - Prozesses).

Numerische Fehler oder andere mathematische Probleme kommen nicht in Frage. Es wird überprüft, dass der Algorithmus auf beiden Computern genau das Gleiche tut, nur langsamer (bei genau gleicher Prozessorauslastung (= 13%).

Ich möchte eine Neuinstallation von Windows vermeiden. Die Frage ist also, ob es andere Gründe geben kann, z. B. Hardwaredefekte, falsche BIOS-Einstellungen usw.? Alle Treiber sind aktuell.

Irgendeine Idee, was diesen extremen Laufzeitunterschied verursachen kann?

Sebastian
quelle
Sie müssen Windows neu installieren, um diese Möglichkeit auszuschließen. Sobald Sie das getan haben und es immer noch ein Problem ist, können wir versuchen, es herauszufinden. Natürlich ohne den Code, der wahrscheinlich nicht möglich ist.
Ramhound
1
Haben Sie SpeedStep und TurboBoost im BIOS für beide Computer aktiviert? Versuchen Sie es mit CPU-Z und stellen Sie sicher, dass die Prozessoren tatsächlich mit derselben Taktrate laufen (Abschnitt unten links, "Core Speed"). Haben sie auch den gleichen Geschwindigkeitsspeicher (CPU-Z -> Registerkarte Speicher -> Timings -> DRAM-Frequenz)?
Darth Android
Führen Sie ein X32-Programm auf einem X64-System aus ? Ich hatte ein solches Problem in der Vergangenheit und Grund war, dass der Kompatibilitätsmodus in Windows langsam ist.
Maxwell S.
@Maxwell Eigentlich habe ich beides ausprobiert und mit x32 und mit x64 kompiliert. Beide Versionen sind extrem langsamer als auf der anderen Maschine. Ich benutze 64-Bit-Fenster ...
Sebastian
@DarthAndroid Danke, ich werde das überprüfen und den Beitrag bearbeiten!
Sebastian

Antworten:

4

Sie schreiben, dass beide Maschinen Dell Latitude E6420 sind. Da beide die gleiche Hardware haben, sollten Sie die Festplatten austauschen können. Auf diese Weise können Sie feststellen, ob die Probleme in der Software ohne Neuinstallation auftreten.

Weitere zu überprüfende Punkte sind die BIOS-Einstellungen (dieselben Einstellungen und dieselbe BIOS-Version).

Wenn keines der beiden Ergebnisse liefert, überprüfen Sie die Festplatten. Sowohl das Modell als auch die Ereignisanzeige in Windows (Lesefehler werden protokolliert).

Überwachen Sie zuletzt die CPUs mit CPU-Z.

Hennes
quelle
Das Auswechseln der Festplatten war eine gute Idee. Es stellte sich heraus, dass der Vorgang trotz der Hardware auf dem anderen Computer langsam ist! Daher halte ich eine Neuinstallation von Windows für unvermeidlich ... (BIOS-Einstellungen und CPU-Z-Werte sind ohnehin gleich)
Sebastian
3

Dies kann eine Energiespareinstellung sein, die dazu führt, dass der Governor die CPU auf dem langsameren Computer niedriger taktet.

Fredrick
quelle
2
Ich habe vor kurzem 3 Tage mit einer Maschine verbracht, die mit 700 MHz läuft, weil eine BIOS-Einstellung damit zusammenhängt :( Es hat keinen Spaß gemacht (und ich wusste nicht, dass dies das Problem war, bis zum 3. Tag).
Darth Android
@DarthAndroid Welche BIOS-Einstellung war das?
Sebastian
Vielen Dank für den Hinweis, ich habe die Energieeinstellungen von Windows auf beiden Computern überprüft, aber sie sind genau gleich, und beide Notebooks sind die ganze Zeit angeschlossen.
Sebastian
@ Sebastian Ich bin mir immer noch nicht ganz sicher. Das System hat SpeedStep ordnungsgemäß gestartet ... nachdem ich SpeedStep im BIOS deaktiviert habe. Ein Teil von mir will, aber der andere Teil von mir zu untersuchen , ist einfach nur glücklich , nicht mehr als 20 Minuten zu verbringen einen einzigen Build unserer Software - Produkt zu tun, und begnügt sich die Dinge in Ruhe lassen: X
Darth Android
2
Möglicherweise wird die CPU gedrosselt. Läuft die Problemmaschine heißer?
Synetech
2

Führen Sie das Programm auf beiden Computern auf dieselbe Weise aus? Sie sagen, dass es auf Ihrem Computer langsamer ist - führen Sie es in DevStudio aus (dh Debug-> Ohne Debugging starten oder wie auch immer es heißt)? Dies könnte den Prozess verlangsamen, da er in einem etwas anderen Kontext gestartet wird als wenn er nur über die Befehlszeile / Shell ausgeführt würde.

Skizz
quelle
Nein, ich führe genau dieselbe kompilierte ausführbare Datei aus (die als Release-Version ohne Debug-Informationen kompiliert wurde), die über die Befehlszeile gestartet wurde.
Sebastian
+1 für zumindest die Tatsache, dass der VS-Debug-Modus VIEL langsamer in der Leistung ist.
Chad Harrison
0

Sie sagten, dass das Programm nur einen Kern verwendet, dies beschränkt es jedoch nicht unbedingt auf 1 / N der Verarbeitungsleistung. Es kann sich um ein Multithread-Programm handeln (insbesondere, da es sich um ein modernes Programm handelt, das in VS2010 geschrieben wurde), sodass es möglicherweise von einem System künstlich eingeschränkt wird.

Wenn ein Programm blockiert zu sein scheint und weniger CPU benötigt als es sein sollte (insbesondere im Vergleich zu demselben Programm, das auf einem anderen System ausgeführt wird), überprüfen Sie die CPU-Affinitäten:

  1. Führen Sie das Programm aus
    • Drücken Sie Pauseim Konsolenfenster , falls erforderlich (dh, wenn es zu schnell schließt)
  2. Öffnen Sie den Task-Manager
  3. Klicken Sie mit der rechten Maustaste auf den Programmprozess und wählen Sie Affinitäten festlegen
  4. Stellen Sie sicher, dass alle Kerne / CPUs / Threads ausgewählt sind (dh klicken Sie auf )
  5. [OK]

Das Programm sollte jetzt so viel Rechenleistung verbrauchen, wie es kann (dies hängt von der Art des Prozesses ab).

Synetech
quelle
Es werden alle Kernaffinitäten ausgewählt. Dies ist jedoch ein C ++ - Programm mit einem Thread und verwendet nur einen Kern (= 13%) für den zeitaufwendigen Optimierungsalgorithmus. Die Verwendung des Prozessors ist nicht das Problem, da dies auch auf dem anderen Computer der Fall ist. Das Problem ist, dass beide Prozesse genau die gleiche Menge der gleichen CPU (die gesamte verfügbare Menge) verwenden, aber die andere ist extrem langsamer ...
Sebastian
Wenn Sie also das CPU-Diagramm für das Programm auf beiden Systemen anzeigen, sehen beide ungefähr gleich aus (dh in der Höhe), mit der Ausnahme, dass eines ~ 4x länger ist ?
Synetech
Ich habe die Grafiken nicht genau verglichen, nur die Auslastung (die während der Ausführung konstant 12-13% betrug), und ja, eine davon ist mindestens 4-mal länger, obwohl genau die gleichen Prozeduren und Speicherzuordnungen durchgeführt und dieselbe erstellt wurden Ergebnis etc.
Sebastian
0

Der Grund könnte sein, dass auf dem langsameren Rechner das erweiterte Debugging aktiviert wurde (zB für ein Heap-Corruption-Debugging). Um die Prozesse anzuzeigen, für die dieses Debugging aktiviert ist, öffnen Sie die Anwendung "Global Flags" (Start -> Alle Programme -> Debugging-Tools für Windows (x64)), gehen Sie zur Registerkarte "Image-Datei" und geben Sie den Programmnamen ein (HINWEIS! Verwenden Sie Klicken Sie zum Aktualisieren auf die Schaltfläche "Tab" und stellen Sie sicher, dass keine Flags als globale Flags festgelegt sind . Die andere Option ist, die Befehlszeile zu öffnen und "gflags / p" einzugeben. Sie zeigt die Liste aller Programme mit erweitertem Debugging an (Ihr Programm sollte nicht vorhanden sein). Weitere Informationen finden Sie unter https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/gflags-overview

Anton Lytvynenko
quelle