【发布时间】:2013-06-10 13:22:29
【问题描述】:
我正在使用 Eigen 库 在 iPad 2 上进行一些计算。(即 cortex-a9)。似乎有些操作是使用 NEON 指令矢量化的,而有些则不是。
我尝试过的向量化操作:点积、向量和矩阵的加法和减法。
未矢量化的运算:矩阵乘法。
我在同一个项目和同一个文件中使用这些操作,所以编译器选项是相同的。我正在使用-O3 -mcpu=cortex-a9 -mfpu=neon -mfloat-abi=softfp。
我使用的所有矩阵都有动态大小。有什么我做错了,还是这是预期的行为?
谢谢。
【问题讨论】:
-
您得出的结论是,一些操作是矢量化的,而另一些不是?检查代码? GCC 和 Clang 都为 Cortex A 系列部件上配备 NEON 的 FP 单元的浮点运算发出霓虹灯指令。另外,你确定你真的想要
-mfloat-abi-softfp用于 iOS 吗?这在 Linux 领域很常见,人们喜欢构建与许多不同 ARM 架构版本兼容的软件——但运行时会受到严重的惩罚。 Apple 选择了胖二进制文件。 -
我正在使用 Xcode Instruments 来检查汇编代码。对于点积,我看到一堆
vadd和vmov,但不是矩阵乘法。此外,点积比 OpenCV 函数有很大的改进(大约 50%),但矩阵乘法没有。