【问题标题】:Accelerate: how do I add multiple vectors into an output vector of different size from the input vectors?加速:如何将多个向量添加到与输入向量不同大小的输出向量中?
【发布时间】:2014-10-04 13:23:44
【问题描述】:

我有四个向量,A、B、C、D,它们的长度为 1024 个 Double。然后我有我的输出向量 O,即 1792 Doubles 长,最初全为零。

我想将 A 添加到 O 中,以便在位置 0-1023 处将 A 添加 Double-for-Double

我想稍后对 B 256 Doubles 做同样的事情,所以将 B 添加到 O 中,以便 B 在位置 256-1279 添加 Double-for-Double

那么对于 C,位置 512-1535 也是如此

最后还是一样的 D,位置 768-1791

如何使用 Apple 的 Accelerate 框架做到这一点?我正在研究 vDSP_vaddD,但输出数组似乎必须具有相同的长度?

我正在尝试在 Swift 中表达这一点,如果我使用的是 Objective C,我希望我可以使用指针算法来表达我想要开始的输出数组中的哪个位置?

干杯

尼克

【问题讨论】:

    标签: ios cocoa-touch vector swift accelerate-framework


    【解决方案1】:
    O.withUnsafeMutableBufferPointer { (inout bufPtr : UnsafeMutableBufferPointer<Double>) -> Void in
        var ptr = bufPtr.baseAddress
        vaddD(A, 1, ptr, 1, ptr, 1, 1024)
        ptr += 256
        vaddD(B, 1, ptr, 1, ptr, 1, 1024)
        ptr += 256
        vaddD(C, 1, ptr, 1, ptr, 1, 1024)
        ptr += 256
        vaddD(D, 1, ptr, 1, ptr, 1, 1024)
    }
    

    我承认这看起来很难看,而且从 Swift 编译器都没有的意义上说是不安全的 运行时也不能检查数组边界,但到目前为止,这是唯一的解决方案 我能找到。

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2015-01-08
      相关资源
      最近更新 更多