在我开始优化之前,我试图找出配置文件结果的含义。我对CUDA非常新,并且总体上进行了剖析,我对结果感到困惑。
具体来说,我想知道在看似无人看待的计算块中发生了什么。当我在CPU和GPU上从上到下看时,在大部分代码中似乎没有发生任何事情。它们看起来像Thread1
中没有任何内容的列,GeForce
中没有任何内容。这是正常的吗?这是怎么回事?
使用nvprof在空载下完成了多核机器的运行。 GPU代码使用-arch=sm_20 -m32 -g -G
编译为CUDA 5。
答案 0 :(得分:3)
这里的错误是在调试模式下分析代码(-G
编译器标志:“为设备代码生成调试信息”)。程序的行为发生了深刻的变化,不应该用它来分析和优化一个代码。
另一件事:很难找到 nvcc 的调试模式的全面文档。 nvcc 可能会将寄存器/共享内存转储到全局内存中,以便于主机访问和调试,从而可以隐藏共享内存中的竞争条件等问题(参见此处的讨论:https://stackoverflow.com/a/10726970/1043187) 。因此,cuda-memcheck --tool racecheck
等程序也应该在发布模式下使用。