怎么使用SSE提升性能呢
如何使用SSE提升性能呢?
看了很多SSE的指令还是有很多规矩
例如向量的叉乘,SSE没有提供,用SSE也难实现
公式: (UyVz - UzVy),-(UxVz - UzVx),(UxVy - UyVx)
四元数就更难实现了




SSE是不是一块鸡肋呢?
------解决方案--------------------
SSE = Streaming SIMD Extension. 这东西最大优势是流式处理大量数据,而不是优化单次运算。看看Intel文档就知道了。
特定匀速可以用SSE进行单次运算的优化,但主要还是矢量化后流式处理。如果你有一个所有a的数组和一个所有t的数字,那一个SSE单精度乘法就可以算出四个at。
------解决方案--------------------
我想说至少你这个运算矢量化流式处理一点问题没有。
SSE是个偏向RISC的东西,除非能大规模提升效率的功能,否则基本上是不会加的
------解决方案--------------------
我发现你完全没搞明白什么是矢量化...
如果你要算一堆a和一堆t的积at,常规算法是一个循环挨个算,矢量化是一次把几个a放入一个SIMD寄存器,把对应的几个t放入另一个SIMD寄存器然后进行运算。
而对于你的这种复杂运算的处理是矢量化计算里面的简单运算,也就是分别矢量化计算at,-bx,-cy,-dz,at - bx,cy + dz,(at - bx) + (cy + dz)。这个根本不需要高级指令。
另外现在的SSE是支持点乘的,可以简化一点上面的步骤。
另外矢量化运算寄存器不够用需要多次循环的时候注意内存优化。
看了很多SSE的指令还是有很多规矩
例如向量的叉乘,SSE没有提供,用SSE也难实现
公式: (UyVz - UzVy),-(UxVz - UzVx),(UxVy - UyVx)
四元数就更难实现了
SSE是不是一块鸡肋呢?
------解决方案--------------------
SSE = Streaming SIMD Extension. 这东西最大优势是流式处理大量数据,而不是优化单次运算。看看Intel文档就知道了。
特定匀速可以用SSE进行单次运算的优化,但主要还是矢量化后流式处理。如果你有一个所有a的数组和一个所有t的数字,那一个SSE单精度乘法就可以算出四个at。
------解决方案--------------------
我想说至少你这个运算矢量化流式处理一点问题没有。
SSE是个偏向RISC的东西,除非能大规模提升效率的功能,否则基本上是不会加的
------解决方案--------------------
我发现你完全没搞明白什么是矢量化...
如果你要算一堆a和一堆t的积at,常规算法是一个循环挨个算,矢量化是一次把几个a放入一个SIMD寄存器,把对应的几个t放入另一个SIMD寄存器然后进行运算。
而对于你的这种复杂运算的处理是矢量化计算里面的简单运算,也就是分别矢量化计算at,-bx,-cy,-dz,at - bx,cy + dz,(at - bx) + (cy + dz)。这个根本不需要高级指令。
另外现在的SSE是支持点乘的,可以简化一点上面的步骤。
另外矢量化运算寄存器不够用需要多次循环的时候注意内存优化。