cuda中矢量加法的分段故障

时间:2014-11-05 11:07:34

标签: c++ cuda

我正在搞 cuda 的玩具程序。

我声明一个float数组传递到gpu和一个数字到该float数组的每个元素,并将它传回主机系统并打印数组。然而,这没有成功,它给我分段错误。

此处的代码

#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还有相同的东西吗?

1 个答案:

答案 0 :(得分: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电话存储返回代码总是更好,它们可以让您更好地了解出现了什么问题。