最近、CPUスケーリングの効果を測定しようとしています。この時計で測ったら正確ですか?
template<std::intmax_t clock_freq>
struct rdtsc_clock {
typedef unsigned long long rep;
typedef std::ratio<1, clock_freq> period;
typedef std::chrono::duration<rep, period> duration;
typedef std::chrono::time_point<rdtsc_clock> time_point;
static const bool is_steady = true;
static time_point now() noexcept
{
unsigned lo, hi;
asm volatile("rdtsc" : "=a" (lo), "=d" (hi));
return time_point(duration(static_cast<rep>(hi) << 32 | lo));
}
};
更新:
私の別の投稿のコメントによると、 redtsc からのカウンターは CPU 周波数の影響を受けないため、redtsc は CPU 周波数スケーリングの効果を測定するために使用できないと思います。