Surge 2.3.2

Surge 2.3.2

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新版本2021年1月
SPM支持SPM

MatttVincent Esche 维护。



Surge 2.3.2

  • Mattt 和 Vincent Esche

Surge

Build Status License CocoaPods platforms CocoaPods compatible Carthage compatible Swift Package Manager compatible

Surge是一个使用Accelerate框架提供高性能函数(如矩阵算术、数字信号处理和图像操作)的Swift库。

Accelerate暴露了现代CPU可用的SIMD指令,可以显著提高某些计算的性能。由于其相对不为人知和不方便的API,Accelerate并不常被开发人员使用,这真是一件遗憾的事情,因为许多应用程序可以从这些性能优化中得益。

Surge的目标是将Accelerate带人主流,使得对一组数字进行计算就像对一个单个元素进行计算一样简单(并且在大多数情况下几乎一样快)。

不过,请注意:Accelerate并不是万能的。在特定情况下,例如对小型数据集进行简单计算时,Accelerate可能不如常规算法高效。始终基准测试来确定每一种可能方法的性能特征。


Surge(以及Jounce)的名字感到好奇? Back in the mid 90's, Apple, IBM, and Motorola teamed up to create AltiVec (a.k.a the Velocity Engine), which provided a SIMD instruction set for the PowerPC architecture. When Apple made the switch to Intel CPUs, AltiVec was ported to the x86 architecture and renamed to Accelerate. The derivative of Accelerate (and second derivative of Velocity) is known as either jerk, jolt, surge, or lurch; if you take the derivative of surge, you get the jounce --- hence the name of this library and its parent organization.


安装

在Swift和Xcode的测试期间,基础设施和最佳实践准则尚不稳定。在此期间,您可以将Surge作为git子模块添加,将Surge.xcodeproj文件拖到您的Xcode项目中,并将Surge.framework作为您的目标依赖项添加。

Surge使用Swift 5。这意味着由于当前的二进制兼容性限制,您必须使用Swift 5编写代码。

许可协议

Surge遵循MIT许可协议。更多信息请参阅LICENSE文件。

Swift包管理器

要使用Swift包管理器,请将Surge添加到您的Package.swift文件中

let package = Package(
    name: "myproject",
    dependencies: [
        .package(url: "https://github.com/Jounce/Surge.git", .upToNextMajor(from: "2.3.2")),
    ],
    targets: [
        .target(
            name: "myproject",
            dependencies: ["Surge"]),
    ]
)

然后运行swift build

CocoaPods

要使用CocoaPods,请将Surge添加到您的Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '<Your Target Name>' do
    pod 'Surge', '~> 2.3.2'
end

然后运行pod install

Carthage

要使用Carthage,请将Surge添加到您的Cartfile

github "Jounce/Surge" ~> 2.3.2

然后运行carthage update,并在Carthage/Build/<platform>中使用框架。


使用方法

计算 Double 数组的和

import Surge

let n = [1.0, 2.0, 3.0, 4.0, 5.0]
let sum = Surge.sum(n) // 15.0

计算两个双精度浮点数的乘积

import Surge

let a = [1.0, 3.0, 5.0, 7.0]
let b = [2.0, 4.0, 6.0, 8.0]

let product = Surge.elmul(a, b) // [2.0, 12.0, 30.0, 56.0]

库存

一般算术操作

加法

加法函数和操作符
参数 函数 操作符 原地操作符
(数组, 数组) add .+ (中缀) .+= (中缀)
(数组, 标量) add + (中缀) += (中缀)
(矩阵, 矩阵) add + (中缀) += (中缀)
(矩阵, 标量) n/a n/a n/a
(向量, 向量) add + (中缀) += (中缀)
(向量, 标量) add + (中缀) += (中缀)

减法

减法函数与运算符
参数 函数 操作符 原地操作符
(数组, 数组) sub .-(中缀) .-=(中缀)
(数组, 标量) sub -(中缀) -=(中缀)
(矩阵, 矩阵) sub -(中缀) -=(中缀)
(矩阵, 标量) n/a n/a n/a
(向量, 向量) sub -(中缀) -=(中缀)
(向量, 标量) sub -(中缀) -=(中缀)

乘法

乘法函数与运算符
参数 函数 操作符 原地操作符
(数组, 数组) mul .*(中缀) .*=(中缀)
(数组, 标量) mul *(中缀) *=(中缀)
(矩阵, 矩阵) mul *(中缀) n/a
(矩阵,向量) mul *(中缀) n/a
(矩阵, 标量) mul *(中缀) n/a
(向量,矩阵) mul *(中缀) n/a
(向量, 标量) mul *(中缀) *=(中缀)
(标量,数组) mul *(中缀) n/a
(标量,矩阵) mul *(中缀) n/a
(标量,向量) mul *(中缀) n/a

逐元素乘法

逐元素乘法函数与运算符
参数 函数 操作符 原地操作符
(矩阵, 矩阵) elmul n/a n/a
(向量, 向量) elmul .*(中缀) .*=(中缀)

除法

