【问题标题】:Can C# make use of fused multiply-add?C# 可以使用融合乘加吗?
【发布时间】: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


【解决方案1】:

最后,.NET Core 3.0 提供了System.Math.FusedMultiplyAddgithub issue 中解释了不自动使用此操作的理由。

【讨论】:

  • 迟到总比不到好!
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 2016-03-29
  • 2023-03-24
  • 2012-02-28
  • 2020-09-28
  • 2019-05-13
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多