首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RyuJIT没有充分利用SIMD的本质

RyuJIT没有充分利用SIMD的本质
EN

Stack Overflow用户
提问于 2016-01-20 10:14:31
回答 1查看 1.6K关注 0票数 15

我正在运行一些使用C#的System.Numerics.Vector<T>代码,但据我所知,我并没有充分利用SIMD的本质。我在用更新1使用VisualStudioCommunity2015,我的clrjit.dll是v4.6.1063.1。

我正在运行一个Intel Corei5-3337U处理器,它实现了AVX指令集扩展。因此,我想,我应该能够在256位寄存器上执行大多数SIMD指令。例如,反汇编应该包含诸如vmovupsvmovupdvaddups等指令,Vector<float>.Count应该返回8,Vector<double>.Count应该是4,等等。但这不是我看到的。

相反,我的反汇编包含诸如movupsmovupdaddups等指令.以及以下代码:

代码语言:javascript
复制
WriteLine($"{Vector<byte>.Count} bytes per operation");
WriteLine($"{Vector<float>.Count} floats per operation");
WriteLine($"{Vector<int>.Count} ints per operation");
WriteLine($"{Vector<double>.Count} doubles per operation");

生产:

代码语言:javascript
复制
16 bytes per operation
4 floats per operation
4 ints per operation
2 doubles per operation

我哪里出问题了?要查看所有项目设置等,项目是可用的这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-20 11:00:05

你的处理器有点过时了,它的微观结构是常春藤桥。桑迪桥的“颠簸”,一种不改变建筑结构的特征缩小了。您的敌人是RyuJIT、dll.cpp、CILJit::getMaxIntrinsicSIMDVectorLength()函数中的代码:

代码语言:javascript
复制
if (((cpuCompileFlags & CORJIT_FLG_PREJIT) == 0) &&
    ((cpuCompileFlags & CORJIT_FLG_FEATURE_SIMD) != 0) &&
    ((cpuCompileFlags & CORJIT_FLG_USE_AVX2) != 0))
{
    static ConfigDWORD fEnableAVX;
    if (fEnableAVX.val(CLRConfig::EXTERNAL_EnableAVX) != 0)
    {
        return 32;
    }
}

注意CORJIT_FLG_USE_AVX2的使用。您的处理器还不支持AVX2,该扩展在Haswell中可用。下一个微结构是继常春藤桥之后,一个“滴答”。非常好的处理器,顺便说一句,像这一个这样的发现有一个很重要的原因。

这件事你只能去购物。为了获得灵感,您可以查看它在这个职位中生成的代码类型。

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

https://stackoverflow.com/questions/34897178

复制
相关文章

相似问题

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