Wie kann ich meinen Computer verlangsamen (zu Testzwecken)? [geschlossen]

20

Wie die meisten Menschen zustimmen, ist es keine gute Idee , Entwickler zu ermutigen, schnellen Code zu erstellen, indem sie langsame Maschinen bereitstellen . Aber in dieser Frage steckt ein Punkt. Mein Entwicklungscomputer ist schnell, und deshalb schreibe ich gelegentlich Code, der beunruhigend ineffizient ist. Dies wird jedoch erst deutlich, wenn er auf Computern anderer ausgeführt wird.

Was sind einige gute Möglichkeiten, um eine turbogeladene Entwicklungsmaschine vorübergehend zu verlangsamen? Der Begriff "Geschwindigkeit" umfasst mehrere Faktoren, zum Beispiel:

  • CPU-Taktfrequenz.
  • Anzahl der CPU-Kerne.
  • Arbeitsspeicher und Prozessor-Cache.
  • Geschwindigkeit verschiedener Busse.
  • Festplatten-E / A.
  • GPU.
  • etc.
Joonas Pulakka
quelle
34
Drücken Sie die "Turbo-Taste" ... nein, warten Sie.
LennyProgrammers
6
Hier ist die Wurzel Ihres Problems: "Störend ineffizient". ändere deine Codierungsgewohnheit
Darknight
16
@ Darknight: Nein, das ist es nicht. Sie müssen es zuerst richtig machen, dann schnell, wenn nötig . Um zu wissen, was zu optimieren ist, müssen Sie den problematischen Teil testen und herausfinden. Die Dinge so schnell wie möglich in erster Linie ist Verschwendung von Ihrer Zeit - und wahrscheinlich Verschwendung es richtig zu machen .
Joonas Pulakka
1
Nun, ich stimme teilweise zu. Allerdings, wenn Sie eine effiziente Gewohnheit haben, mit dem Programmieren zu beginnen; Wenn Sie es dann "richtig machen", können Sie später weniger Zeit damit verbringen, es "schneller zu machen".
Darknight
4
@ Darknight: Ich denke, @Joonas stellt eine sehr vernünftige Frage. Die Idee, dass nur "Ändern Sie Ihre Codierungsgewohnheit" ausreicht, ist nicht realistisch. Hier ein Beispiel: ( stackoverflow.com/questions/926266/… ) UND die Idee, dass Sie es einfach auf einem langsameren Computer ohne IDE zeitlich festlegen können, geht davon aus, dass dies ausreicht, um Leistungsfehler zu finden. Viele Leute reden über Profilieren, aber tun es (erfolgreich) ist eine andere Sache. Was mir (und anderen meiner Meinung nach) wirklich helfen würde, ist das, wonach Joonas fragt.
Mike Dunlavey

Antworten:

39

Führen Sie Ihre Tests in einer virtuellen Maschine mit begrenztem Arbeitsspeicher und nur einem Kern aus.

Die alten Maschinen, die die Leute vielleicht noch haben, sind hauptsächlich Pentium 4-Ära-Dinge. Das ist nicht so unrealistisch - ich benutze gerade selbst eine. Single-Core-Leistung auf vielen aktuellen PCs ist normalerweise nicht so viel besser und kann schlechter sein. Die RAM-Leistung ist in vielerlei Hinsicht wichtiger als die CPU-Leistung. Wenn Sie die Leistung etwas strenger einschränken als bei einem alten P4 mit 1 GB, können Sie dies ein wenig ausgleichen.

Andernfalls kaufen Sie ein Netbook, wenn Sie bereit sind, ein bisschen Geld auszugeben. Führen Sie die Tests dazu durch.

