System.Numerics.Vector<T>或System.Runtime.Intrinsics.Vector128<T>

问题描述 投票:0回答:1

向量和向量128结构的文档确实非常相似,并且在它们之间切换的Asvector/Asvector128方法。 但是,是否有一种情况我应该使用另一个情况?

I研究了这两个结构的实现,我注意到JIT的优化属性以及Vectors128。这是否意味着仅对Vector128进行了优化(对于特定体系结构)?在所有平台下都有支持吗? 因此,是否存在使用vector128会导致毫无脚踏的exception的情况? 否则我完全错了,向量只是前净核心3.0的旧结构?

c# vectorization
1个回答
0
投票

System.Numerics.Vector<T>

旨在使用任意向量的矢量长度,并应让编译器目标在平台上可用的任何向量宽度。

System.Runtime.Intrinsics.Vector128<T>

另一方面,有固定数量的位,这可能使您比编译器更好地优化代码。它还包括平台特定的方法以实现进一步的优化。如果平台不支持特定的向量宽度,则可能不起作用。从理论上讲,编译器可以减少向量宽度,或者如果没有特定宽度,则可以发出标量代码,但是我不确定是否这样做。 128位往往是“标准” SIMD宽度,因此应该是一个相当安全的选择。 .NET核心中的Hardware Intrinsics将

Vector<T>
的性能与内在变体进行了比较。它表明使用内在的求和数量的速度约为3倍,但文章很旧,因此您的结果可能会有所不同。

结论,每个选项都有用例,但是如果您真的想知道哪种选项最快的特定用例最快,则可能需要编写自己的基准测试。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.