当我想用 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/