проблема с инициализацией массива в коде графического процессора - PullRequest
0 голосов
/ 26 декабря 2018

Я новичок в кодировании GPU.Я пытаюсь запустить простой код на YouTube, но он не может работать.Когда я пытаюсь запустить его, он останавливается на строке, когда я определяю значение массива a a [i] = i;с сообщением:

Необработанное исключение в 0x00007FF63DF51284 в first_sample.exe: 0xC0000005: Место чтения нарушения доступа 0xFFFFFFFFFFFFFFFF.

#include <stdio.h>
#define SIZE    1024

__global__ void VectorAdd(int *a, int *b, int *c, int n)
{
    int i = threadIdx.x;

    if (i < n)
        c[i] = a[i] + b[i];
}

int main()
{
    int *a, *b, *c;

    cudaMallocManaged(&a, 1024 * sizeof(int));
    cudaMallocManaged(&b, SIZE * sizeof(int));
    cudaMallocManaged(&c, SIZE * sizeof(int));

    //for (int i = 0; i < SIZE; ++i)
    for (int i = 0; i < SIZE; ++i)
    {
        a[i] = i;
        b[i] = i;
        c[i] = 0;
    }

    VectorAdd <<< 1, SIZE>>> (a, b, c, SIZE);
    cudaDeviceSynchronize();

    for (int i = 0; i < 10; ++i)
        printf("c[%d] = %d\n", i, c[i]);

    cudaFree(a);
    cudaFree(b);
    cudaFree(c);

    return 0;
}
...