【问题标题】:Swift performance - efficient calculation of boolean logical operationsSwift 性能 - 布尔逻辑运算的高效计算
【发布时间】: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


    【解决方案1】:

    一位好心的苹果工程师在这里发布了这个问题的答案:https://developer.apple.com/forums/thread/719117?answerId=734789022#734789022

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      相关资源
      最近更新 更多