首页 > 解决方案 > 电源上的 SIMD 扩展:编译器标志和处理器支持

问题描述

我正在研究将 SIMD 之上的通用抽象库移植到电源架构中。

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

一方面我看到了这个文件

指令有 3 种类型:无要求、需要 8 次方和需要 9 次方。

例如vec_cmpgt没有特殊要求。

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

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

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

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

标签: simdpowerpcaltivec

解决方案


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

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

这些都是海量的 PDF,告诉你很多事情,包括矢量指令的细节。如果您在汇编程序中编写代码,则可以直接使用它们。

然后,您注意到支持的编译器内在函数可能因编译器而异:您从对 google 非常友好的 AIX XL C 编译器手册中找到了一个参考,发现它不适用于 gcc。

所以你会想花一些美好的时间在:

Power 具有额外的复杂性,即支持具有许多不同名称的不同类型的向量扩展。VSX有很好的 解说员吗?VMX?阿尔特韦克?虚拟现实?VSR?!这些 PowerPC SIMD 首字母缩略词如何相互关联?


推荐阅读