根据MSDN文档,__faststorefence比_mm_sfence快。在我的时间里,它比我慢三倍多。
平台:Win7 7-64,Visual 2010与x64 SDK。
#include <windows.h>
#include <xmmintrin.h>
#include <intrin.h>
int main(int argc, char* argv[])
{
int* x = new int;
__int64 loops = 1000000000; // 1 billion
__int64 start, elapsed;
start = __rdtsc();
for (__int64 i = 0; i < loops; i++)
{
*x = 0;
_mm_sfence();
}
elapsed = __rdtsc() - start;
std::cout << "_mm_sfence: " << elapsed << std::endl
<< "average : " << double(elapsed) / double(loops) << std::endl;
start = __rdtsc();
for(__int64 i = 0; i < loops; i++)
{
*x = 0;
__faststorefence();
}
elapsed = __rdtsc() - start;
std::cout << "__faststorefence: " << elapsed << std::endl
<< average : " << double(elapsed) / double(loops) << std::end;
}结果:
__faststorefence生成lock or DWORD PTR [rsp], ebp,ebp已被修改为零,而_mm_sfence生成sfence (不足为奇)
快速仓库栅栏显式地声明它比_mm_sfence更快,所以要么我的测试错了,要么他们错了。有什么想法吗?
发布于 2014-06-07 15:59:15
我用提供的基准测试过的AMD处理器显示__faststorefence是赢家。
Intel - _mm_sfence: 8.61, __faststorefence: 21.60
AMD 1 - _mm_sfence: 138.21, __faststorefence: 90.96
AMD 2 - _mm_sfence: 55.21, __faststorefence: 20.08这是在VS 2013。
_mm_sfence =篱笆
__faststorefence =锁或dword ptr,esi
发布于 2015-03-20 22:55:31
您不能将__fasstorefence (完全栅栏)与_mm_sfence (商店围栏)进行比较。
你需要比较__fasstorefence (全栅栏)和_mm_mfence (m满栅栏).
https://stackoverflow.com/questions/12308916
复制相似问题