如何将处理器速度的汇编代码移植到Visual Studio 2008
How to port assembly code for processor speed to 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;
您的代码假设::usleep(1)
休眠正好一微秒。我不知道在Linux机器上这是不是一个好的假设。在Windows中,这当然不是一个好的假设。至少,不能在用户模式下。
在Windows下,没有任何标准的微秒级计时器。对于标准API调用,您能做的最好的事情是1毫秒,甚至这也是可变的。为了获得对时钟速度的合理估计,您需要获得经过的时间以及经过的滴答数。
或者您可以在注册表中查询它。
相关文章:
- 如何使用Visual Studio 2008将字符串映射到函数?
- Visual Studio 2008 WriteFile
- Microsoft Visual Studio 2008,版本9.0.30739.1 SP,DLL构建错误
- 如何防止Visual Studio 2008 C编译器在发生某些错误时停止?
- upper_bound带有binary_function Visual Studio 2008错误
- 找不到 Visual Studio 2008 的生成工具(平台工具集 = 'v90')
- 如何自动增加Visual C 2008中的构建数量
- stdlib.h's random() on MS Visual Studio 2008
- 为什么Visual C++ 2008在我(不小心)使用布尔类型时没有抱怨
- Visual Studio 2008版本内部版本未装饰DLL导出
- Xerces Link error with Visual Studio 2008
- 如何将字符串值从C++返回到javascript(windows/Visual studio 2008)
- 默认参数值错误 [Visual C++ 2008 中的错误?
- 如何在 Visual C++ 2008 中使用组件对象模型
- Visual Studio 2008 64 位部署项目不会按预期部署 64 位 VC90 合并模块
- 如何将MFC应用程序项目添加到Visual C 2008中的Win32应用程序项目
- 这是Visual C++ 2008的编译器错误吗
- Visual Studio 2008 C++ 不会编译标头类中的更改
- std::find on std::vector< std::string > 在 Visual C++ 2008 中无法编译?
- 在Visual Studio 2008中使用WinCE7平台构建器为WinCE7创建Visual C++中的Winfor