2014-11-05 53 views
1

我正在搞玩具程序cuda在cuda中添加向量的分割错误

我声明一个浮点数组传递给gpu和一个数字给浮点数组的每个元素并将其传回到主机系统并打印数组。然而,这并没有解决,它给了我分段错误。

这里的代码

#include <iostream> 
using namespace std; 

__global__ void kern(float *a, float *C){ 
    for (int i = 0; i < 3; i++) C[i] = a[i] + i; 
} 

int main(){ 
    float *A = new float[3]; 
    for(int i = 0; i < 3; i++){ 
     A[i] = i; 
    } 

    float * d; 
    float * C; 
    cudaMalloc(&C, sizeof(float)*3); 
    cudaMalloc(&d, sizeof(float)*3); 
    cudaMemcpy(&d, A, sizeof(float)*3, cudaMemcpyHostToDevice); 
    kern<<<1, 1>>>(d, C); 

    cudaMemcpy(&A, C, sizeof(float)*3, cudaMemcpyDeviceToHost); 

    cout << A[2]; 

} 

而且我不熟悉的malloc大多数我的经验是与CPP,所以我更舒适的新数据类型[]; Cuda有没有相当于?

回答

3

更改为:

cudaMemcpy(&d, A, sizeof(float)*3, cudaMemcpyHostToDevice); 
cudaMemcpy(&A, C, sizeof(float)*3, cudaMemcpyDeviceToHost); 

要这样:

cudaMemcpy(d, A, sizeof(float)*3, cudaMemcpyHostToDevice); 
cudaMemcpy(A, C, sizeof(float)*3, cudaMemcpyDeviceToHost); 

而且它总是更好地CUDA调用存储返回代码,他们会给你更好的主意什么走错了。