다음 코드는 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
이 방법이 정확하지 않다는 것을 알고 있습니까? sleep/usleep은 지정된 시간만큼 정확하게 잠을 자지 못합니다. 윈도우에 대한 정확한 정보를 원하면 WMI Win32_Processor 클래스 사용을 고려하십시오 (http://msdn.microsoft.com/en-us/library/aa394373(VS.85).aspx 참조). –
그 순간 나는 그것이 얼마나 정확하고 공의 공원에 있기를 원했던가에 대해 너무 걱정하지 않습니다. – WilliamKF