【发布时间】:2016-09-23 10:30:10
【问题描述】:
如果 C# 编译器/抖动在所使用的硬件上可用,是否使用融合乘加操作?如果是,是否需要设置任何特定的编译器设置才能利用它?
【问题讨论】:
-
没有。此类代码生成仅限于 System.Numeric.Vectors,其当前版本不使用 FMA。明天可能会有所不同,否则将矩阵类移入该名称空间没有多大意义。获得它的唯一方法是使用 C++/CLI 语言,注意互操作开销。测量三遍,切割一次。
-
我很好奇这是否有任何改变,但现在我很困惑。两个 Matrix3x2 乘法的反汇编似乎使用向量指令来加载寄存器,但没有加法或乘法指令,因此看起来工作是由子程序 (CALL) 完成的。在github.com/dotnet/coreclr/blob/…(第 5014 行)的代码生成中确实处理了 PInvoke
-
有点相关:我看到使用 System.Numerics.Vectors v.4.4.0-preview2- 从 Vector
.Dot(vec1, vec2) 生成 vdpps 指令(点积) 25405-01.
标签: c# fma system.numerics