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