OSX 中 MKL BLAS 和 Accelerate Framework BLAS 之间 DSCAL 的不一致
Posted
技术标签:
【中文标题】OSX 中 MKL BLAS 和 Accelerate Framework BLAS 之间 DSCAL 的不一致【英文标题】:Incoherence in DSCAL between MKL BLAS and Accelerate Framework BLAS in OSX 【发布时间】: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)
这是一个已知的错误/功能吗?
【问题讨论】:
【参考方案1】:这既不是错误也不是功能。 0*NaN
0*Inf
的结果是由实现者自行决定的。无论如何,以上的目的是什么?
【讨论】:
Scilab 软件 (www.scilab.org) 在 Windows 平台上安装期间将参考 BLAS 替换为 MKL BLAS。在 Linux 下使用参考 BLAS,在 OSX 下使用 Accelerate Framework BLAS。因此,在这些极限情况下,我们在不同平台上获得了不同的结果。这是个问题。是否存在提供 BLAS 供应商的 BLAS 功能? 那种。您可以使用 CMake 的FindBLAS.cmake
和 FindLapack.cmake
等基础架构来了解您正在处理的实现,同时构建自己的代码。我在某种程度上是这样做的:github.com/kvahed/codeare。还有一些单独的命令只能在单独的实现中找到,你可以测试一下。所以你只会在使用 MKL 等编译时找到mkl_malloc
。但是没有version
命令左右会告诉你所有的。以上是关于OSX 中 MKL BLAS 和 Accelerate Framework BLAS 之间 DSCAL 的不一致的主要内容,如果未能解决你的问题,请参考以下文章