小编Wil*_*124的帖子

C#和SIMD:高和低加速。怎么了?

问题介绍

我正在尝试加快我正在编写的(2d)光线跟踪器的交集代码。我正在使用C#和System.Numerics库来提高SIMD指令的速度。

问题是我得到了奇怪的结果,屋顶加速和加速都很慢。我的问题是,为什么一个人过高而另一个人过低?

内容:

  • RayPack结构是一系列(不同的)射线,包装在System.Numerics的Vector中。
  • BoundingBoxPack和CirclePack结构是单个bb /圆圈,包装在System.Numerics的向量中。
  • 使用的CPU是i7-4710HQ(Haswell),带有SSE 4.2,AVX(2)和FMA(3)指令。
  • 在发布模式(64位)下运行。该项目在.Net Framework 472中运行。未设置其他选项。

尝试次数

我已经尝试查找某些操作是否受到正确支持(请注意:这些操作适用于c ++。https://fgiesen.wordpress.com/2016/04/03/sse-mind-the-gap/http://sci.tuomastonteri.fi/programming/sse),但似乎并非如此,因为我使用的笔记本电脑支持SSE 4.2。

在当前代码中,应用了以下更改:

  • 使用更正确的说明(例如,最小包装)。
  • 不使用float *向量指令(导致大量其他操作,请参见原始程序集)。

代码...摘要?

对于大量代码,我们深表歉意,但是我不确定如果没有大量代码,我们如何才能具体讨论这一点。

雷代码-> BoundingBox

public bool CollidesWith(Ray ray, out float t)
{
    // https://gamedev.stackexchange.com/questions/18436/most-efficient-aabb-vs-ray-collision-algorithms
    // r.dir is unit direction vector of ray
    float dirfracx = 1.0f / ray.direction.X;
    float dirfracy = 1.0f / ray.direction.Y;
    // lb is the corner of AABB with minimal coordinates - left bottom, rt is maximal corner
    // r.org is origin of …
Run Code Online (Sandbox Code Playgroud)

c# performance x86-64 simd avx

12
推荐指数
1
解决办法
217
查看次数

标签 统计

avx ×1

c# ×1

performance ×1

simd ×1

x86-64 ×1