Неожиданная индексация 1d массива cuda - PullRequest
0 голосов
/ 11 ноября 2019

Я довольно новичок в CUDA, я пытался узнать, как выполняется индексация, переписывая базовый код с нуля. Сначала я начал с двумерных массивов, но это не сработало, поэтому сейчас я пытаюсь работать с простыми одномерными массивами, но все еще безуспешно.

Код довольно прост и прост:

__global__ void kernel(int *a, int*b){
    int r= blockIdx.x*blockDim.x; 
    int c =threadIdx.x; 
    a[r+c] += b[r+c];
}

__global__ void init(int *a, int*b){
    int r= blockIdx.x*blockDim.x; 
    int c =threadIdx.x; 
    a[r+c] = threadIdx.x;
    b[r+c]= 1;
}

int main(){

    int m = 5, n =5; 
    int *hst = (int*) malloc(sizeof(int)*m*n);
    int *ad, *bd;

    cudaMalloc(&ad, sizeof(int)*m*n);
    cudaMalloc(&bd , sizeof(int)*m*n);
//  dim3 grid(5,1,1), block()
    init<<<m,n>>>(ad,bd);
    kernel<<<m,n>>>(ad, bd);
    cudaMemcpy( hst, ad, m*n,cudaMemcpyDeviceToHost );

    for(int i=0 ; i< m*n ;i++)
    {
        cout<<hst[i]<<' ';
    }

    return 0; 
}

Вот что я получаю:

1 2 3 4 5 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Пока это должно быть

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...