除法函数与运算符
参数 函数 操作符 原地操作符
(数组, 数组) div ./(中缀) ./=(中缀)
(数组, 标量) div /(中缀) /=(中缀)
(矩阵, 矩阵) div /(中缀) n/a
(矩阵, 标量) n/a /(中缀) n/a
(向量, 标量) div /(中缀) /=(中缀)

逐元素除法

逐元素乘法函数与运算符
参数 函数 操作符 原地操作符
(向量, 向量) eldiv ./(中缀) ./=(中缀)

取模

取模函数与运算符
参数 函数 操作符 原地操作符
(数组, 数组) mod %.%(中缀) n/a
(数组, 标量) mod %(中缀) n/a

余数

余数函数及运算符
参数 函数 操作符 原地操作符
(数组, 数组) remainder n/a n/a
(数组, 标量) remainder n/a n/a

平方根

平方根函数及运算符
参数 函数 操作符 原地操作符
(数组) sqrt n/a n/a

求和

求和函数及运算符
参数 函数 操作符 原地操作符
(数组) sum n/a n/a
(矩阵) sum n/a n/a

点积

点积函数及运算符
参数 函数 操作符 原地操作符
(数组, 数组) dot (中缀) n/a
(向量, 向量) dot (中缀) n/a

距离

距离函数及运算符
参数 函数 操作符 原地操作符
(数组, 数组) dist n/a n/a
(向量, 向量) dist n/a n/a

平方距离

平方距离函数及运算符
参数 函数 操作符 原地操作符
(数组, 数组) distSq n/a n/a
(向量, 向量) distSq n/a n/a

幂(数学)

幂函数和算子
参数 函数 操作符 原地操作符
(数组, 数组) pow .**(前缀) .**=(前缀)
(数组, 标量) pow **(前缀) **=(前缀)
(矩阵, 标量) pow n/a n/a
(向量, 向量) pow n/a n/a

级联幂运算a ** b ** c == a ** (b ** c)

指数

指数函数和算子
参数 函数 操作符 原地操作符
(数组) exp n/a n/a
(矩阵) exp n/a n/a
(向量) exp n/a n/a

三角运算

三角函数和算子

正弦/余弦/正切

参数 函数 操作
(数组) sin 正弦
(数组) cos 余弦
(数组) tan 正切
(数组) sincos 正弦 & 余弦

反正弦/反余弦/反正切

参数 函数 操作
(数组) asin 反正弦
(数组) acosh 反余弦
(数组) atan 反正切

双曲正弦/余弦/正切

参数 函数 操作
(数组) sinh 双曲正弦
(数组) cosh 双曲余弦
(数组) tanh 双曲正切

反双曲正弦/余弦/正切

参数 函数 操作
(数组) asinh 反双曲正弦
(数组) acosh 反双曲余弦
(数组) atanh 反双曲正切

弧度 ↔ 度

参数 函数 操作
(数组) rad2deg 弧度 to
(数组) deg2rad to 弧度

指数函数

指数函数和算子
参数 函数 操作
(数组) exp 以e为底数的指数函数
(数组) exp2 以2为底数的指数函数

对数

指数函数和算子
参数 函数 操作
(数组) log 以e为底数的对数
(数组) log2 以2为底数的对数
(数组) log10 以10为底数的对数
(数组) logb 以b为底数的对数

统计操作

统计函数与算符

求和

参数 函数 操作
(数组) sum 求和
(数组) asum 绝对求和

最小/最大

参数 函数 操作
(数组) min 最小值
(数组) max 最大值

均值/方差

参数 函数 操作
(数组) mean 均值
(数组) meamg 幅度均值
(数组) measq 平方均值
(数组) variance 方差
(数组) std 标准差

辅助函数

辅助函数和运算符

舍入函数

参数 函数 操作
(数组) ceil 向上取整
(数组) floor 向下取整
(数组) round 四舍五入
(数组) trunc 整数截断

绝对值

参数 函数 就地函数 操作符 原地操作符
(数组) abs n/a n/a n/a

Signum函数

参数 函数 就地函数 操作符 原地操作符
(数组) copysign n/a n/a n/a

乘法逆元

参数 函数 就地函数 操作符 原地操作符
(数组) rec n/a n/a n/a

矩阵特定操作

矩阵特定函数与运算符

矩阵求逆

参数 函数 就地函数 操作符 原地操作符
(矩阵) inv n/a n/a n/a

矩阵转置

参数 函数 就地函数 操作符 原地操作符
(矩阵) transpose n/a (后缀) n/a

矩阵行列式

参数 函数 就地函数 操作符 原地操作符
(矩阵) det n/a n/a n/a

特征值分解

参数 函数 就地函数 操作符 原地操作符
(矩阵) eigenDecompose n/a n/a n/a

DSP-specific Operations

快速傅里叶变换函数及算子

快速傅里叶变换

参数 函数 就地函数 操作符 原地操作符
(数组) fft n/a n/a n/a

卷积

参数 函数 就地函数 操作符 原地操作符
(数组, 数组) conv n/a n/a n/a

相关函数

参数 函数 就地函数 操作符 原地操作符
(数组, 数组) xcorr n/a n/a n/a
(数组) xcorr n/a n/a n/a