2014-11-05 55 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調用存儲返回代碼,他們會給你更好的主意什麼走錯了。