SuperAPI AI 工具集

vectorization

设计与创作

查看项目

更新于 10-16 00:05

技能介绍

用途:在 .NET 中设计、实现、优化和审查 SIMD 向量化代码,把标量循环改写为可移植且内存安全的向量化实现,并用测量结果证明其复杂度是值得的。

主要能力:提供决策规则与验证检查,指导选择最高层的适用 API(Span<T>、string 操作、TensorPrimitives、张量类型、LINQ 归约等),在确有必要时才进入手写 SIMD;新显式循环从 Vector128<T> 起步,仅在测量支持时增加更宽路径;跨平台操作优先,架构特定内在函数需用 IsSupported 保护并保留等价回退。

使用方式:先从仓库中确认标量实现与测试、目标框架与平台、构建与测试流程、代表性工作负载或基准;不要仅因某 API 存在就添加包。编写时先实现 Vector128<T> 与标量路径,按测量结果再考虑 Vector512<T>、Vector256<T>、可选 Vector<T>;每个宽度块自包含,含小输入专用处理与余数处理。加载存储优先用基于 span 的 Vector128.Create(span) 与 CopyTo,避免不必要的 unsafe。

适用场景:需要向量化标量循环、优化热点计算、审查 SIMD 代码正确性与内存安全性的 .NET 项目。

限制:固定宽度向量仅支持基元数值类型,不支持 char 或 bool,需用 MemoryMarshal.Cast 或 As 重解释;需处理空输入、短输入、重叠缓冲区、NaN、有符号零、溢出与字节序;Native 与 Estimate 操作仅在契约允许且测量支持时使用。测试需覆盖各宽度与标量回退,可用 DOTNET_EnableAVX2=0、DOTNET_EnableHWIntrinsic=0 强制路径,但这些设置不改变已编译为 ReadyToRun 或 AOT 的代码。基准建议用 BenchmarkDotNet 对比标量与各宽度路径。若无法运行某架构或回退配置,应明确说明未验证的路径。