面向数组的 SIMD 加速扩展方法门面。
SimdExtensions
00 Remarks
为什么方法名都带 Simd 前缀:这个模块会被大量 Imports Microsoft.VisualBasic.Math.SIMD 的文件引用,如果直接扩展 Sum / Min / Max 这些名字,就会与 Microsoft.VisualBasic.Linq 以及 Linq 中的同名扩展 产生二义性编译错误。加前缀之后既保留了链式调用的可读性,又不会污染既有代码。
所有方法都会在数据规模足够大时自动切换到 SimdParallel 的分块并行路径,调用方不需要关心这个细节。
01 Syntax
Microsoft.VisualBasic.Math.SIMD.SimdExtensions
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| SimdSum | 2 | 向量求和:SUM(v) |
| SimdSumSquares | 1 | 平方和:SUM(v(i) ^ 2) |
| SimdMean | 2 | 均值:SUM(v) / N |
| SimdMin | 1 | 最小值 |
| SimdMax | 2 | 最大值 |
| SimdDot | 2 | 点积:SUM(v1(i) * v2(i)),处理器支持 FMA 时会自动使用融合乘加。 |
| SimdL1Norm | 1 | L1 范数:SUM(|v(i)|) |
| SimdL2Norm | 1 | L2 范数(欧几里得范数):SQRT(SUM(v(i) ^ 2)) |
| SimdAbs | 3 | 逐元素绝对值 |
| SimdNegate | 2 | 逐元素取负 |
| SimdSquare | 1 | 逐元素平方 |
| SimdSqrt | 2 | 逐元素平方根 |
| SimdReciprocal | 1 | 逐元素倒数 |
| SimdClamp | 1 | 逐元素区间钳制 |
| SimdAdd | 5 | 逐元素相加 |
| SimdSubtract | 4 | 逐元素相减 |
| SimdMultiply | 5 | 逐元素相乘 |
| SimdDivide | 1 | 逐元素相除 |
| SimdAddScalar | 1 | 向量加标量 |
| SimdMultiplyScalar | 1 | 向量乘标量 |
| SimdDivideScalar | 1 | 向量除以标量 |
03 Members
SimdSum(
Double())向量求和:SUM(v)
SimdSum(
Single())向量求和:SUM(v)
SimdSumSquares(
Double())平方和:SUM(v(i) ^ 2)
SimdMean(
Double())均值:SUM(v) / N
SimdMean(
Single())均值:SUM(v) / N
SimdMin(
Double())最小值
SimdMax(
Double())最大值
SimdMax(
Single())最大值(Single)
SimdDot(
Double(), Double())点积:SUM(v1(i) * v2(i)),处理器支持 FMA 时会自动使用融合乘加。
SimdDot(
Single(), Single())点积:SUM(v1(i) * v2(i))
SimdL1Norm(
Double())L1 范数:SUM(|v(i)|)
SimdL2Norm(
Double())L2 范数(欧几里得范数):SQRT(SUM(v(i) ^ 2))
SimdAbs(
Double())逐元素绝对值
SimdAbs(
Single())逐元素绝对值(Single)
SimdAbs(
Int32())逐元素绝对值(Int32)
SimdNegate(
Double())逐元素取负
SimdNegate(
Int64())逐元素取负(Int64)
SimdSquare(
Double())逐元素平方
SimdSqrt(
Double())逐元素平方根
SimdSqrt(
Single())逐元素平方根(Single)
SimdReciprocal(
Double())逐元素倒数
SimdClamp(
Double(), Double, Double)逐元素区间钳制
SimdAdd(
Double(), Double())逐元素相加
SimdAdd(
Single(), Single())逐元素相加(Single)
SimdAdd(
Int32(), Int32())逐元素相加(Int32)
SimdAdd(
Int64(), Int64())逐元素相加(Int64)
SimdAdd(
Int16(), Int16())逐元素相加(Int16)
SimdSubtract(
Double(), Double())逐元素相减
SimdSubtract(
Int32(), Int32())逐元素相减(Int32)
SimdSubtract(
Int64(), Int64())逐元素相减(Int64)
SimdSubtract(
Int16(), Int16())逐元素相减(Int16)
SimdMultiply(
Double(), Double())逐元素相乘
SimdMultiply(
Single(), Single())逐元素相乘(Single)
SimdMultiply(
Int32(), Int32())逐元素相乘(Int32)
SimdMultiply(
Int64(), Int64())逐元素相乘(Int64)
SimdMultiply(
Int16(), Int16())逐元素相乘(Int16)
SimdDivide(
Double(), Double())逐元素相除
SimdAddScalar(
Double(), Double)向量加标量
SimdMultiplyScalar(
Double(), Double)向量乘标量
SimdDivideScalar(
Double(), Double)向量除以标量