不同架构的无内部函数的矢量化



我已经为SSE/AVX/AVX2/AVX512做了相当多的优化,最终得到了一些修改版本的";vectorclass";。现在我面临着移植到苹果M1的问题。我只在那里使用";分类内在性";当需要时(当LLVM很难弄清楚时(。但在这里,我现在可以使用一些AVX的包装器->NEON,或者我在想。。。使用这样的结构怎么样:

struct FLOAT4x
{
float X1, X2, X3, X4;
void operator +=(const FLOAT4x& x) { X1 += x.X1; X2 += x.X2; X3 += x.X3; X4 += x.X4; };
};
FLOAT4x vec1, vec2;
vec1 += vec2;

人们是否可以相信这样的想法,即由于这些操作对于LLVM来说是很好地对齐的;理解它可以被矢量化";,它会那样做吗?由于SIMD处理在所有平台上几乎都是相同的,因此它将非常有助于开发,并降低出错的可能性。

听起来你想要类似SIMDe或类似的东西。一个试图提供通用SIMD解决方案的库,然后可以适应每个特定的解决方案。

LLVM优化会随着每个版本的变化而变化——通常会有所改进,但这确实意味着无法做出保证,而且不同的SIMD解决方案具有不同的命令等,因此不会有一个";最好的";在所有情况下为自动矢量化构建事物的方法。会有像霓虹灯这样的最佳实践(还有更多的链接(,这会有所帮助。短的简单循环、连续对齐的内存等

最新更新