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

标签 c cuda

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

我包含了 cuda.hcuda_runtime.h,并且正在用 nvcc 编译一个 .cu 文件安装了 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;
}

编辑以包含代码。

最佳答案

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

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

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

关于c - 为什么我的程序没有错误地停止工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17908666/

相关文章:

c - 指向整数的指针数组

c++ - SDL2 根本没有收到任何事件

c - 程序不等待第二次读取

caching - 如何避免 CUDA GPU 中的 TLB 未命中(以及高全局内存重放开销)?

我可以在 C 中的数组上使用 Duff 的设备吗?

c - 为什么我在 printf 中的输出是打印 -nan 和 0.0000 C 语言

c++ - CUDA 推力 : copy from device to device

c++ - 从 Rcpp 包调用 CUDA API 函数导致段错误

c++ - 尝试链接从 CUDA 对象构建的共享库时出现 undefined symbol

cuda - 哪个线程运行传递给 cudaStreamAddCallback 的回调?