首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_mm_sfence对__faststorefence

_mm_sfence对__faststorefence
EN

Stack Overflow用户
提问于 2012-09-06 21:50:47
回答 2查看 1.5K关注 0票数 3

根据MSDN文档,__faststorefence_mm_sfence快。在我的时间里,它比我慢三倍多。

平台:Win7 7-64,Visual 2010与x64 SDK。

代码语言:javascript
复制
#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;
}

结果:

  • _mm_sfence平均数: 5.7
  • __faststorefence平均数: 18.37

__faststorefence生成lock or DWORD PTR [rsp], ebp,ebp已被修改为零,而_mm_sfence生成sfence (不足为奇)

快速仓库栅栏显式地声明它比_mm_sfence更快,所以要么我的测试错了,要么他们错了。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2014-06-07 15:59:15

我用提供的基准测试过的AMD处理器显示__faststorefence是赢家。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2015-03-20 22:55:31

您不能将__fasstorefence (完全栅栏)与_mm_sfence (商店围栏)进行比较。

你需要比较__fasstorefence (全栅栏)和_mm_mfence (m满栅栏).

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12308916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档