硬件程序结果在HW中始终为零,在EMU中是否正确?

时间:2010-05-20 23:29:05

标签: memory copy cuda zero

我有一个奇怪的问题..我编写了一个CUDA代码,它在仿真中正确执行,所有结果都显示出来..但是,当在硬件“G210”上执行时...结果内存中的结果总是为0 < / p>

我将两个向量传递给内核,一个带有随机变量,另一个被初始化为零,代码将第一个向量复制到共享内存,进行一些交换和其他操作,然后将结果写回第二个向量(最初为0的那个)

我使用双精度,使用-arch sm13标志,所有内存分配也使用sizeof(double)..

我已经检查了内核是否被调用,它确实..所以这里没有问题.. cudaMemCpy没有问题..

可能是什么问题...... :(为什么它会在仿真中起作用而在HW上不起作用

我很困惑......有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果我没记错的话,GeForce 210不支持Compute Capability 1.3,即它不支持双打。

尝试重写代码以使用单个,使用-arch = sm_12进行编译。

答案 1 :(得分:1)

仿真模式不是GPU的精确模拟 - 它不会尝试模拟并发线程的行为以及由此产生的所有问题。为了调试你的内核,你可能不得不将它分解成更小的版本,直到你能够发现问题为止。

答案 2 :(得分:1)

仿真使用不同的编译器,所有内存都在主机上,只有一个线程在运行,等等。如果在仿真中发现错误,则会在代码中发现错误。如果它在仿真中有效,那并不意味着你没有bug。你的问题基本上是,我有错误的代码,我的错误是什么?

建议:检查所有内容的返回值。了解如何进行错误检查。意识到设备上的错误可以相对于cpu代码异步显示。使用调试器(也许买一个便宜的低端nvidia gpu使这更容易)。如果您更喜欢printf进行调试,请试试cuprintf(可在cuda论坛上找到)。在nvidia cuda论坛上寻求帮助。