cuda中矢量加法的分割错误

Segmentation fault with vector addition in cuda

本文关键字:分割 错误 cuda      更新时间:2023-10-16

我正在为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,因此我对新的数据类型[]更满意;库达有类似的名字吗?

将其更改为:

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调用来存储返回代码,它们会让您更好地了解出了什么问题。