运行效率问题

大家好,先祝大家中秋快乐:
我写了个程序,但是在分析效率时出了点情况:

我用的是Tesla C1060,windowxp 64位。内存为12G。表体中()中的是加速比,()前的是每秒更新计算的网格数目。大家可以从图中和表中看到1、GPU计算时当网格数为20482048和30723072而且每个线程块中线程数为128时,效率没有按规律上升,反而有一点点降低,但每个线程块中线程数]为256时又正常了,这是为什么呢[color]2、CPU部分蓝色区域也出现反常的降低,我都是测了很多次,然后求平均的,而且按这个求平均的方法测了很多遍验证过,如果说512512时是误差,那30723072时到底是为什么呢?
我不是计算机专业的,希望大侠们帮帮我,谢谢大家。

[ 本帖最后由 zhangarbu 于 2010-9-22 10:49 编辑 ]

再处理一下好吗!你的括号中的文字都不在了

表体括号中的是加速比,括号前的是每秒更新计算的网格数目,表中256*256时每个线程块线程数目在256时无对值,

感谢风大哥大过节还回我的帖子,谢谢你

不用谢,对了,你的效率是怎么计算的啊?

另外对你的这个问题,那些因素可能影响结果?

我是做LBM的,效率计算方法是网格密度迭代次数/运行总时间。我这个问题它每个格点只与相邻格点作数据交换,但模型中把一个正方型矩阵分这左右对等两块分别计算,所以当矩阵为256256时,每个线程块中最多只能有128个线程。我在怀疑CPU的问题会不会是内存不够了,我没学过相关内容,只是猜的。对于GPU,当网格密度一定的时候,随着每个线程块中的线程数目减少,线程块就会相应增加,可以使每个SM中有足够多的活跃线程块,能够更好的隐藏延时;而当随着每个线程块中的线程数目增多,就会有更多的线程处于同一个线程块,它们可能通过读写速度很快的共享内存来实现通信,能够更多的减少通信时间。我在想是不是当运算规模达到一定程度后,当每个线程块中线程数为128时达到了一个较不利的平衡?我是瞎想的,求指正。

是不是网格密度大了,迭代次数就少了

是这样的,当网格密度很大的时候,我设置的迭代次数就比前面少一些,但求出的结果依然是平均每一秒能够更新的格点数,就是说一秒中内能够把多少个格点算一遍,原因我还不知道

因为在写一篇文章,如果对这个现象不加分析的话,总决的不够严谨。所以求大哥帮帮忙