首页 > 解决方案 > 使用矩阵的 CUDA 中的分段错误

问题描述

我正在 CUDA 中编写一个程序,它给定一个静态矩阵,它填充了一个给定的值,但我不知道为什么它给了我段错误......我认为给出它的行是当我尝试复制矩阵回到主机上,但我想不出另一种方法来做到这一点。

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

using namespace std;

__global__ void initKernel(float A[][65536], int n, int m, float value){
    int i = blockDim.x*blockIdx.x + threadIdx.x;
    int x,y;
    if(i<n*m){
        x=i/m;
        y=i%m;
    }
    A[x][y]=value;
     
}

void matrixInit(float A[][65536], int n, int m, float value){

    int size=(n*m)*sizeof(float);
    int block_size = 32, number_of_blocks = ceil((n*m)/block_size);

    float (*d_A)[65536];
    cudaMalloc((void**)&d_A, size);
    cudaMemcpy(d_A, A, (n*m)*sizeof(float), cudaMemcpyHostToDevice);
    initKernel<<<number_of_blocks, block_size>>>(d_A, n,m,value);
    cudaMemcpy(A,d_A,size,cudaMemcpyDeviceToHost);
    }

int main(){
    int n=4096;
    int m=65536;
    float A[4096][65536];
    matrixInit(A,n,m,1.0);
}

标签: cudasegmentation-fault

解决方案


推荐阅读