CUDA分析:即使退出

时间:2018-01-29 21:29:29

标签: cuda nvprof

我创建了一个在GPU上运行的简单C程序。它通过.exe运行时效果很好但是,每当我使用nvprof进行性能分析时,它会导致我的系统变得不稳定(它每隔x秒冻结一次)并需要重新启动才能使系统再次正常运行。任何见解将不胜感激。

我在启动nvprof时遇到此警告,这可能是问题,我该如何纠正? (我有相同的卡片,如下面的信息所示:)。

== 7596 == NVPROF正在分析进程7596,命令:。\ whatup.exe == 7596 ==警告:当前配置不支持统一内存分析,因为在此多GPU设置上检测到一对没有对等支持的设备。当对等映射不可用时,系统将回退到使用零拷贝内存。它可能导致访问统一内存的内核运行速度变慢。有关详细信息,请访问:http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-managed-memory

设置'SET CUDA_MANAGED_FORCE_DEVICE_ALLOC=1''SET CUDA_VISIBLE_DEVICES=1'似乎没有任何影响。

系统规格:

  • Windows 10 Pro x64
  • i7-6800K
  • 64 GB DDR4
  • 2 x EVGA 980Ti(SLI)

NVIDIA驱动程序:

  • 显示驱动程序:390.65
  • Geforce Experience:3.12.0.84
  • 3D视觉控制器驱动程序:390.41
  • 3D Vision:390.65
  • CUDA v9.1

以下是程序输出:

块数:1
每块的线程数:32
值0.000000
价值2.000000
价值4.000000
价值6.000000
价值8.000000
价值10.000000
价值12.000000
价值14.000000
价值16.000000
价值18.000000
已完成******< - GPU流程完成

**这是cudaGetDeviceProperties(...)的输出以获取更多详细信息**

设备数量:2

设备0:GeForce GTX 980 Ti
设备0,MaxThreadsPerBlock:1024
设备0,TotalGlobalMem:6442450944
设备0,SharedMemPerBlock:49152
设备0,主要:5
设备0,次要:2
设备0,ClockRate:1190000
设备0,ECCEnabled:0
设备0,TccDriver:0
设备0,ComputeMode:0


设备1:GeForce GTX 980 Ti
设备1,MaxThreadsPerBlock:1024
设备1,TotalGlobalMem:6442450944
设备1,SharedMemPerBlock:49152
设备1,主要:5
设备1,次要:2
设备1,ClockRate:1190000
设备1,ECCEnabled:0
设备1,TccDriver:0
设备1,ComputeMode:0

1。)SLI已启用并正常工作(至少通过NVIDIA控制面板和EVGA Precision) 2.)代码在GPU上运行良好,只是无法分析它是否会导致我的机器被杀并需要重新启动(否则屏幕会每隔x秒冻结一次)
3.)我尝试过“干净”安装nvidia驱动程序

...最后,这是我编译的C代码:nvcc myfile.cu -o thefinal.exe

  

更新:问题似乎与add_gpu调用无关。   如果我按如下方式更改此函数(add_gpu_BARE),它仍然有相同的问题   导致我的屏幕每隔x秒锁定一次,直到重新启动。

__global__ 
void add_gpu_BARE(float *a, float *b, float *c, float n){
    c[0] = 10.0;
}


__global__ 
void add_gpu(float *a, float *b, float *c, float n){
    int index = blockIdx.x * blockDim.x + threadIdx.x;
    int stride = blockDim.x * gridDim.x;
    for(int i=index; i<n; i+=stride) {
        c[i] = a[i] + b[i];
    }
}

void call_GPU() {

    int SIZE = 1<<20;

    float *a, *b, *c;
    cudaMallocManaged(&a, SIZE * sizeof(float)); 
    cudaMallocManaged(&b, SIZE * sizeof(float));
    cudaMallocManaged(&c, SIZE * sizeof(float));

    for(int i=0; i<SIZE; i++) {
        a[i] = i;
        b[i] = i;
        c[i] = 0;
    }

    int blocks = 1;
    int threads_per_blocks = 32;

    add_gpu<<<blocks, threads_per_blocks>>>(a, b, c, SIZE);
    cudaDeviceSynchronize();

    for(int i=0; i<10; i++) {
        printf("value %f\n", c[i]);
    }

    cudaFree(a);
    cudaFree(b);
    cudaFree(c);
}

int main() {

    printf("Ok, running on GPU\n");
    call_GPU();
    printf("COMPLETED******\n");

    return 0;
}

1。)指定256个线程会导致nvprof永远不会返回
   2.)指定32个工作但导致系统不稳定
   3.)数组大小似乎没有影响
   4.)分析时,两张卡的内存/ CPU都非常低

0 个答案:

没有答案