Arc*_*ahi 5 octave blas intel-mkl
尽管英特尔 MKL 在 GNU Octave 中加快了计算速度,但当矩阵的大小很大时,结果有时(在 Xubuntu 20.04 中使用 Octave 5.2.0 测试)完全错误。这已在此处和此处提及。
例如,这个要点显示了一个例子,Octave 和 Scilab 产生不同的结果,并且 Octave 的结果是错误的(它每次运行脚本时都会改变。Octave 使用 OpenBLAS 给出正确的结果)。
这是要点中的代码。
for a = 1:500
for b = 1:500
c(a,b) = sin(a + b^2);
endfor
endfor
g = eig(c);
m = max(real(g))
%Correct result is ans = 16.915
%With MKL in Ubuntu 20.04, I get random numbers of order 10^5 - 10^6, which changes on every run
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
这个问题已经在一些 Debian 错误报告中提到(参见这个和这个),以及一个Octave的错误报告。
根据 Debian 维护者的说法,这既不是 Octave 的错误,也不是 MKL 的错误。它是由 libgomp 和 libiomp 之间的竞争条件引起的。
这是修复它的方法。
输入命令
export MKL_THREADING_LAYER=gnu
Run Code Online (Sandbox Code Playgroud)
在一个终端中,并octave从同一终端呼叫。现在应该不会出现这个问题。
要使此修复永久有效,请将该行添加export MKL_THREADING_LAYER=gnu到您的.bashrc文件中。
注意:安装 MKL 后,我绘制了某个图形,发现有些严重错误(虽然计算速度更快)。我在MKL 社区发布了它,他们说这不是他们的错误。最后我用 Octave 打开了一个错误报告,有人提到了这个解决方法。
警告:如错误报告中所述,__run_test_suite__即使应用此解决方法,Octave ( )的测试套件也会因分段错误而失败。因此,建议谨慎使用带有 MKL 的 Octave。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |