如何解决如何修复Ubuntu中使用Intel MKL产生错误结果的Octave?
尽管Intel MKL在GNU Octave中加快了计算速度,但是当矩阵的大小很大时,有时结果(在Xubuntu 20.04中用Octave 5.2.0测试)完全错误。已提到here和here。
例如,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错误报告(请参阅this和this)和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 举报,一经查实,本站将立刻删除。