2012-01-16 7 views
3

について私は私のコードに次の関数を使用しています:CPPでlinux:RDTSC

static __inline__ unsigned long long rdtsc(void){ 
    unsigned long long int x; 
    __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x)); 
    return x; 
} 

は最後の起動以降ティックのこの関数の戻り値の数をしていますか? この機能に関するドキュメントはどこにありますか?

+1

インテルのマニュアルを試しましたか? http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html –

+1

また、単純なWikipediaの検索でこれが得られます - http://en.wikipedia.org/wiki/ Time_Stamp_Counter – mattjgalloway

答えて

1

RDTSCは、最後のリセット以降のCPUサイクル数を取得します。wikipediaを参照してください。

インテル命令セット書巻より信頼できるソースとして2A & B:

プロセッサが単調タイムスタンプカウンタMSR クロックサイクル毎にインクリメントし、プロセッサがリセットされるたびに0にリセット。 タイムスタンプカウンタの動作の詳細については、 の詳細については、インテル®64およびIA-32 アーキテクチャソフトウェア開発者マニュアル、第3B巻の第16章の「タイムスタンプカウンタ」を参照してください。

サイドノート:実際のRTDSC命令ニーモニックを使用して、はるかに読みやすくして、バイトを発光しないでください。

+0

「.byte」のやり方にも驚きましたが、ここからは外されているようです - http://www.mcs.anl.gov/~kazutomo/rdtsc.html。なぜ彼らはそれが好きなのだろう? – mattjgalloway

+0

@mattjgalloway:古いインラインアセンブラは、ニーモニックを認識しなかったためインラインバイトエミッションが必要になることがありました。これは長らく前のことでしたが、読者を混乱させる以外の利点はありません – Necrolis

+0

Yeh 。 – mattjgalloway