問題タブ [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.
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) が報告されます。