我听说有英特尔在线书籍描述了特定汇编指令所需的CPU周期,但我无法找到它(经过努力).有人能告诉我如何找到CPU周期吗?
下面是一个例子,在下面的代码中,mov/lock是1个CPU周期,xchg是3个CPU周期.
// This part is Platform dependent!
#ifdef WIN32
inline int CPP_SpinLock::TestAndSet(int* pTargetAddress,
int nValue)
{
__asm
{
mov edx, dword ptr [pTargetAddress]
mov eax, nValue
lock xchg eax, dword ptr [edx]
}
// mov = 1 CPU cycle
// lock = 1 CPU cycle
// xchg = 3 CPU cycles
}
#endif // WIN32
Run Code Online (Sandbox Code Playgroud)
顺便说一句:这是我发布的代码的URL:http://www.codeproject.com/KB/threads/spinlocks.aspx
C++摘要
使用#pragma intrinsic代码预处理器部分中的命令将大大提高大多数数学函数调用的速度.
#pragma intrinsic(sqrt, pow)
Run Code Online (Sandbox Code Playgroud)
上面的代码允许大多数数学函数调用直接发送到数学协处理器而不是发送到函数堆栈.
题
有没有办法在C#中做到这一点?除了重写内置函数以做类似的事情.例如,通常使用2的幂,所以这是合适的,但它不是我想要的:
public double Pow2(double value)
{
return (value * value);
}
Run Code Online (Sandbox Code Playgroud)