Filter函数在不同的gpu上返回不同的结果
2次浏览(过去30天)
显示旧的注释
你好,
我遇到了一个问题,内置的过滤器函数在两台不同的机器上返回不同的结果。一台机器运行MATLAB 2022a并具有GeForce RTX 3080 Ti,另一台机器运行2018b并具有GeForce GTX 1070 Ti。下面这行代码运行于这两种情况——在每种情况下,b1、a1和dataRAW是相同的,但是过滤器返回不同的值。
datr = filter(b1, a1, dataRAW)
我认为错误的来源与dataRAW是一个gpuArray对象有关。在下面的代码中,datr是RTX PC上的filter函数的结果,dataRAW是GTX PC上的输入数据。当两者都在GTX PC上运行时,第一行返回false,第二行返回true。
isequal(filter(b1, a1, dataRAW), datr)
isequal(filter(b1, a1, gather(dataRAW)), datr)
关于gpu是否/为什么会在这里产生差异,有什么想法吗?结果之间的误差相当大-最大的差异约为0.1755,这对我的应用程序来说是不可忽略的。如果有什么需要澄清的,请告诉我。谢谢!
接受的答案
马特·J
2022年5月12日
编辑:马特·J
2022年5月12日
使用双浮点,而不是单浮点。
负载(“kilo_vars.mat”)
Res1 =filter(b1, a1, dataraw);
Res2 =filter(b1, a1, gather(dataraw));
不匹配= max (abs (res1-res2))
=不匹配
gpuArray单
0.0174
dataraw =双(dataraw);
Res1 =filter(b1, a1, dataraw);
Res2 =filter(b1, a1, gather(dataraw));
不匹配= max (abs (res1-res2))
=不匹配
3.6103 e-11