当前处理器/运行时的 SIMD 能力探测结果。所有的探测值都在类型初始化阶段 计算一次并被缓存下来,之后的查询都是常量时间的字段读取。
SimdCapabilities
00 Remarks
这个类型只做能力读取,不做任何分派决策;决定实际计算路径的策略集中在 SIMDEnvironment.IsEnabled 与各个内核实现之中。
01 Syntax
Microsoft.VisualBasic.Math.SIMD.SimdCapabilities
02 Methods
| Name | Overloads | Summary |
|---|---|---|
| VectorSize | 1 | 针对类型 T 的一个向量寄存器可以容纳的元素个数。 |
| IsVectorizable | 1 | 针对类型 T 是否值得走向量化路径(宽度大于 1 且硬件已加速)。 |
| VectorSize | 1 | |
| IsVectorizable | 1 |
03 Fields
| Name | Overloads | Summary |
|---|---|---|
| IsHardwareAccelerated | 2 | Vector.IsHardwareAccelerated,既 Vector 的运算是否由硬件加速。在 JIT 无法使用硬件向量时会返回 False(此时 Vector 会退化为软件实现,通常比纯标量更慢)。 |
| Architecture | 2 | 当前进程的处理器架构,例如 X64 / Arm64。 |
| IsSse2 | 2 | SSE2 支持(x86/x64 上的向量化基线)。 |
| IsSse42 | 2 | SSE4.2 支持。 |
| IsAvx | 2 | AVX 支持(256 位浮点向量)。 |
| IsAvx2 | 2 | AVX2 才具有整数类型的 256 位理论吞吐;对 Double 而言 与 SimdCapabilities.IsAvx 等价。 |
| IsFma | 2 | FMA(Fused Multiply-Add)融合乘加指令支持。开启之后 a * b + c 可以在一条指令内完成,是点积/平方和类运算的主要加速点。 |
| IsAdvSimd | 2 | ARM Advanced SIMD(NEON)支持。 |
| countDouble | 2 | Vector(Of Double).Count,即一个向量寄存器可以容纳的 Double 个数。 |
| countFloat | 2 | Vector(Of Single).Count |
| countInteger | 2 | Vector(Of Integer).Count |
| countLong | 2 | Vector(Of Long).Count |
| countShort | 2 | Vector(Of Short).Count |
| Description | 2 | 人类可读的能力描述,主要用于基准测试与诊断日志输出。 |
04 Members
VectorSize``1
针对类型 T 的一个向量寄存器可以容纳的元素个数。
IsVectorizable``1
针对类型 T 是否值得走向量化路径(宽度大于 1 且硬件已加速)。
IsHardwareAccelerated
Architecture
当前进程的处理器架构,例如 X64 / Arm64。
IsSse2
SSE2 支持(x86/x64 上的向量化基线)。
IsSse42
SSE4.2 支持。
IsAvx
AVX 支持(256 位浮点向量)。
IsAvx2
AVX2 才具有整数类型的 256 位理论吞吐;对 Double 而言 与 SimdCapabilities.IsAvx 等价。
IsFma
FMA(Fused Multiply-Add)融合乘加指令支持。开启之后 a * b + c 可以在一条指令内完成,是点积/平方和类运算的主要加速点。
IsAdvSimd
ARM Advanced SIMD(NEON)支持。
countDouble
Vector(Of Double).Count,即一个向量寄存器可以容纳的 Double 个数。
countFloat
Vector(Of Single).Count
countInteger
Vector(Of Integer).Count
countLong
Vector(Of Long).Count
countShort
Vector(Of Short).Count
Description
人类可读的能力描述,主要用于基准测试与诊断日志输出。
IsHardwareAccelerated
Architecture
IsSse2
IsSse42
IsAvx
IsAvx2
IsFma
IsAdvSimd
countDouble
countFloat
countInteger
countLong
countShort
Description
VectorSize()
IsVectorizable()