首页 文章

可以不同的调用内核共享内存?

提问于
浏览
0

在我的代码中,我需要调用CUDA内核来并行化一些矩阵计算 . 但是,这个计算必须迭代完成大约60,000次(内核在60,000次循环内调用for循环) .

这意味着,如果我在每次调用内核时都使用cudaMalloc / cudaMemcpy,那么大部分时间都花在内存分配和传输上,而且我的速度显着减慢 .

有没有办法说,在for循环之前分配一块内存,在内核的每次迭代中使用该内存,然后在for循环之后,将该内存从设备复制到主机?

谢谢 .

1 回答

  • 2

    是的,你可以完全按照你的描述做到:

    int *h_data, *d_data;
    cudaMalloc((void **)&d_data, DSIZE*sizeof(int));
    h_data = (int *)malloc(DSIZE*sizeof(int));
    // fill up h_data[] with data
    cudaMemcpy(d_data, h_data, DSIZE*sizeof(int), cudaMemcpyHostToDevice);
    for (int i = 0; i < 60000; i++)
      my_kernel<<<grid_dim, block_dim>>>(d_data)
    cudaMemcpy(h_data, d_data, DSIZE*sizeof(int), cudaMemcpyDeviceToHost);
    ...
    

相关问题