2013-07-28 3 views
0

Хотя моя программа компилируется без ошибок, я запускаю свою программу, и мои начальные операторы С работают, но когда я ударил свою первую функцию CUDA cudaMallocHost(), программа просто перестает делать что-либо. Я не получаю ошибок, и мне нужно использовать cntr-c для ручного выхода. Я попытался удалить различные части, и кажется, что всякий раз, когда я ударяю любую из своих функций CUDA, он имеет тот же эффект.Почему моя программа перестает работать без ошибок?

Я включил cuda.h и cuda_runtime.h, и я компиляция .cu файла с nvcc с NVIDIA SDK и CUDA 5.5 установлен.

int main(){ 
    int set[6][6] = {{1,2,3,4,5,6}, {7,8,9,10,11,12}, {13,14,15,16,17,18}, {19,20,21,22,23,24}, {25,26,27,28,29,30}, {31,32,33,34,35,36}}; 
    int *i=0, *d_d=0, a, b, nbytes; 
    int size = sizeof(set[0]); 
    nbytes = size*size*sizeof(int); 
    for(a=0;a<6;a++){ 
     for(b=0;b<6;b++){ 
      printf("%d, ", set[a][b]); 
     } 
     printf("\n"); 
    } 
/*end safezone*/ 

    cudaMallocHost((void**)&set, nbytes); 
    memset(set,0,nbytes); 
    printf("CPUmem"); 

    cudaMalloc((void**)&d_d, nbytes); 
    cudaMemset(set,0,nbytes); 
    printf("GPUmem"); 

    cudaMemcpy(d_d, set, nbytes, cudaMemcpyHostToDevice); 

    dim3 threads = dim3(((size % 512) + 1), 1); 
    dim3 blocks = dim3((threads.x/512) + 1, 1); 

    printf("Copied & DIM setup"); 

    matrixflop<<<blocks, threads>>>(set); 
    printf("Threads created"); 

    cudaMemcpy(set, d_d, nbytes, cudaMemcpyDeviceToHost); 

/*start safezone*/ 
    for(a=0;a<6;a++){ 
     for(b=0;b<6;b++){ 
      printf("%d, ", set[a][b]); 
     } 
     printf("\n"); 
    } 
/*end safezone*/ 
    cudaFreeHost(i); 
    cudaFree(d_d); 

    printf("Success"); 
    getchar(); 

    exit(EXIT_SUCCESS); 
    return 0; 
} 

Отредактировано для включения кода.

+1

Что делает самый базовый пример от NVIDIA? –

+0

Пожалуйста, отредактируйте свое сообщение и включите минимальный пример, который демонстрирует проблему, с которой вы сталкиваетесь. Благодарю. –

+2

Почему ваш код содержит * ошибку * CUDA API, проверяющую ошибку? – talonmies

ответ

3

Вы ссылаетесь на cudaMallocHost с плохими параметрами. Вы хотите сделать:

void *hostmem; 
cudaMallocHost(&hostmem, ...); 

cudaMallocHost модифицирует значения, на который указывает первый параметр, и в вашем случае, вероятно, разбив свой стек.

Смежные вопросы