ios - 来自 Accelerate 的 tanh 与 C 中的 tanh

标签 ios c accelerate-framework

我刚刚看到 Accelerate 框架有这个: 我有一个执行大量 tanh 计算的函数。

void vvatanh ( double *, const double *, const int * ); https://developer.apple.com/library/ios/documentation/Performance/Conceptual/vecLib/#//apple_ref/c/func/vvatanh

与 C 代码中的 tanh 相比,这是否更快? http://www.tutorialspoint.com/c_standard_library/c_function_tanh.htm

最佳答案

注意:您的问题和我原来的回答有一些错别字。要执行 tanh,您的意思是 vvtanh,而不是 vvatanh(或我最初写的 vatanh)。 vv 表示“vector ”(技术上来自 vForce 库。vvatanh 是 vector 基双曲正切。)

首先,显而易见的一点:如果 vvtanh 普遍比 tanh 更快/更好,那么 tanh 将简单地实现为vvtanh。两者都存在的事实强烈表明它们有不同的目的或权衡。正如其他人所说,分析很重要,但仅靠分析并不总是足够的。您需要了解这些函数的使用方式,否则您的分析会告诉您 Accelerate 出奇地慢且毫无用处。

Accelerate 中的 vector 函数旨在同时高效地处理大型数字 vector (数组)。为了使它们有用,您必须正确地构建数据。在单个值上调用 vector 函数通常会比非 vector 形式慢,因为 vector 形式内部必然有某种迭代逻辑。编译器和标准库总是可以免费使用 vector 处理器(并且这样做);您不应该认为 Accelerate 可以访问其他地方无法获得的任何神奇的快速指令。区别在于使用的算法,而不是 vector 处理器本身。

因此,如果您有一大组排列在 C 数组中的数字,并且需要一次对它们全部计算 tanh,那么 vvtanh 可能是一个不错的选择工具,你应该分析它。如果不出意外,您可以节省迭代 tanh 的函数调用开销(前提是它不是内联的)。

如果您的问题不是以这种方式构建的,那么您应该尝试重新设计您的数据结构和算法,以便可以以这种方式构建问题。矢量化的大部分用途是以正确的形式获取数据,然后进行单个函数调用。

如果您不能以这种方式构建数据,并且您将被迫多次调用 vvtanh,那么几乎肯定是失败的,而更简单的 tanh会更好。

关于ios - 来自 Accelerate 的 tanh 与 C 中的 tanh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776774/

相关文章:

ios - 在Xcode 4.5中执行分析后,iOS应用程序内存泄漏

ios - 快速获取字典中选定键的值

ios - Swift 5 ABI 稳定性如何影响支持 iOS 11 的 iOS 应用程序?

c 文件中内联汇编代码的编译错误,可能与分支有关

c - 二维数组中的指针

cocoa - 模拟苹果的drawInRect : for offscreen pixel buffers

c++ - 不能在 iOS C++ 代码中包含 Accelerate Header

ios - 如何向iOS View 中某种类型的所有 subview 发送消息?

c - 我如何影响函数的地址?

ios - 加速框架 "sign"函数