加速:如何将多个向量添加到输入向量的不同大小的输出向量中?

时间:2014-10-04 13:23:44

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

我有四个向量,A,B,C,D,长度为1024个双倍。然后我有我的输出向量O,即1792双长,最初都是零。

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

我想稍后对B 256双打进行同样的操作,所以将B添加到O中,以便在位置256-1279处将B添加为Double-for-Double

然后同样为C,位置512-1535

然后最终同样为D,位置768-1791

如何使用Apple的Accellerate框架实现这一目标?我正在研究vDSP_vaddD,但输出数组似乎必须具有相同的长度?

我试图在Swift中表达这一点,如果我使用的是Objective C,我希望我可以使用指针算术表达输出数组中我希望开始的位置?

干杯

的Nik

1 个答案:

答案 0 :(得分: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编译器这两个意义上都是不安全的 也没有运行时可以检查数组边界,但到目前为止这是唯一的解决方案 我能找到。