SSEのパフォーマンスを測定するためにオンラインで採用しました。このクロックダンプはIntel i3に適していますか?
#ifndef __TIMER_H__
#define __TIMER_H__
#pragma warning (push)
#pragma warning (disable : 4035) // disable no return value warning
__forceinline unsigned int GetPentiumTimer()
{
__asm
{
xor eax,eax // VC won't realize that eax is modified w/out this
// instruction to modify the val.
// Problem shows up in release mode builds
_emit 0x0F // Pentium high-freq counter to edx;eax
_emit 0x31 // only care about low 32 bits in eax
xor edx,edx // so VC gets that edx is modified
}
}
#pragma warning (pop)
#endif
私のペンティアムD E2200 CPUで測定したところ、うまくいきました(整列したSSE命令がより速いことを示しています)。 しかし私のi3 CPUでは、アライメントの合っていない命令がテストの70%高速化されています。
あなたはこのクロックティックの測定値がi3 CPUに適していないと思いますか?
私は、VCがインラインasmで 'RDTSC'命令をサポートしていることは確かです。また、上位32ビットについて気にしないでください。 '__declspec(naked)'を使用するか、さらに適切な方法で値を返すべきです。私は['QueryPerformanceCounter'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904/(v = vs.85 \))を使いたいと思っています。aspx)またはそれに類する機能(周波数スケーリング/マルチコアプロセッサなどの問題に注意してください)。 – user786653
RDTSCはシリアル化命令ではなく、順不同で実行できます。直接使用することを主張する場合は、通常、CPUIDを使用してシリアル化を強制します(これは、ユーザーモードで実行できる少数のシリアル化命令の1つです)。 –
私はQueryPerformanceCounterも持っています。結果によってはあまり信頼できません。 n×n行列乗算の場合、n = 10000以上、時間はわずか0.3秒かかりますか?私はそれがまったく正確ではないと思っています(コンソールでは結果を見るのに2秒以上かかります)ので、私は時計ティックに向いています。 私は今RDTSCを試してみるつもりです。ありがとう。 – CppLearner