simd - 电源上的 SIMD 扩展:编译器标志和处理器支持
问题描述
我正在研究将 SIMD 之上的通用抽象库移植到电源架构中。
但是,关于哪些扩展支持哪些功能以及如何编译到它们的信息令人困惑。目前只关注 64 位处理器并且不超过 power-7。
一方面我看到了这个文件。
指令有 3 种类型:无要求、需要 8 次方和需要 9 次方。
例如vec_cmpgt
没有特殊要求。
但是,当我使用时,powerpc64-linux-gnu-g++-10
我看到一个错误:
error: '__builtin_altivec_vcmpgtsd' requires the '-mpower8-vector' option
在其他一些地方,我可以找到有关vmx
和vsx
扩展的信息,但也不清楚对应于哪些功率迭代。例如,这里谈到了 power-7 上的 vsx。
UPD:我错过了 64 位整数比较仅在 power8 上可用,但其他人在此之前。
解决方案
有一些资源可以帮助您完成任务。
首先,CPU 中可供您使用的实际底层向量指令因 CPU 版本而异。这些都记录在 ISA 中。为了:
- Power7,这是Power ISA v2.06 (pdf)
- Power8,这是Power ISA v2.07
- Power9,这是Power ISA v3.0
这些都是海量的 PDF,告诉你很多事情,包括矢量指令的细节。如果您在汇编程序中编写代码,则可以直接使用它们。
然后,您注意到支持的编译器内在函数可能因编译器而异:您从对 google 非常友好的 AIX XL C 编译器手册中找到了一个参考,发现它不适用于 gcc。
所以你会想花一些美好的时间在:
- 一般关于矢量扩展的 gcc 手册页
- PowerPC vector builtins上的页面- 有助于将其分解为 <= 2.05、2.06、2.07 和 3.0 的子页面。
Power 具有额外的复杂性,即支持具有许多不同名称的不同类型的向量扩展。VSX有很好的 解说员吗?VMX?阿尔特韦克?虚拟现实?VSR?!这些 PowerPC SIMD 首字母缩略词如何相互关联?
推荐阅读
- windows - 使用下面的 PowerShell 脚本,如何检查 SSL 证书的有效性?
- android - 元数据中android:value的使用——Android
- c++ - 如何使用al_draw_bitmap_region?
- python - 使用 python 在 XML 文件中获取唯一的项目对
- php - PHP PDO 在执行带参数的准备好的语句时返回 false
- javascript - 使用 async/await 仍然返回 undefined
- python - Python concurrent.futures.ThreadPoolExecutor max_workers
- c++ - *min-heap* 的良好 C++ 数据结构实现,增加 *hash table*
- vhdl - 在 VHDL 中为模块创建“初始化”和“结束”信号
- ruby - 如何正确使用 Google::Apis::SheetsV4::BatchUpdateSpreadsheetRequest 对象?