[解決済み] プログラムの実行を遅くする
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 を購入し、プログラムを実行することができます。
お役に立てれば幸いです。
関連
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み] 全ユーザーのcronジョブを一覧表示する方法を教えてください。
-
[解決済み] grep --exclude/--include構文を使って特定のファイルをgrepしないようにする
-
[解決済み] Python の open() はファイルが存在しない場合、ファイルを作成しない
-
[解決済み] アプリケーションやプロセスの実際のメモリ使用量を測定するにはどうすればよいですか?
-
[解決済み] プログラムがクラッシュしたときにスタックトレースを自動的に生成する方法
-
[解決済み】画像処理。コカ・コーラ缶」認識のためのアルゴリズム改良
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] to_string は std のメンバーではない、と g++ が言っている (mingw)
-
[解決済み】'std::cout'への未定義の参照