2016-04-18 16 views
1

私はclock()の独自のバージョンをasmとrdtscを使って実装しようとしています。しかし、私はその戻り値については確信が持てません。それはサイクルですか? Oderはマイクロ秒ですか? 私はCLOCKS_PER_SECについても混乱しています。どのようにこれを一定にすることができますか?Clock、rdtsc、CLOCKS_PER_SEC

これらの値を関係式に設定する式はありますか?

+1

:「の初めからプロセスで使用されるおおよそのプロセッサ時間を返しプログラムの実行に関連する実装定義の時代です。結果の値を秒に変換するには、CLOCKS_PER_SECで除算します。それはそれです。関数が返す正確な単位は、実装次第です。 –

+0

clock()関数を書いたプログラマーのコラボレーションだけでは、式は取られません。彼はそれがどのように動作するかを知っているので、CLOCKS_PER_SECの#defineも書くことができます。 rdtscの単位は「ティック」で、マシンごとに異なります。あなたが知っている良い時計に対してそれを較正しない限り、ティックがどれくらいの時間を取るかを知ることはできません。クロック()と同じです。 –

+0

プログラマがPOSIXに従おうとしていると仮定すると... –

答えて

1

あなたはここでRDTSCのリファレンス実装を見つけることができます。

https://github.com/LITMUS-RT/liblitmus/blob/master/arch/x86/include/asm/cycles.h

TSCは、リセット以降のサイクル数をカウントします。秒単位の時間値が必要な場合は、CPUクロック周波数を読み取り、TSC値を周波数で除算する必要もあります。ただし、CPUの周波数スケーリングが有効な場合、これは正確ではありません。 【この `clock`参照](http://en.cppreference.com/w/c/chrono/clock)から

https://en.wikipedia.org/wiki/Time_Stamp_Counter

関連する問題