欢迎光临
我们一直在努力

一个违反直觉的结果:我的 SoA 比 AoS 更慢

一个违反直觉的结果:我的 SoA 比 AoS 更慢

学习性能优化的人,几乎都会接触到一个经典结论:

AoS 不利于 Cache。

SoA 更适合 SIMD。

SoA 通常比 AoS 更快。

因此,当我最近准备写一个 SIMD Benchmark 时,我理所当然地认为结果应该是:

AoS < SoA < AVX2

换句话说:

AoS 最慢。

SoA 更快。

AVX2 最快。

然而实验结果却让我愣住了。

测试结果如下:

AoS Update : 3.18 ms

SoA Update : 4.28 ms

AVX2 Update : 1.48 ms

最令人意外的不是 AVX2。

而是:

SoA 居然比 AoS 更慢。


测试内容

测试的数据结构非常简单。

AoS:

struct ParticleAoS {


float x;
float y;
float z;

float vx;
float vy;
float vz;
};

更新逻辑:

particles[i].x += particles[i].vx * dt;
particles[i].y += particles[i].vy * dt;
particles

赞(0)
未经允许不得转载:171主机测评 » 一个违反直觉的结果:我的 SoA 比 AoS 更慢
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址