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