0
我有以下需要移植到Visual Studio 2008的代码。它计算处理器在一微秒内完成的计算处理器速度的周期数:如何将处理器速度的汇编代码移植到Visual Studio 2008
typedef unsigned long long TProcessorClockTicks;
inline TProcessorClockTicks readProcessorTimeStamp()
{
# if defined(_ARCH_linux_24_i86) || \
defined(_ARCH_linux_26_i86) || \
defined(_ARCH_cygwin) || \
defined(_ARCH_freebsd_61_i86)
TProcessorClockTicks x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x/1000;
# elif defined(_ARCH_sol2)
return (TProcessorClockTicks) ::gethrtime();
# else
# error Must define _ARCH_??? preprocessor macro to build \
this code!
# endif
}
typedef unsigned long long TProcMHz;
inline
TProcMHz
measureProcessorSpeedMHz()
{
// Get the number of the processor clock cycles in a microsecond which should
// be the processor clock speed in MHz.
::usleep(1); // Put a sleep before to ensure accurate measurement.
TProcessorClockTicks before = readProcessorTimeStamp();
::usleep(1);
TProcessorClockTicks after = readProcessorTimeStamp();
return (TProcMHz) (after - before);
}
什么是替代readProcessorTimeStamp()正文?
TProcessorClockTicks x;
__asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
return x/1000;
我不认为这是行得通的。此外,:: gethrtime返回纳秒,而不是时钟滴答声,因此无论时钟速度如何,代码大小写都会返回相同的结果。 – TJD
你确实意识到这种方法不准确?睡眠/睡眠不会完全按照指定的时间量睡,只是一个近似值。如果您想在Windows上获得准确的信息,请考虑使用WMI Win32_Processor类(请参阅http://msdn.microsoft.com/zh-cn/library/aa394373(VS.85).aspx)。 –
目前我并不太在意它的准确程度,只是希望它在球场停放并移植。 – WilliamKF