Steve314
quelle
1
Oder einen älteren Laptop.
Das Problem bei virtuellen Maschinen ist, dass keine von ihnen (AFAIK) den IEEE 1394 (Firewire) -Port unterstützt. Einige meiner Software verwenden Kameras, die mit Firewire verbunden sind, also ...
Joonas Pulakka
Mit den echten können Sie der VM ein beliebiges PCI-Gerät zuweisen
Javier
3
Könnte ein Job für Xen sein - die virtuelle Maschine hat keinen Host-O / S, ist aber die oberste Ebene für sich. Hat eine lange Unix-Geschichte, kann aber jetzt proprietäre Betriebssysteme unterstützen. Aber ich habe es nie benutzt und weiß nicht, wie viel Kontrolle Sie über die Leistung und die Ressourcen einer bestimmten VM haben können.
Steve314
1
+1 Eine VM ist hochgradig anpassbar und bietet genau die Umgebung, nach der Sie zum Testen suchen. Ich benutze VMWare selbst zu diesem Zweck.
Gary Rowe
11

Die Möglichkeit, signifikante Ineffizienz von Algorithmen zu erkennen, besteht darin, Ihr Code-Profil zu erstellen. Um eine Überlastung des Arbeitsspeichers abzufangen, müssen Sie zunächst verstehen, wie viel Arbeitsspeicher Ihr Ziel verwendet, und dann entsprechend entwerfen und regelmäßig in dieser Umgebung testen.

Wenn Sie Thread-Code schreiben, hilft das Testen auf mehreren Computern mit unterschiedlichen CPU-Geschwindigkeiten dabei, bestimmte zeitbezogene Fehler in Ihrer Thread-Behandlung hervorzuheben, aber ein aggressives Testen der Thread-Logik in Einheiten ist ein Muss.

Michael Shaw
quelle
1
Nein, die Profilerstellung erkennt keine algorithmische Ineffizienz. Es zeigt Ihnen, wo das Programm seine Zeit verbringt, wenn Sie es beschleunigen müssen, aber nicht, wenn Sie es beschleunigen müssen.
David Thornley
Ich denke, ich vermisse die Unterscheidung hier. Wenn Sie meinen, dass die Profilerstellung Ihnen nicht sagt, WENN Sie nicht optimal sind, nur wo Sie Ihre CPU-Zyklen verbringen, dann stimme ich zu. Das erfordert Erfahrung, um dieses Urteil zu fällen.
Michael Shaw
4
@David Thornley & @Ptolemy: Ich denke, Algorithmus-Ineffizienz oder Code-Hotspots spielen beim Kernproblem eine untergeordnete Rolle: "Ist es zu langsam oder nicht?" Es ist subjektiv, aber es ist auch die wichtigste Frage. Wenn es sich in der Praxis nicht langsam anfühlt, was ist dann, wenn Ihr Algorithmus ineffizient ist? Es tut was es tun muss! Oder wenn sich das Programm trotz optimaler Algorithmen zu langsam anfühlt, müssen Sie möglicherweise den Ansatz (Architektur? Programmiersprache? Etwas!) Insgesamt ändern.
Hochoptimale
1
Verwenden Sie zum Testen Datensätze mit progressiver Größe, um die Ineffizienz von Algorithmen aufzudecken.
Rwong
10

Alles, was Sie tun, um Ihre Maschine zu verlangsamen, wäre wahrscheinlich ein Hack.

Hier einige Vorschläge:

  • Verwenden Sie virtuelle Maschinen
  • Profilieren Sie den Code auf Ihrem Computer und suchen Sie nach Engpässen
  • Verwenden Sie eine alte Maschine für "Leistungstests"
Jason
quelle
@matt was bedeutet das?
Johnny
1
@johnny: Ich meine, ich stehe kurz vor dem Voting, weil Jason vorgeschlagen hat, die Anwendung zu profilieren, wodurch hoffentlich die Quelle von Performance-Engpässen gefunden würde, ohne auf ein langsameres System umsteigen zu müssen.
Matt Ellen
4

Erkenne, dass dies eine ziemlich alte Frage ist, aber für alle anderen in dieser Situation; Sie könnten CPUKiller versuchen. Im Grunde ist es eine kleine App, die Sie so konfigurieren können, dass sie verschiedene% s Ihres Prozessors verbraucht. http://www.cpukiller.com/

Dave
quelle