不同的结果在不同的电脑,Matlab 2021 b - 64, windows 64,英特尔芯片

49视图(30天)
你好,
我是测试一些代码在两个不同的机器上,64位windows, Matlab与64位2021 b。
我很惊讶,一个简单的操作使用相同的变量,同样的精度,再现了稍微不同的结果。
它不是一个巨大的操作,实际上只是一个向量的矩阵向量乘法大小1 x16 16 x3和矩阵B,在单格式,导致1 x3的向量C。
我测试了两位表示,向量和矩阵B条目,它们是完全相同的。
但是当我执行矩阵向量乘法C = A * B;,第一项是不同的两台机器。
有趣的是,当我执行C (1) = A * B (: 1);在两台计算机上都得到相同的值,我也得到相同的值(但是其他不同的结果)当我执行C(1) =总和(a * B (: 1) ');
所以总结:
  • 当我执行C = A * B,第一个条目是不同的两台机器上(“10111101111101110110011011110110”和“10111101111101110110011011111000”)
  • 当我执行C (1) = A * B(: 1),两台机器上的值是相同的(“10111101111101110110011011111000”)
  • 当我执行C(1) =总和(a * B(: 1)”),两台机器上的值是相同的(“10111101111101110110011011110110”)
这是怎么来的,信任,哪些价值?
谢谢!
4评论
詹姆斯Tursa
詹姆斯Tursa 2021年12月1日
编辑:詹姆斯Tursa 2021年12月1日
你可以发布一些实际的小例子证明这一点吗?十六进制的数字版本,或者也许垫文件。即。,这样我们可以使用相同的数字。
两台机器使用不同的布拉斯特区图书馆吗?或者浮点舍入模式设置不同的两台机器由于某种原因。

登录置评。

接受的答案

克里斯汀Tobler
克里斯汀Tobler 2021年12月10日
编辑:克里斯汀Tobler 2021年12月10日
首先,关于“信任哪些价值?”
两个值也同样值得信赖,结果的差异归结为应用矩阵的乘法和加法乘法以不同的顺序。没有对与错的选择,这是为每个硬件体系结构基于性能考虑。
对于一个单独的矩阵,可以使用符号工具箱和比较这机器有接近准确的结果,但这将下降为任何特定的输入矩阵随机运气。
更难回答的问题是“如何来?”
我们确保MATLAB命令是可再生的,我们的意思是:如果你在MATLAB版本相同,同一台机器,同样的操作系统,允许对MATLAB使用相同数量的线程,没有改变内心BIOS设置,相同的命令的输出相同的输入总是一样的。
可能是怎么回事,你能运行
版本布拉斯特区
在你的机器上?这将告诉我们哪个版本的库,我们提倡选择矩阵乘法。我怀疑他们可能使用不同的指令集(例如,AVX2 vs AVX512)水平。
3评论

登录置评。

答案(1)

罗马Foell
罗马Foell 2021年12月1日
编辑:罗马Foell 2021年12月2日
我附加变量的例子,在我的第一篇文章。
@James Tursa :如何检查BLAS设置?如何检查浮点舍入设置吗?
编辑:后 https://de.mathworks.com/matlabcentral/answers/223952-configuration-of-lapack-and-blas-in-matlab BLAS设置是依赖的Matlab版本,我用Matlab 2021 b。
6个评论

登录置评。

类别

找到更多的在创建和连接矩阵帮助中心文件交换

s manbetx 845


释放

R2021b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!