小编Mar*_*use的帖子

Heisenbug在CUDA内核中,全局内存访问

大约两年前,我写了一个内核,同时处理几个数字网格.出现了一些非常奇怪的行为,导致错误的结果.当利用printf() - 内核中的语句来查找错误时,bug就消失了.

由于截止日期限制,我保持这种方式,虽然最近我认为这是不合适的编码风格.所以我重新访问了我的内核并将其归结为您在下面看到的内容.

__launch_bounds__(672, 2)
__global__ void heisenkernel(float *d_u, float *d_r, float *d_du, int radius,
        int numNodesPerGrid, int numBlocksPerSM, int numGridsPerSM, int numGrids)
{
    __syncthreads();
    int id_sm           = blockIdx.x /   numBlocksPerSM;                                    // (arbitrary) ID of Streaming Multiprocessor (SM) this thread works upon           - (constant over lifetime of thread)
    int id_blockOnSM    = blockIdx.x % numBlocksPerSM;                                      // Block number on this specific SM                                                 - (constant over lifetime of thread)
    int id_r            = id_blockOnSM  * (blockDim.x - 2*radius) + threadIdx.x …
Run Code Online (Sandbox Code Playgroud)

cuda nvcc

4
推荐指数
1
解决办法
298
查看次数

标签 统计

cuda ×1

nvcc ×1