0

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

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

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

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

可能是什么问题.. :(为什么它可以在仿真中工作而不是在硬件上

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

4

3 回答 3

2

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

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

于 2010-05-21T09:18:12.707 回答
1

模拟模式不是对 GPU 的准确模拟——它不会尝试模拟并发线程的行为以及由此可能产生的所有问题。为了调试你的内核,你可能不得不把它分解成更小的版本,直到你能找出问题所在。

于 2010-05-21T05:55:08.287 回答
1

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

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

于 2010-05-21T06:19:16.140 回答