微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修复Ubuntu中使用Intel MKL产生错误结果的Octave?

如何解决如何修复Ubuntu中使用Intel MKL产生错误结果的Octave?

尽管Intel MKL在GNU Octave中加快了计算速度,但是当矩阵的大小很大时,有时结果(在Xubuntu 20.04中用Octave 5.2.0测试)完全错误。已提到herehere

例如,this要点显示一个示例,即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

如何解决此问题?

解决方法

一些Debian错误报告(请参阅thisthis)和Octave中的bug report中都提到了此问题。

根据Debian维护者的说法,这既不是Octave的错误,也不是MKL的错误。它的产生是由于libgomp和libiomp之间存在竞争状态。

这是解决方法。

输入命令

export MKL_THREADING_LAYER=gnu

在一个终端中,然后从同一终端呼叫octave。现在问题不应该出现了。

要使此修复程序永久生效,请将行export MKL_THREADING_LAYER=gnu添加到您的.bashrc文件中。


注意:安装MKL后,我绘制了一个特定的图,发现有严重错误的地方(尽管计算速度更快)。 我将其发布在MKL community中,他们说这不是他们的错误。最终,我打开了Octave的错误报告,有人提到了此解决方法。

警告:如错误报告中所述,即使应用了此替代方法,八度(__run_test_suite__)的测试套件也因分段错误而失败。因此,建议谨慎使用带有MKL的Octave。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。