我正在尝试在Nvidia P100上编译并运行以下代码。我正在运行CentOS 6.9,驱动程序版本396.37和CUDA-9.2。 appears兼容这些驱动程序/ CUDA版本。
#include <stdio.h>
#include <cuda_runtime_api.h>
int main(int argc, char *argv[])
{
// Declare variables
int * dimA = NULL; //{2,3};
cudaMallocManaged(&dimA, 2 * sizeof(float));
dimA[0] = 2;
dimA[1] = 3;
cudaDeviceSynchronize();
printf("The End\n");
return 0;
}
由于分段错误而失败。当我使用nvcc -g -G src/get_p100_to_work.cu
进行编译并运行核心文件(cuda-gdb ./a.out core.277512
)时,我得到
Reading symbols from ./a.out...done.
[New LWP 277512]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Core was generated by `./a.out'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x000000000040317d in main (argc=1, argv=0x7fff585da548) at src/get_p100_to_work.cu:71
71 dimA[0] = 2;
(cuda-gdb) bt full
#0 0x000000000040317d in main (argc=1, argv=0x7fff585da548) at src/get_p100_to_work.cu:71
dimA = 0x0
(cuda-gdb)
当我在NVidia K40上运行此代码时,该代码运行无误。
问题:
如何使我的代码在P100上运行?从this tutorial看来,此代码应运行。
答案 0 :(得分:2)
以前,我已经克隆了其中有2个K40的GPU节点的映像。然后,我将该图像放在其中包含2-P100的节点上。我怀疑在K40节点上安装驱动程序时,机器上的图形卡具有特定的配置(这很有意义)。此配置与P100不兼容。由于P100机器上的驱动程序基本上已损坏,因此可以解释为什么我的代码如此严重地失败。
解决方案:我最终不得不重新安装驱动程序,现在它可以工作了。