問題タブ [cpu-cycles]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
116 参照

c - 端末からプログラムを実行すると、clock_gettime の実行に時間がかかります

コードのスニペットの時間を測定しようとしていたところ、gnome ターミナルで起動した bash シェルから実行した場合と比較して、エディター QtCreator 内からプログラムを実行した場合の方がタイミングが約 50ns 速いことに気付きました。OSはUbuntu20.04を使用しています。

私の問題を再現するための小さなプログラム:

QtCreator 内から実行した場合の出力

そして、ターミナル内のシェルから実行する場合:

私が試したものの違いはありませんでした

  • QtCreator にターミナルでプログラムを開始させる
  • clock_gettime の代わりに rdtsc および rdtscp 呼び出しを使用する (実行時の相対的な違いは同じ)
  • で実行してターミナルから環境をクリアするenv -i
  • bash の代わりに sh を使用してプログラムを起動する

すべてのケースで同じバイナリが呼び出されることを確認しました。すべての場合において、プログラムの nice 値が 0 であることを確認しました。

質問

シェルからプログラムを起動すると違いが生じるのはなぜですか? 何を試すべきかについての提案はありますか?

アップデート

  • main の先頭に sleep(1) 呼び出しを追加すると、QtCreator と gnome-terminal/bash の両方の呼び出しで実行時間が長くなることが報告されます。

  • main の先頭に system("ps -H") 呼び出しを追加し、前述の sleep(1) を削除すると、両方の呼び出しで短い実行時間 (~20 ns) が報告されます。