kernel中访问显存次数限制

kernel中访问显存次数有没有限制?
遇到kernel中循环太多的情况,直接kernel不执行,测试把里面循环改小,又可以了

启动256*256

循环10000次还可以,循环超过40000次就废了。

而我的程序中需要读取1亿次,怎么办?
启动10000个kernel吗?

LZ您好,kernel中访存次数应当没什么限制的。

您在kernel中启动多次循环是否造成问题,这个和您的代码有关,您不妨将您的代码和错误信息一并贴出,看看问题在哪里。

如果您的功能需要,顺序地启动10000次kernel是没问题的。

欢迎莅临cudazone,祝您好运~

对,建议楼主在kernel执行后面加上
printf(“%s\n”, cudaGetErrorString(cudaGetLastError()));
来诊断一下kernel未能启动的原因

kernel“废了”建议楼主说明具体什么叫“kernel废了"。

根据楼主的上下文,我猜测是因为循环次数过多,导致的kernel超时而导致time out出错挂掉。

那么如何解决超时问题呢?此时您可以使用开始菜单->nsight monitor->options->TDR timeout, 改为一个较长的时间,例如600s(或者干脆禁用)。来尝试解决此问题。

这是我的猜测以及根据猜测给出的回复。
如果您的“废了”是其他意思,那么该回复不适用,则此时建议楼主给出“废了”的含义。

刚才写代码测试了一下,发现读写100000次也完全无压力。

截图为证:
(网络太差,以后补图)

由此可见,如果是单独地在kernel里面循环读写显存,而没有其他限制因素的话,那么是不应该读写40000次就挂掉的。当然,我的kernel里面仅有读写,和LZ的kernel是不同的,也许如横扫斑竹所言,可能是循环体比较大,造成反复循环产生超时造成。又或者是其他因素造成。

总之,本例子可以就读写次数这一单一因素给出结论,那就是不会限制在读写40000次上。

综上,LZ您的问题可能在其他方面,请继续寻找一下。

祝您好运~


本来准备了一个更为合适的例子的截图,结果不给力的论坛每次都说我上传文件失败。折腾了无数次了。

无奈了,先空着吧。

感谢大家的帮助,我已经通过解决10000个kernel解决了。
1w多个kernel在GTX480执行才2s

程序很简单的,在256256的kernel,循环(1087614)读取2个数据,做的协方差,读取的那一步就没有获取到数据。

调试时将循环改1w,还能读到数据,但改4w就读不到了

恭喜LZ解决问题!

如果LZ有兴趣讨论为何代码中循环次数过多的时候会出问题,依然可以继续就您的代码讨论。
每次问题都是一个宝山,入得宝山,或许有意外的收获~

祝您好运!

出现这个烂东西!!!!

8#同学您好,您是专门来活跃论坛气氛的么?

如果cuglizhen有问题,欢迎开贴询问。但请不要直接翻别人帖子然后发出不明含义的跟贴。

主要是您有任何疑问的主题贴,我们都将给予回答。但不鼓励您翻他人帖子。

8#如果再次出现此类无意义回帖行为,将做严肃处理,立此存照。