CUDA: Ферми (Tesla M2090) генерирует CUDA_EXCEPTION_10 без причины - PullRequest
3 голосов
/ 28 июня 2011

У меня есть небольшой фрагмент кода, который отлично работает на старой архитектуре Nvidia (процессор Tesla T10), но не на Fermi (Tesla M2090)

Я узнал, что Ферми ведет себя немного по-другому. Из-за этого небезопасный код может корректно работать на старых архитектурах, тогда как на Fermi он улавливает ошибку.

Но я не знаю, как решить это.

Вот мой код:

__global__ void exec (int * arr_ptr, int size, int * result) {

    int tx = threadIdx.x;
    int ty = threadIdx.y;

    *result = arr_ptr[-2];

}

void run (int * arr_dev, int size, int * result) {

    cudaStream_t stream = 0;
    int *arr_ptr = arr_dev + 5;

    dim3 threads(1,1,1);
    dim3 grid (1,1);

    exec<<<grid, threads, 0, stream>>>(arr_ptr, size, result);

}

так как я получаю доступ к arr_ptr[-2], ферми бросает CUDA_EXCEPTION_10, Device Illegal Address. Но это не так. Адрес законный.

Может ли кто-нибудь помочь мне в этом.


Мой код драйвера

int main(){
    int *arr;
    int *arr_dev = NULL;
    int result = 1;

    arr = (int*)malloc(10*sizeof(int));

    for(int i = 0; i < 10; i++)
            arr[i] = i;

    if(arr_dev == NULL)
    {
            cudaMalloc((void**)&arr_dev, 10);
            cudaMemcpy(arr_dev, arr, 10*sizeof(int), cudaMemcpyHostToDevice);
    }

    run(arr_dev, 10, &result);
    printf("%d \n", result);
    return 0;

}

1 Ответ

6 голосов
/ 29 июня 2011

Карты Fermi имеют намного лучшую защиту памяти на устройстве и обнаруживают вне границ условия, которые, как представляется, «работают» на старых картах. Используйте cuda-memchk (или режим cuda-memchk в cuda-gdb), чтобы лучше понять, что происходит.


EDIT:

Это виновник:

cudaMalloc((void**)&arr_dev, 10);

, который должен быть

cudaMalloc((void**)&arr_dev, 10*sizeof(int));

Это приведет к этому коду

int *arr_ptr = arr_dev + 5;

передача указателя на устройство, которое находится за пределами.

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