Visual Studio Cuda调试器(Nsight)不显示内核参数结构中的指针

时间:2017-09-05 08:32:05

标签: c++ visual-studio cuda nsight

目的:

我正在开发一个科学的CUDA应用程序,我在GPU上有几个数据字段。我在Visual Studio 15中开发并使用NVIDIAs Nsight 5.4来调试GPU代码。我希望能够在内核中设置断点并检查内存。我通过一个包含指针的结构将设备数据指针传递给内核。

什么工作:

  • 我可以破解内核中的代码。
  • 我可以检查局部变量。
  • 如果我拿到指针,我可以检查设备内存。
  • 我可以打印指向控制台的指针。
  • 当我直接传递设备指针(而不是结构)时,我也可以检查它们。

什么行不通:

  • 我无法检查结构内部的指针!

此屏幕截图显示了我的Visual Studio所描述的问题。

Nsight debug problem

最小工作示例:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

struct Param {
    int* a;
    int* b;
};

__global__ void kernel(Param param)
{
    *param.a =  5;
    *param.b = -5;
    printf("a: %p, b: %p\n", param.a, param.b);
}

int main()
{
    Param param;

    cudaMalloc( &param.a, sizeof(int) );
    cudaMalloc( &param.b, sizeof(int) );

    kernel<<<1,1>>>(param);

    return 0;
}

我很乐意为你们提供帮助。如果问题也出现在其他配置上,也许你可以尝试一下!

我的配置:

  • 赢10,64位
  • Visual Studio 15
  • Nsight 5.4
  • GeForce GTX 1080,驱动程序385.41
  • Cuda 8.0

0 个答案:

没有答案