为什么我在cuda中添加两个数字会得到错误的结果?

为什么我在cuda中添加两个数字会得到错误的结果?,cuda,nvidia,Cuda,Nvidia,为什么我在cuda中添加两个数字会得到错误的结果? 我得到的答案是1而不是9。有人能告诉我为什么吗?这和指针有关吗?我使用了以下代码: #include <iostream> #include <cuda_runtime.h> #include <cuda.h> using namespace std; __global__ void add(int *a, int *b, int *c) { *c = *a + *b; } int main(void

为什么我在cuda中添加两个数字会得到错误的结果? 我得到的答案是1而不是9。有人能告诉我为什么吗?这和指针有关吗?我使用了以下代码:

#include <iostream>
#include <cuda_runtime.h>
#include <cuda.h>

using namespace std;
__global__ void add(int *a, int *b, int *c)
{
*c = *a + *b;
}  

int main(void) {
int a, b, c; // host copies of a, b, c
int *d_a, *d_b, *d_c; // device copies of a, b, c
int size = sizeof(int);

// Allocate space for device copies of a, b, c
cudaMalloc((void **)&d_a, size);
cudaMalloc((void **)&d_b, size);
cudaMalloc((void **)&d_c, size);

// Setup input values
a = 2;
b = 7;


cudaMemcpy(d_a, &a, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_b, &b, size, cudaMemcpyHostToDevice);

// Launch add() kernel on GPU
add<<<1,1>>>(d_a, d_b, d_c);

// Copy result back to host
cudaMemcpy(&c, d_c, size, cudaMemcpyDeviceToHost);
cout << "answer is " << c <<endl;
// Cleanup
cudaFree(d_a); cudaFree(d_b); cudaFree(d_c);


//return 0;
}
#包括
#包括
#包括
使用名称空间std;
__全局无效添加(int*a、int*b、int*c)
{
*c=*a+*b;
}  
内部主(空){
int a,b,c;//托管a,b,c的副本
int*d_a,*d_b,*d_c;//a,b,c的设备副本
int size=sizeof(int);
//为a、b、c的设备副本分配空间
Cudamaloc((空隙**)和d_a,尺寸);
Cudamaloc((空隙**)和d_b,尺寸);
Cudamaloc((空隙**)和d_c,尺寸);
//设置输入值
a=2;
b=7;
cudaMemcpy(d_a和a、尺寸、cudaMemcpy HOSTTODEVICE);
cudaMemcpy(d_b和b,尺寸,cudaMemcpyHostToDevice);
//在GPU上启动add()内核
加上(d_a、d_b、d_c);
//将结果复制回主机
cudaMemcpy(&c,d_c,size,cudaMemcpyDeviceToHost);

cout问题在于持久化模式。持久化模式已禁用。执行此操作可以:

$ sudo -i
# nvidia-smi -pm 1

使用正确的cuda错误检查,并使用
cuda memcheck
运行您的代码。您的cuda安装或系统已损坏。您的代码没有任何问题--