RDTSC は、プログラムの実行サイクルをカウントする最も正確な方法です。スレッドがプリエンプトされたかどうかが重要な時間スケールで実行パフォーマンスを測定する場合は、おそらくプロファイラー (たとえば、VTune) を使用することをお勧めします。
CLOCKS_PER_SECOND/clock() は、オーバーヘッドがほとんどない RDTSC と比較して、時間を取得するための非常に悪い (パフォーマンスの低い) 方法です。
RDTSC に特定の問題がある場合は、私がお手伝いできるかもしれません。
re: コメント
Intel Performance Counter Monitor : これは主に、メモリ帯域幅、電力使用量、PCIe 使用率など、プロセッサの外部のメトリックを測定するためのものです。また、たまたま CPU 周波数を測定することもありますが、通常、プロセッサに依存するアプリケーションのパフォーマンスには役立ちません。
RDTSCの移植性: RDTSC は、最新のすべての Intel CPU でサポートされている Intel CPU 命令です。最新の CPU では、CPU のアンコア周波数に基づいており、CPU コア全体で多少似ていますが、アプリケーションが頻繁に異なるコア (特に異なるソケット) にプリエンプトされる場合は適切ではありません。その場合は、本当にプロファイラーを見たいと思うでしょう。
Out of order Execution : はい、順不同で実行されるため、パフォーマンスにわずかに影響する可能性がありますが、それでも命令の実行には時間がかかり、RDTSC はその時間を測定する最良の方法です。これは、同じコアで非 IO バウンド命令を実行するという通常のユースケースに優れており、これが本来の使用方法です。より複雑なユースケースがある場合は、実際には別のツールを使用する必要がありますが、プログラム実行の分析に rdtsc() が非常に役立つ可能性があることを否定するものではありません。