【发布时间】:2022-11-03 16:59:27
【问题描述】:
我需要使用大型 Double 和 Boolean 数组/向量并对它们应用简单的操作。例如。 Doubles 上的加法、减法、乘法、更小、更大等,Bool 上的 AND、OR、NOT 等。
虽然我从Accelerate 中发现vDSP 对于简单的算术运算非常有效,但较大/较小以及逻辑运算非常慢,这可能与我使用 map 函数来应用这些的事实有关.
有没有更好的方法可以更有效地做到这一点?
请参阅下面的一些代码示例:
import Accelerate
let myDoubleArray1: [Double] = Array<Double>(repeating: 1.123, count: 1000000)
let myDoubleArray2: [Double] = Array<Double>(repeating: 2.123, count: 1000000)
let myBoolArray1: [Bool] = Array<Bool>(repeating: false, count: 1000000)
let myBoolArray2: [Bool] = Array<Bool>(repeating: true, count: 1000000)
_ = vDSP.multiply(myDoubleArray1, myDoubleArray2) // Takes about 0.5sec - very good
_ = zip(myDoubleArray1, myDoubleArray2).map {$0 > $1} // Takes about 7sec - too slow
_ = zip(myBoolArray1, myBoolArray2).map {$0 && $1} // Takes about 7sec - too slow
_ = zip(myBoolArray1, myBoolArray2).map {$0 == $1} // Takes about 7sec - too slow
_ = myBoolArray1.map {!$0} // Takes about 7sec - too slow
【问题讨论】:
标签: arrays swift performance accelerate