Angenommen, ich habe ein Programm, das in einer bestimmten Zeit (z. B. drei Sekunden) läuft. Ich möchte dieses Programm so ausführen, dass es n-mal langsamer läuft (in der Befehlszeile angegeben). Wie würdest du es mit (oder besser, ohne) Änderungen am Programm erreichen?
Bitte beachten Sie, dass das Hinzufügen eines Schlafs am Ende keine Lösung ist. Das Programm muss langsamer laufen, nicht für die ersten drei Sekunden mit voller Geschwindigkeit laufen und dann für die verbleibende Zeit nichts tun. Auch die Verwendung von "nett" unter Unix ist keine gute Lösung. es wird langsamer laufen, wenn andere Prozesse den Prozessor fordern, aber mit voller Geschwindigkeit, wenn nichts gleichzeitig Prozessor benötigt.
Das ist eine Kuriositätsfrage. Nichts ernsthaftes damit zu tun. Tatsache ist, dass ich mich an Spiele vor 15-20 Jahren erinnere, die einfach zu schnell waren, um auf neuen Prozessoren zu spielen, weil sie mit der Prozessoruhr zeitlich abgestimmt waren. Du musst den Turbo ausschalten.
Nehmen wir an, das Programm ist ein C-kompiliertes Programm.
Eine Idee ist es, einen 'ptrace runner' zu schreiben. ptrace ist der Aufruf, mit dem Sie einen Debugger auf Plattformen wie Linux und Mac implementieren können.
Die Idee besteht darin, an das Programm anzuhängen und dann der Anwendung immer wieder zu sagen, dass sie eine Anweisung mit ptrace(PTACE_SINGLESTEP)
ausführen soll. Wenn das nicht langsam genug ist, können Sie zwischen jedem Aufruf von ptrace im Runner-Programm einen Ruhezustand hinzufügen.
Ich habe ein einfaches Beispiel auf meiner Linux-Box geschrieben, wie man einen Kindprozess mit SIGSTOP- und SIGCONT-Signalen verlangsamt:
%Vor% Keine Verlangsamung, wenn WAIT
gleich Null ist, andernfalls stoppt der Elternteil nach jedem RUN
Sekunden das Kind für WAIT
Sekunden.
Laufzeit Ergebnisse:
%Vor%Wenn Sie DTrace haben, können Sie die chill () -Funktion verwenden. Sie können diesen Chill an fast jeder Stelle in einer Benutzerlandanwendung und an mehreren Stellen einfügen. Es wurde schon früher verwendet, um Rennbedingungen zu replizieren, die auf langsameren Systemen zu finden sind.
Ich habe eine Anwendung in einer virtuellen Maschine unter Ubuntu ausgeführt. Es war sehr langsam. Sie können die Verwendung der virtuellen Maschine des Systems konfigurieren.
Sie könnten die Situation ein wenig weiter verschleiern, indem Sie eine virtuelle Maschine unter einer virtuellen Maschine unter einer virtuellen Maschine ausführen, ...
Tags und Links c performance