我正在通过使用fortran中的数学内核库来实现特征分解方法。
在方法中,我首先尝试应用zgehrd将输入矩阵转换为上Hessenberg形式。
但是,在调试期间,我发现给定相同的输入矩阵,zgehrd方法在不同的计算机上会产生不同的结果。有些计算机在Windows 10中,而有些仍在Windows 7中。
要进一步测试此问题是否与系统有关,我在Windows 10(家用64位)计算机上安装了Windows 10(Pro 64位)VM计算机。事实证明,在这种情况下,结果仍然略有不同。
由于本征分解方法将由优化程序递归调用,因此会累积一些细微差别。我已经通过在fortran中强制使用条件数值可再现性来尝试了该解决方案,但是它没有帮助。任何帮助将不胜感激
答案 0 :(得分:0)
如果要在不同计算机上查看Intel MKL的逐位输出结果,请首先调用MKL_VERBOSE模式(设置/导出环境变量MKL_VERBOSE = 1)并检查报告的最低代码分支。例:
在基于AVX和AVX-512的系统上运行MKL代码,我们将看到以下消息:
MKL_VERBOSE Intel(R) MKL 2019.0 Update 4 Product build 20190411 for Intel(R) 64 architecture Intel(R) Advanced Vector Extensions (**Intel(R) AVX**) enabled processors, Lnx 2.80GHz intel_thread
以及在SkyLake系统上:
MKL_VERBOSE Intel(R) MKL 2019.0 Update 4 Product build 20190411 for Intel(R) 64 architecture Intel(R) Advanced Vector Extensions 512 (**Intel(R) AVX-512**) enabled processors, Lnx 2.20GHz intel_thread
下一步: 通过设置环境变量来调用MKL的按位重现功能:设置/导出MKL_CBWR = AVX 然后,MKL保证在相同的线程数和相同的操作系统的情况下,在基于AVX和AVX-512的系统上将看到相同的输出。