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,这对我的应用程序来说是不可忽略的。如果有什么需要澄清的,请告诉我。谢谢!
5个评论
济阿里
济阿里 2022年5月12日
当然,这个文件包含a1、b1和一个截断的dataRAW(整个文件超过了5 mb的限制,但这个较小的版本仍然会产生同样的问题)。

登录评论。

接受的答案

马特·J
马特·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

更多答案(0)

s manbetx 845


释放

R2022a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!