再次发一个维度的问题!加急!

上一集回顾: 之前在161616 、323232、646464网格下采用cuda ,各种计算不同,很混乱。
采用恒大和ice的建议,从自己cpu入手,找到了错误。的确是自己cpu程序的原因。

本集请教:
目前已有的基础是:(1)自己CPU程序 无误
(2)自己GPU 程序在161616和323232 2个维度下计算,均没有问题。
(计算多次,5000步,且计算结果和相同参数下的CPU一致)

问题:(1)在计算646464的网格下,出现很随机的现象。
比如,有时候第一步算就 不收敛;然后自己关闭 不收敛的程序,然后在程序里面打了一个空格,再去运行,此时第一步就收敛了!
再比如:如果第一个都收敛,有时候200多步就又不收敛了。有时候1000多步不收敛。

所以在想这事什么原因呢?为何64网格下如此随机,32位确很正常???

(2)大神给点建议,好吗? 谢谢!

PS:(1)不收敛指的是求解稀疏矩阵AX=b不收敛。
(2)配置: 笔记本NVS4200M, VS2010+ cuda4.0, win7 64位。
(3)采用的是双精度

希望没有下一集了。(但概率是0)

LZ您好:

我估计依然是您的GPU程序有BUG造成的,请您仔细研究或者调试一下。

祝您好运~

能指条路吗??
32的就是没错误啊~~

比如是我block_size设置小了?
我现在是比较迷惘啊 因为查了有半年了。。。。。555555555555555555

难道是因为计算量大了,导致误差累积的更明显了?

楼主建议这样尝试下是否能确定(或者排除)此方面的原因:
将数据类型改为double, 依然使用646464进行测试。

如果问题消失,那么可能是您的误差累计上的原因。
如果问题依然存在,则可以排除是误差累计的原因。

那怕不能解决,也能缩小问题的范围,请尝试下。

LZ您好:

在您提供的信息下,我无法为您指出原因所在。

我无法解释,为什么您的程序在确定性输入的情况下,不是一个确定性的输出,(按照您描述的算法预期,这个应该是一个确定性的行为)。以及更加无法为您回答造成这种不确定性的原因在哪里。

根据我的推断,这个有较大可能是BUG作祟,有较小可能是算法敏感度或者软硬件环境的问题。

如果您认为这就是“不愿意为您指一条明路”,那我也没办法,指点迷津是佛祖的活,我干不了,见谅。

祝您调试顺利~

谢谢玫瑰!!
我 现在使用的就是double。

累积可能是一个原因~~~ 只是有时候第一步就不收敛 ,有时候直到第100步才不收敛。我奇怪的是这个地方。

而这个收敛最重要的针对就是求解 Ax=b。

话说楼主是能否在其他人的机器上,编译运行一下您的程序,这样至少可以再次排除是否是机器的缘故。

尝试下?

谢谢ice啊~~
您别误解哈~ 没有那个意思呢~

3ks!

恩恩 好的呢!
我明天一早就换个电脑试一试!!

我能@ 横扫吗? cudazone 有 @ 的功能吗?
恒大在哪里啊,恒大在哪里,恒大就在我心理。

不能沉! 不能沉! 臣妾不能沉啊!!!!

请勿在本版以自顶的方式和/或其他方式灌水,否则将移送至水区。

好的~~谢谢ice