为什么我的程序停止工作没有错误?

时间:2013-07-28 13:22:57

标签: c cuda

虽然我的程序没有错误编译,但我运行我的程序,我的初始C语句工作,但当我点击我的第一个CUDA函数cudaMallocHost()时,程序就停止做任何事情。我没有错误,我必须使用cntr-c手动退出。我尝试删除各个部分,似乎每当我点击任何一个CUDA函数时,它都会产生相同的效果。

我已添加cuda.hcuda_runtime.h,并且正在使用安装了NVIDIA SDK和CUDA 5.5的.cu编译nvcc文件。

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 个答案:

答案 0 :(得分:3)

您正在使用错误的参数调用cudaMallocHost。你想做的事:

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

cudaMallocHost正在修改其第一个参数指向的值,在您的情况下可能会粉碎您的堆栈。