当我想用 nsight 调试程序时,此消息显示:“值不能为空。参数名称:pSrcNativeVariant”。当我重建项目时,未显示此错误。但我必须为调试程序重复执行此操作。以前此操作 不需要。

这是我的代码:

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

#include <stdio.h>
#include <iostream>
using namespace std;


#define COLUMNS 3
#define ROWS 2

__global__ void add(int *a, int *b, int *c)
{
*a=345678;
int x = blockIdx.x;
int y = blockIdx.y;
int i = (COLUMNS*y) + x;
c[i] = a[i] + b[i];
}

int main()
{
int a[ROWS][COLUMNS], b[ROWS][COLUMNS], c[ROWS][COLUMNS];
int *dev_a, *dev_b, *dev_c;
int *x;
int r;
x=&r;
cudaMalloc((void **) &dev_a, ROWS*COLUMNS*sizeof(int));
cudaMalloc((void **) &dev_b, ROWS*COLUMNS*sizeof(int));
cudaMalloc((void **) &dev_c, ROWS*COLUMNS*sizeof(int));

for (int y = 0; y < ROWS; y++)    // Fill Arrays
    for (int x = 0; x < COLUMNS; x++)
    {
        a[y][x] = x;
        b[y][x] = y;
    }

    cudaMemcpy(dev_a, a, ROWS*COLUMNS*sizeof(int),
        cudaMemcpyHostToDevice);
    cudaMemcpy(dev_b, b, ROWS*COLUMNS*sizeof(int),
        cudaMemcpyHostToDevice);
    dim3 grid(COLUMNS,ROWS);

    add<<<grid,1>>>(dev_a, dev_b, dev_c);

    cudaMemcpy(c, dev_c, ROWS*COLUMNS*sizeof(int),
        cudaMemcpyDeviceToHost);
    for (int y = 0; y < ROWS; y++)    // Output Arrays
    {
        for (int x = 0; x < COLUMNS; x++)
        {
            printf("[%d][%d]=%d ",y,x,c[y][x]);
        }
        printf("\n");
    }
    return 0;
}

最佳答案

我遇到了完全相同的问题。在尝试了很多事情之后,我发现只需在管理模式下运行一次visual studio就可以简单地解决这个问题。在admin模式下,运行nsight调试器,问题解决。以后不需要管理员模式。至少这对我有用,祝你好运。

2014 年 5 月 12 日添加:
今天又出现了这个问题。这次我通过将平台从Win32切换到X64然后切换回来解决了

2014 年 5 月 22 日添加:
它再次发生,这次我之前尝试过的一切都不起作用。最后是这样解决的:



NuGet Package restore failed for project Miscellaneous Files: Value cannot be null or an empty string. Parameter name: root. 0 0

关于visual-studio-2010 - 错误 : "Value cannot be null. Parameter name: pSrcNativeVariant" in VS2010,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15757217/

10-12 21:17