gpt4 book ai didi

c++ - 您需要付出多少努力才能从使用 SSE 中获得 yield ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:38 25 4
gpt4 key购买 nike

案例一

假设你有一个小类(class):

class Point3D
{
private:
float x,y,z;
public:
operator+=()

...etc
};

Point3D &Point3D::operator+=(Point3D &other)
{
this->x += other.x;
this->y += other.y;
this->z += other.z;
}

简单地使用 SSE 会简单地使用一些内在函数来替换这些函数体。但是我们会期望这会产生很大的不同吗? MMX 曾经涉及昂贵的状态 cahnges IIRC,SSE 还是它们就像其他指令一样?即使没有直接的“使用 SSE”开销,将值移入 SSE 寄存器并再次退出真的会使速度更快吗?

案例二

相反,您正在使用较少基于 OO 的代码库。不是 Point3D 对象的数组/vector ,而是一个大的 float 数组:

float coordinateData[NUM_POINTS*3];

void add(int i,int j) //yes it's unsafe, no overlap check... example only
{
for (int x=0;x<3;++x)
{
coordinateData[i*3+x] += coordinateData[j*3+x];
}
}

在这里使用 SSE 怎么样?好点了吗?

总结

尝试使用 SSE 优化单个 vector 操作是否真的值得,还是它真的只在进行批量操作时才有值(value)?

最佳答案

通常,您需要采取额外的步骤才能充分利用 SSE(或任何其他 SIMD 架构):

  • 数据需要 16 字节对齐(理想情况下)

  • 数据需要连续

  • 您需要足够的数据才能使 SIMD 操作变得有值(value)

  • 您需要合并尽可能多的操作以降低加载/存储的成本

  • 您需要了解缓存/内存层次结构及其对性能的影响(例如,使用 strip 挖掘/平铺)

关于c++ - 您需要付出多少努力才能从使用 SSE 中获得 yield ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com