SIMD 电源扩展:编译器标志和处理器支持

SIMD extensions on power: compiler flags and processor support

我正在研究在 SIMD 之上移植通用抽象库以支持架构。

但是,关于哪些扩展支持哪些功能以及如何编译它们的信息令人困惑。目前只关注 64 位处理器且不早于 power-7。

一方面我看到了这个document

有 3 种指令类型:无要求、要求 power-8 和要求 power-9。

例如vec_cmpgt没有特殊要求。

但是,当我使用 powerpc64-linux-gnu-g++-10 时,我看到一个错误:

error: '__builtin_altivec_vcmpgtsd' requires the '-mpower8-vector' option

在其他一些地方我可以找到有关 vmxvsx 扩展的信息,但也不清楚对应于哪些幂迭代。 例如 here 它谈论 power-7 上的 vsx。

UPD:我错过了 64 位整数比较仅在 power8 上可用,但其他人在此之前可用。

有一些资源可以帮助您完成任务。

首先,您可用的 CPU 中的实际底层向量指令因 CPU 版本而异。这些都记录在 ISA 中。对于:

这些都是海量 PDF,告诉您很多事情,包括矢量指令的详细信息。如果你用汇编写代码,你可以直接使用这些。

然后,您注意到受支持的编译器内部函数可能因编译器而异:您从非常google友好的 AIX XL C 编译器手册中获取了参考,但发现它没有在 gcc 上工作。

所以您想与以下人共度美好时光:

Power 具有额外的复杂性,它支持具有许多不同名称的不同类型的矢量扩展。有一个很好的解释器