2012-01-26 5 views
0

私はclock_getresとclock_gettimeでCLOCK_MONOTONICクロックを使ってプログラムの一部を測定しようとしています。clock_getresとclock_gettime

私が正しく理解していれば、clock_gettimeは何らかの外部クロック(CPUではなく)を計測して時間を得て、paramerとして参照されるstruct timespecインスタンスでそれを更新します(つまり、

私が知る必要があるのは実際の時間ではなく、クロック(CLOCK_MONOTONIC)のサイクル数です。

どうすればいいですか?それはclock_getresと関係するかもしれませんが、正確にどのように動作するのか理解できませんでした。

サイクル数を取得する方法を知っている人はいますか?

答えて

0

Clock_gettimeは、エポック(またはあなたのプラットフォーム上の特定の実装に応じて過去の他の固定時間)と選択されたクロックの現在の時刻(あなたの場合はCLOCK_MONOTONIC)の間の経過時間を取得します。

プロセスの所要時間を測定するには、プロセスを2回呼び出してその差を計算する必要があります。何かのように:それはないですが、

#include <stdio.h> 
#include <intrin.h> 

#pragma intrinsic(__rdtsc) 

int main() 
{ 
    unsigned __int64 i; 
    i = __rdtsc(); 
    printf_s("%I64d ticks\n", i); 
} 
+0

おかげ:あなたはCPUサイクルを知りたい場合は

int main() { timespec start, finish; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); //code you want to profile clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &finish); //calculate the difference between start and finish return 0; } 

ノート

が、これは、あなたの時間の価値を与えるだろう、あなたはRDTSCのようなものを使用する必要があります私が尋ねたもの私はCLOCK_MONOTONICのサイクル数を得る方法を理解していません。または、clock_getresは何ですか?それは私にそのクロックの周波数を与えますか? – kakush

+0

CLOCK_MONOTONIC doesn;サイクル情報を教えてください。クロック情報が表示されます。代わりにrdtscを試してみてください(intrin.h)。 clock_getresは、使用しているプラ​​ットフォームに依存する、指定されたクロックの解像度を示すだけです。 – StevieG

+4

ほとんどのコンピュータが今日は可変速度で動作しているので、サイクル数は必要ありません(省電力機能)。 clock_getresは測定可能な最小時間デルタを取得します(理論的には、これは実際には1 /周波数になる可能性が高く、実際にはわかりませんがPOSIXは不明です) –

関連する問題