Surge
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
标准差
辅助函数
辅助函数和运算符
参数
函数
就地函数
操作符
原地操作符
(数组)
abs
n/a
n/a
n/a
参数
函数
就地函数
操作符
原地操作符
(数组)
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