加入共享存储器后模拟运行有变化

前几天发过一个帖子,就是说在原有的程序上添加了共享存储器的后,计算得到的结果显示最后两位有差异。。。

经过广大网友的指导,我意识到这似乎是正常的,,,,

但是我刚刚想到我还没用GPU来算啊,只是模拟运行而已啊。。 这样是不是说明程序有问题啊????

还有就是我用来测CPU计算的时间总是为0.。也许是数组取得太小吧。。用的是CLOCK来计时。。

截图如下
[attach]662664[/attach]

[ 本帖最后由 hnuzhoulin 于 2010-5-3 14:32 编辑 ]

对于浮点运算,是不满足结合率的,所以有差别也不是不可能。

另:你用了共享存储器而模拟正确,这个可能真的有点问题,要么是你共享存储器用得不对,呵呵

你说的模拟正确是指我的截图里面的test passed???

那是我自己加的一个判断语句
int p;
p=(compare(Pos_CPU,Pos_GPU,N))&&(compare(Vel_CPU,Vel_GPU,N));
if(p)
{
printf(“test passed!\n”);//
}
else
{
printf(“test failed!\n”);//
}

里面的compare函数就是比较两个结果,当两个结果之差小于某一个数时我就认为是正确的。。这里我设定的刚好就是0.0001

所以才会passed

还想问一下就是模拟运行是,XP对于sharedMemory是如何处理的啊??

我感觉两者应该完全一样,毕竟都是CPU在计算。。。当然如果CPU对于CUDA里面的sharedMemory的处理不同可能会有不同结果。

[ 本帖最后由 hnuzhoulin 于 2010-5-3 15:04 编辑 ]

这上应当是nv的驱动决定的。对于浮点运算有差别是正常的,因为CPU不是能够精确的表示任何一个浮点数的,此时就是近似表示,也就是说精度损失了