1. ホーム
  2. c++

[解決済み] プログラムの実行を遅くする

2022-11-14 10:23:34

質問

Linux で OS のパラメータを変更して、C++ プログラムをより遅く実行する方法はありますか?この方法で、その特定のプログラムが実際に遅いマシンで実行された場合に何が起こるかをシミュレートしたいと思います。

言い換えれば、より速いマシンは、その特定のプログラムに対してより遅いマシンとして動作するはずです。

どのように解決するのですか?

  • 優先度を下げるには nice (および/または renice ). また、プログラム的に nice() システムコールを使ってプログラム的に行うこともできます。これによって実行速度が遅くなることはありませんが、Linux スケジューラが割り当てる実行時間枠が少なくなり(短くなり)、より頻繁に先取りするようになるなどします。以下を参照してください。 Linuxカーネルを理解する」のプロセススケジューリング(第10章) を参照してください。
  • あなたは、次のようにしたいと思うかもしれません。 タイマ割り込みの頻度を上げる を実行してカーネルに負荷をかけると、今度はすべてが遅くなります。このため、カーネルの再構築が必要です。
  • を使用することができます。 CPU 周波数スケーリング メカニズム (カーネルモジュールが必要) を使用して、CPU を制御 (速度を落とす、速くする) します。 cpufreq-set コマンドを使用します。
  • もう一つの可能性は sched_yield() を呼び出すことで、プログラムのパフォーマンス上重要な部分において、他のプロセスに量子を渡すことができます(コードの変更が必要)。
  • のような一般的な関数をフックすることができます。 malloc() , free() , clock_gettime() などを使用して LD_PRELOAD で数百万 CPU サイクルを消費させるような愚かなことをします。 rep; hop; で数百万 CPU サイクルを消費したり、メモリバリヤを挿入するなど、馬鹿げたことをします。これは確実にプログラムの速度を低下させます。(参照 この回答 を参照してください)。
  • Bill が述べたように、割り当てられた CPU リソースやメモリなどの量を制限することができる仮想化ソフトウェアで常に Linux を実行できます。
  • プログラムを本当に遅くしたいのであれば、以下の環境で実行してください。 Valgrind で実行します (メモリリーク、不正なメモリ参照など、アプリケーションのいくつかの問題を見つけるのにも役立つかもしれません)。
  • 最適化を無効にしてバイナリを再コンパイルすることで、ある程度の遅さを実現することができます (すなわち -O0 で再コンパイルし、アサーションを有効にする (つまり -DDEBUG ).
  • いつでも古い PC や安いネットブック ( 一人一台のラップトップ のような、テストが終わったら子どもに寄付することをお忘れなく) の遅い CPU を購入し、プログラムを実行することができます。

お役に立てれば幸いです。