nuget server logo nuget api documents
↑

API Docs / Microsoft.VisualBasic.Runtime / SimdExtensions

SimdExtensions

Full name Microsoft.VisualBasic.Math.SIMD.SimdExtensions Assembly Microsoft.VisualBasic.Runtime Members 47

面向数组的 SIMD 加速扩展方法门面。

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

NameOverloadsSummary
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 向量除以标量
SimdMatrixAdd 1 矩阵逐元素相加,等价于 SimdMatrix.Add())。
SimdMatrixSubtract 1 矩阵逐元素相减。
SimdMatrixMultiply 1 矩阵逐元素相乘。
SimdMatrixDivideZeroSafe 1 矩阵逐元素相除(分子为零则结果置零)。
SimdMatrixScale 1 数乘矩阵。
SimdMatrixTranspose 1 矩阵转置(分块)。
SimdMatrixDot 1 矩阵乘积 A * B(行方向并行 + 行内 FMA 点积)。

03 Members

method SimdSum #
SimdSum(Double())

向量求和:SUM(v)

method SimdSum overload 2 #
SimdSum(Single())

向量求和:SUM(v)

method SimdSumSquares #
SimdSumSquares(Double())

平方和:SUM(v(i) ^ 2)

method SimdMean #
SimdMean(Double())

均值:SUM(v) / N

method SimdMean overload 2 #
SimdMean(Single())

均值:SUM(v) / N

method SimdMin #
SimdMin(Double())

最小值

method SimdMax #
SimdMax(Double())

最大值

method SimdMax overload 2 #
SimdMax(Single())

最大值(Single)

method SimdDot #
SimdDot(Double(), Double())

点积:SUM(v1(i) * v2(i)),处理器支持 FMA 时会自动使用融合乘加。

method SimdDot overload 2 #
SimdDot(Single(), Single())

点积:SUM(v1(i) * v2(i))

method SimdL1Norm #
SimdL1Norm(Double())

L1 范数:SUM(|v(i)|)

method SimdL2Norm #
SimdL2Norm(Double())

L2 范数(欧几里得范数):SQRT(SUM(v(i) ^ 2))

method SimdAbs #
SimdAbs(Double())

逐元素绝对值

method SimdAbs overload 3 #
SimdAbs(Single())

逐元素绝对值(Single)

method SimdAbs overload 2 #
SimdAbs(Int32())

逐元素绝对值(Int32)

method SimdNegate #
SimdNegate(Double())

逐元素取负

method SimdNegate overload 2 #
SimdNegate(Int64())

逐元素取负(Int64)

method SimdSquare #
SimdSquare(Double())

逐元素平方

method SimdSqrt #
SimdSqrt(Double())

逐元素平方根

method SimdSqrt overload 2 #
SimdSqrt(Single())

逐元素平方根(Single)

method SimdReciprocal #
SimdReciprocal(Double())

逐元素倒数

method SimdClamp #
SimdClamp(Double(), Double, Double)

逐元素区间钳制

method SimdAdd #
SimdAdd(Double(), Double())

逐元素相加

method SimdAdd overload 5 #
SimdAdd(Single(), Single())

逐元素相加(Single)

method SimdAdd overload 3 #
SimdAdd(Int32(), Int32())

逐元素相加(Int32)

method SimdAdd overload 4 #
SimdAdd(Int64(), Int64())

逐元素相加(Int64)

method SimdAdd overload 2 #
SimdAdd(Int16(), Int16())

逐元素相加(Int16)

method SimdSubtract #
SimdSubtract(Double(), Double())

逐元素相减

method SimdSubtract overload 3 #
SimdSubtract(Int32(), Int32())

逐元素相减(Int32)

method SimdSubtract overload 4 #
SimdSubtract(Int64(), Int64())

逐元素相减(Int64)

method SimdSubtract overload 2 #
SimdSubtract(Int16(), Int16())

逐元素相减(Int16)

method SimdMultiply #
SimdMultiply(Double(), Double())

逐元素相乘

method SimdMultiply overload 5 #
SimdMultiply(Single(), Single())

逐元素相乘(Single)

method SimdMultiply overload 3 #
SimdMultiply(Int32(), Int32())

逐元素相乘(Int32)

method SimdMultiply overload 4 #
SimdMultiply(Int64(), Int64())

逐元素相乘(Int64)

method SimdMultiply overload 2 #
SimdMultiply(Int16(), Int16())

逐元素相乘(Int16)

method SimdDivide #
SimdDivide(Double(), Double())

逐元素相除

method SimdAddScalar #
SimdAddScalar(Double(), Double)

向量加标量

method SimdMultiplyScalar #
SimdMultiplyScalar(Double(), Double)

向量乘标量

method SimdDivideScalar #
SimdDivideScalar(Double(), Double)

向量除以标量

method SimdMatrixAdd #
SimdMatrixAdd(Double()(), Double()())

矩阵逐元素相加,等价于 SimdMatrix.Add()。

method SimdMatrixSubtract #
SimdMatrixSubtract(Double()(), Double()())

矩阵逐元素相减。

method SimdMatrixMultiply #
SimdMatrixMultiply(Double()(), Double()())

矩阵逐元素相乘。

method SimdMatrixDivideZeroSafe #
SimdMatrixDivideZeroSafe(Double()(), Double()())

矩阵逐元素相除(分子为零则结果置零)。

method SimdMatrixScale #
SimdMatrixScale(Double()(), Double)

数乘矩阵。

method SimdMatrixTranspose #
SimdMatrixTranspose(Double()())

矩阵转置(分块)。

method SimdMatrixDot #
SimdMatrixDot(Double()(), Double()())

矩阵乘积 A * B(行方向并行 + 行内 FMA 点积)。