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?
Antworten:
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.
quelle
Dies kann eine Energiespareinstellung sein, die dazu führt, dass der Governor die CPU auf dem langsameren Computer niedriger taktet.
quelle
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.
quelle
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:
[OK]
Das Programm sollte jetzt so viel Rechenleistung verbrauchen, wie es kann (dies hängt von der Art des Prozesses ab).
quelle
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
quelle