我正在尝试使用 Accelerate 框架在 Swift 中进行矩阵乘法。使用了 vDSP_mmulD。这在 iPhone6、6 plus、iPad Air 模拟器(所有 64 位架构)中完美运行,但不适用于任何 32 位架构设备。 它看起来像 vDSP_mmulD 不被 32 位架构识别并且程序不构建。显示的错误消息是“使用未解析的标识符‘vDSP_mmulD’”还有其他人看到过这个错误吗?请让我知道你的想法。我正在使用 Xcode 6.1。 谢谢。
最佳答案
简单的解决方案:使用 cblas_dgemm
相反(也是 Accelerate 的一部分)。它至少和vDSP_mmulD
一样快在所有系统上,在某些系统上速度更快(在 iOS 8 和 Yosemite 中,vDSP_mmulD
实际上只是对 cblas_dgemm
的包装),它实际上应该在这里工作。
我怀疑您的 32 位模拟器构建失败;在i386上,vDSP_mmulD其实是一个围绕mmulD的宏,而Swift并不完全支持C语言宏。
注意:我怀疑您可能正在使用 3x3 或 4x4 矩阵,在这种情况下,Accelerate 例程都不是您真正想要的(它们针对更大的矩阵);你想要像 <simd/matrix.h>
中定义的那样的内联向量序列.不幸的是,Swift 不支持 SIMD 向量,所以这不是一个选项。此时你最好的选择可能是简单地写出元素计算,并报告一个错误以请求 Swift 支持 <simd/simd.h>
接口(interface)。
关于ios - 使用 Accelerate 框架 32 位与 64 位在 swift 中进行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519169/