【问题标题】:Incoherence in DSCAL between MKL BLAS and Accelerate Framework BLAS in OSXOSX 中 MKL BLAS 和 Accelerate Framework BLAS 之间 DSCAL 的不一致
【发布时间】:2018-07-12 06:54:06
【问题描述】:

在带有 OSX BLAS(加速框架)的 OSX 下。下面的程序

  real*8 :: x(2)
  real*8 :: zero=0.0d0
  x(1)=1.0d0
  x(2)=1/zero
  print*, x(2)*0.0d0
  call dscal(2,0.d0,x,1)
  print*, x
  end

给我以下输出

                   NaN
0.0000000000000000        0.0000000000000000

以及 OSX+MKL BLAS 上的以下输出

                   NaN
0.0000000000000000                            NaN

即似乎 OSX BLAS DSCAL 在乘以 0 时发生短路(我们得到 X(2)=0 尽管应该得到 0*Inf=NaN)

这是一个已知的错误/功能吗?

【问题讨论】:

    标签: macos ieee-754 blas intel-mkl accelerate-framework


    【解决方案1】:

    这既不是错误也不是功能。 0*NaN 0*Inf 的结果是由实现者自行决定的。无论如何,以上的目的是什么?

    【讨论】:

    • Scilab 软件 (www.scilab.org) 在 Windows 平台上安装期间将参考 BLAS 替换为 MKL BLAS。在 Linux 下使用参考 BLAS,在 OSX 下使用 Accelerate Framework BLAS。因此,在这些极限情况下,我们在不同平台上获得了不同的结果。这是个问题。是否存在提供 BLAS 供应商的 BLAS 功能?
    • 那种。您可以使用 CMake 的 FindBLAS.cmakeFindLapack.cmake 等基础架构来了解您正在处理的实现,同时构建自己的代码。我在某种程度上是这样做的:github.com/kvahed/codeare。还有一些单独的命令只能在单独的实现中找到,你可以测试一下。所以你只会在使用 MKL 等编译时找到mkl_malloc。但是没有version 命令左右会告诉你所有的。
    猜你喜欢
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多