2013-07-28 3 views
0

내 프로그램이 오류없이 컴파일되는 동안 프로그램을 실행하고 초기 C 명령문이 작동하지만 처음 CUDA 함수를 실행하면 cudaMallocHost() 프로그램이 아무 일도하지 않게됩니다. 오류가 없으며 cntr-c를 사용하여 수동으로 종료해야합니다. 나는 여러 부분을 제거하려고 노력했는데, 나는 그것이 나의 쿠다 (CUDA) 기능을 때릴 때마다 똑같은 효과가있는 것으로 보인다. 왜 내 프로그램이 오류없이 작동하지 않습니까?

나는 cuda.hcuda_runtime.h을 포함하고 설치된 NVIDIA SDK와 CUDA 5.5 nvcc.cu 파일을 컴파일하고있다.

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

왜 코드에 * no * CUDA API 오류 검사가 포함되어 있습니까? – talonmies

답변

3

잘못된 매개 변수를 사용하여 cudaMallocHost을 호출하고 있습니다. 당신은하고 싶지 :

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

cudaMallocHost는 값이 첫 번째 매개 변수로 향하고 수정되며, 귀하의 경우 아마도 스택 스매싱된다.

관련 문제