Memory Cuda计划结果在HW中始终为零,在EMU中是否正确?

Memory Cuda计划结果在HW中始终为零,在EMU中是否正确?,memory,copy,cuda,zero,Memory,Copy,Cuda,Zero,我有一个奇怪的问题。。我已经编写了一个CUDA代码,它在仿真中正确执行,所有结果都会显示出来。。但是,当在硬件“G210”上执行时。。结果存储器中的结果始终为0 我将两个向量传递给内核,一个带有随机变量,另一个初始化为零,代码将第一个向量复制到共享内存,执行一些交换和其他操作,然后将结果写回第二个向量(初始为0的向量) 我使用的是双精度,使用的是-arch sm13标志,所有内存分配也使用sizeof(double) 我已经检查了内核是否被调用,它确实被调用了。。所以这里没有问题。。 cudaM

我有一个奇怪的问题。。我已经编写了一个CUDA代码,它在仿真中正确执行,所有结果都会显示出来。。但是,当在硬件“G210”上执行时。。结果存储器中的结果始终为0

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

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

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

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


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

仿真模式不是对GPU的精确模拟-它不试图模拟并发线程的行为以及由此产生的所有问题。为了调试内核,您可能必须将其分解为更小的版本,直到您能识别问题为止。

仿真模式不是对GPU的精确模拟-它不会试图模拟并发线程的行为以及由此产生的所有问题。为了调试内核,您可能必须将其分解为更小的版本,直到您能够识别问题为止。

仿真使用不同的协同模式mpiler,所有内存都在主机上,只有一个线程在运行,等等。如果你在仿真中发现了一个bug,你就在代码中发现了一个bug。如果它在仿真中工作,并不意味着你没有bug。你的问题基本上是,我有bug代码,我的bug是什么


建议:检查所有内容的返回值。了解如何进行错误检查。认识到设备上的错误可以异步显示cpu代码。使用调试器(可能购买便宜的低端nvidia gpu以简化此过程)。如果您更喜欢printf而不是调试,请尝试使用cuprintf(可在cuda论坛上获得)在英伟达CUDA论坛上寻求帮助。

< P>仿真使用不同的编译器,所有内存都在主机上,只有一个线程在运行,等等。如果你在仿真中发现了一个bug,你发现你的代码中有一个bug。如果它在仿真中工作,并不意味着你没有bug。你的问题是,基本上,我有BUGGY代码,什么是我的bug?
建议:检查所有内容的返回值。了解如何进行错误检查。认识到设备上的错误可以异步显示cpu代码。使用调试器(可能购买便宜的低端nvidia gpu以简化此过程)。如果您更喜欢printf而不是调试,请尝试使用cuprintf(可在cuda论坛上获得)在英伟达CUDA论坛上寻求帮助。

< P>如果我记得正确的话,GEFECK 210不支持计算能力1.3,也就是说它不支持双倍。
尝试重新编写代码以使用singles,使用-arch=sm_12编译。

如果我没记错的话,GeForce 210不支持计算能力1.3,也就是说,它不支持double


尝试重新编写代码以使用singles,使用-arch=sm_12编译。

你完全正确!我的错误..我刚刚这么做了,效果很好..感谢加载..但是,没有加速增益..相反,GPU速度较慢:(你完全正确!我的错误..我刚刚这样做了,它运行良好,结果正确..谢谢加载..但是,没有速度提升..相反,GPU速度较慢:(你分析过代码吗?从简要描述来看,你的操作似乎是内存受限的(主要是读写)因此,值得检查的是,您没有低效的内存事务或共享内存库冲突(如果您使用共享内存)。也许在其他问题或英伟达论坛上发布更多的细节。。您分析过代码吗?从简要描述来看,您的操作似乎是内存受限的(主要是读写),因此值得检查您是否存在低效的内存事务或共享内存库冲突(如果您使用的是共享内存)也许在其他问题或英伟达论坛上发布更多的细节,也有可能是一个很好的推力()。