【问题标题】:Sum array of unsigned 8-bit integers using the Accelerate framework使用 Accelerate 框架对无符号 8 位整数数组求和
【发布时间】:2011-04-06 13:54:49
【问题描述】:

我是否可以使用 Accelerate Framework 对无符号 8 位整数数组求和,而不转换为浮点数数组。

我目前的做法是:

vDSP_vfltu8(intArray, 1, floatArray, 1, size);
vDSP_sve(floatArray, 1, &result, size);

但是 vDSP_vfltu8 很慢。

【问题讨论】:

  • 不久前我想自己做同样的事情,但我没有找到使用 vDSP 功能的明显方法。向量向量整数加法是 vDSP 中缺少的操作之一,可能是因为溢出问题。也许这里讨论的一些 Neon 内在函数对 iOS 有帮助:stackoverflow.com/questions/3675538/… 或 Mac 上的 SSE 内在函数。
  • 我也在考虑溢出问题。感谢您对 Neon 内在函数(有趣的东西)的建议,但我更愿意编写与处理器无关的代码......无论如何通过探索这条路我认为我会发现未在 vDSP 中实现的原因 :-) 我想这不是一个可以通过某种解决方法解决的微不足道的问题。

标签: iphone cocoa ios accelerate-framework


【解决方案1】:
  1. 如果vDSP_vfltu8( ) 快速对您很重要,请提交错误报告。如果有任何问题,请提交错误报告。性能不足一个错误,如果您报告它,将被视为错误。图书馆作者使用这种反馈来确定如何优先考虑他们的工作;您的错误报告是处于优化队列前面的函数与队列中的 #1937 之间的区别。
  2. 正如已经暗示的那样,整数累加会因溢出问题而变得复杂,但如果为 vDSP 库提供的特定情况提供优化函数会很有用,请提交错误报告到请求这样的功能(注意到一个模式?)。图书馆作者不是通灵者,也不会编写不需要的功能。请务必说明您将如何使用此类功能 - 鉴于此信息,他们可能会提出一个对您更有用的稍微不同的功能。
  3. 如果您决定自己编写一些 NEON 代码,您将需要使用 vaddw_u8( ) 内在函数。

【讨论】:

  • 我不知道从整数到浮点的转换会很快。据我所知,他们无论如何都在使用特定于平台的加速内在函数,所以我怀疑它可以做得更快。不过,其他是提交增强请求的有效点。
  • @Brad Larson:它是否可以做得很快,问一下也无妨。如果它已经尽可能快了,那么错误将被简单地关闭,不会造成任何伤害。如果可以进一步改进,有人会看一看,你的代码会变得更快。潜在收益,没有负面影响?归档错误。始终提交错误。
  • 对于它的价值,看看有问题的函数的反汇编,它肯定可以显着更快。所以真的:提交错误。
  • 优秀的分数,会的。检查输出程序集的好主意。
  • 关于对 vDSP 库进行任何更改的任何消息?根据我的经验,Apple 通常会忽略错误报告,所以我猜不会。能够添加 8 位整数的向量(在 iOS 音频中非常非常常见)会非常有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
相关资源
最近更新 更多