用途:优化 .NET 8+ 中热路径的标量循环。先用 Span<T> 和 MemoryExtensions 判断;若可覆盖则直接使用,无需额外依赖。再用 TensorPrimitives 判断:若方法覆盖该操作,则在 .csproj 添加 System.Numerics.Tensors 后替换标量循环,例如 <PackageReference Include="System.Numerics.Tensors" />;不要为此手写 Vector128 代码。
主要能力:资料列出 TensorPrimitives 的归约(Sum、Min、Max、Dot、CosineSimilarity、Distance 等)、逐元素变换(Abs、Sqrt、Exp、Log、Sigmoid、SoftMax 等)、双跨度运算(Add、Multiply、Min、Max 等)与三跨度融合运算(AddMultiply、MultiplyAdd、FusedMultiplyAdd);并说明其泛型约束差异,如 Sum 适用于全部基元数值类型,CosineSimilarity 仅 float/double。
手动 SIMD:当 TensorPrimitives 无对应单一 API 时,使用 System.Runtime.Intrinsics 的 Vector128/Vector256/Vector512,需引入 System.Runtime.CompilerServices、System.Runtime.InteropServices、System.Runtime.Intrinsics。采用三档分发模式:Vector512、Vector256、Vector128 依次用 if/else if 判断 IsHardwareAccelerated 与 IsSupported,末尾保留标量回退;不要把标量代码删除。优先可移植 API,仅在收益显著时用平台特定内部函数(X86、Arm)。
常见模式:无符号范围检查(byte 区间校验)、半字节查表计数(字符类、popcount)、跨类型转换(byte→short→int→float 加宽;int→short→byte 用 Min/Max 饱和后 Narrow)。尾部处理:幂等操作可重叠最后一向量;聚合用标量循环;存储操作用 ConditionalSelect 合并。
限制与规则:保留原方法签名做替换;显式使用 Vector128<T>/Vector256<T>/Vector512<T>,不用 Vector<T>;无连续数值数组可处理(字典查找、树遍历、链表、状态机、字符串格式化、小集合、枚举比较、递归、decimal 运算)时应报告 [NO SIMD OPPORTUNITY] 并说明原因;测试用 dotnet run,不用 dotnet test(xunit.v3 为进程内运行器)。收费、价格、平台与效果资料暂未提供。