iphone上的加速框架
Posted
技术标签:
【中文标题】iphone上的加速框架【英文标题】:Accelerate framework on iphone 【发布时间】:2012-03-18 08:16:13 【问题描述】:如果我想对向量做一些代数或计算 ffts,Accelerate 框架很好。 但是,除非我遗漏了某些东西,否则如果我想计算向量中值的余弦(或任何其他三角函数),则无法通过加速来做到这一点。此外,vecLib 在 iphone 上被标记为不可用,而 vDSP 缺少平方根、对数、三角函数等内容...
我真的正确吗? o_O
如果我是,如何加快这些缺失函数的计算并利用加速正在使用的设施?
答案:
正如 MrMage 在下面所说,Accelerate 中有一个 vv...
系列函数。这些包括三角、对数、根等。但不支持复数。谢谢MrMage!
【问题讨论】:
我仍然希望有人在这里帮助我,但同时我会尝试eigen 并报告。 似乎最新XCode使用的gcc 4.2无法使用Eigen优势(矢量化)的加速部分......当然,归咎于Apple。最新的 gcc 是 4.7.0。 Gcc 4.2 是过去的客人 - 2007 年 5 月 13 日发布...将不得不寻找改变编译器的方法。 最新的 Xcode 根本不使用 gcc,它提供了 llvm 编译器。 嗯,没错。在网上阅读了一些关于启用矢量化和 gcc4.2 的编译问题的材料后,我真诚地认为编译器是问题所在。好像前段时间有问题。它可以很好地与 llvm、xcode 4.3、ios 5 一起编译。在 mac 上,矢量化已启用并正在运行。但是,无法检查手机,因为刚刚将其升级到 ios 5.1,忘记了如何在医院中升级 xcode……幸运的是很快就会出院:D。 【参考方案1】:根据 iOS 5.1 文档,至少 vvsinf
(以及来自 vecLib 的类似函数)在 iOS 5.0 及更高版本中可用。我想这应该可以满足您的需求。
【讨论】:
是真的,不知道我怎么会错过那个...非常感谢!【参考方案2】:我对文档的阅读告诉我 Accelerate/vfp.h 存在于 iOS 上,并且 trig 函数在那里。但是我没有尝试使用它,所以我会继续假设我错了。
事实证明,快速触发的实现并不是很聪明。有一个数学东西叫做泰勒展开式,大致说来:
sin(theta+epsilon) = sin(theta) + x*epsilon + small corrections
这意味着您可以构建一个查找表,对于 theta 的键值,记录 sin(theta) 和 x。然后你做上面的方程,这真的很快(看看 Accelerate 的 Fused Add and Multiply)。
【讨论】:
至于vfp.h,不幸的是例如:extern vFloat vsinf(vFloat arg) __OSX_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_NA);
。注意 __IPHONE_NA 部分。至于您提出的解决方法,泰勒扩展正是我想要廉价逃脱的方法:)。不过,这是一个利用 vDSP 的可行解决方案。以上是关于iphone上的加速框架的主要内容,如果未能解决你的问题,请参考以下文章
iPad / iPhone 上的 FrameSet 和 HTML5 视频 - 视频超出框架?