weired, debug可以运行,release莫名错误

在几位版主指导之后,程序开发基本完成。程序可以单GPU,多GPU运行。在debug模式(-g -G)下运行无问题,但是release版本却或在cudaMemcpy时提示unspecified launch failure,或者在中间一直处于运行状态。可能是什么原因引起的呢?另外还有一个疑问,发现多GPU版本比单GPU要慢很多,特别是在启动和清理的时候相比单GPU耗时较大。但是程序实现是启动多个线程,cudaSetDevice(n),不应该是并行的吗,多GPU有什么特别注意的地方吗?

先恭喜楼主基本开发完成。

一般情况下,release版本和debug版本出现了不同的运行结果,在于:
(1)2种情况下不同的配置的编译出的目标kerne代码l不同导致。
(2)一些代码(无论是否是device code还是host code), 依赖于类似#ifdef _DEBUG之类预处理,导致实际上您在2种配置下预处理后参与编译的源代码不同。

这2种情况一般容易导致您的结果不同的问题。

-------------------------jacky9的分界线----------------------------------------
您的第二个问题, 则是您的理解有误:
cudaSetDevice(n)不是启动多个并行的host线程的。

依然只有一个host thread, 只不过可以反复cudaSetDevice(n)来切换当前的工作对象GPU。所以不存在什么“启动多个线程,cudaSetDevice(n),不应该是并行的吗”的理解。的确只有1个host thread的。

以及,您可以通过CreateThread()之类的win32 api来建立新的host thread. 以便可能在多个线程中对付多个GPU. 这样比较方便。

谢谢横扫千军,又试了试,现在发现四个GPU,134正常,2cudaMemcpy出现问题,无法理解。我再看看几个卡到底是什么差异。

第二个没表达清楚,实际是在linux下用的SDK 4.2里面的multithreading这个辅助类,但是发现CUDA5已经不在提供这些了。我是应该pthread再改写试一试?

这4个卡完全一样么?是否出问题的卡被占用了部分显存导致分配不足,从而导致无效的复制?这些都有可能。

第二个,嗯嗯,使用pthread挺好。推荐。

对,4个c2075。另一个节点上也是4个c2075,刚测试没有问题。先不管这个问题了吧。再次感谢横扫千军!!