提问人:user22782688 提问时间:11/10/2023 最后编辑:Useruser22782688 更新时间:11/12/2023 访问量:88
如何在C#中抽象Vector256<T<的逻辑以支持不同的硬件配置?
How can I abstract the logic of Vector256<T< in C# to support different hardware configurations?
问:
C# 中的矢量化通过 Vector 类工作。有不同大小的向量,如 Vector64/Vector128/Vector256。但是我该如何使用它们呢?我已经用 编写了一个 for 循环,但如果设备不支持此向量,我想回退到 或 。我该如何回退到那个位置。我是否缺少某种通用接口?我需要复制和粘贴每种大小的 Vector 的整个内容吗?Vector256<T>
Vector128<T>
Vector64<T>
IVector<T>
非常感谢
答:
3赞
dragon
11/10/2023
#1
这听起来可能很烦人,但目前使用的处理方法是实际上只是复制和粘贴您的矢量化循环,并分别替换为 和。确保从最高向量开始,然后向最低向量努力。
Microsoft实际上应该考虑一个将这些方法抽象出来的接口。使用新的静态抽象方法,这当然是可能的,但现在你必须坚持复制和粘贴。Vector256
Vector128
Vector64
IVector<T>
评论
1赞
harold
11/10/2023
它通常行不通。只有当代码相同时,编写长度泛型代码才有意义,但这通常不是它的工作方式。众所周知,AVX2 由于这个原因而升级到 AVX2 很烦人。
0赞
dragon
11/10/2023
是的,但是像添加这样的高级操作可以变得更平易近人。
1赞
harold
11/12/2023
它们一直是一个非常不完整的向量 API,但它可以做一些不依赖于特定向量大小的更高层次的事情System.Numerics.Vector
0赞
dragon
11/14/2023
是的,但几乎没有。此类型实现了固定大小的 Vector 所具有的一小部分方法。
评论
Vector<T>
System.Numerics