CUDA tips

__syncthreads的用法,防止wait forever的情况

  • http://www.cnblogs.com/dwdxdy/p/3215136.html

一个自己写的Bug。。。感觉应该还蛮常见的

  • __shared__ int s_data[BLOCKWIDTH][BLOCKWIDTH];
    if(val == 0) return;  // make sure maybe its connected
    
    int label = Block1DAddress;
    
    while(1)
    {
      // Pass 1 of the CCL algorithm
      s_labels[Block1DAddress] = label;
      if(Block1DAddress == 0) s_changed[0] = 0;
      __syncthreads();
      ...
      if(s_changed[0] == 0) break;
    }
    

    上述程序,我让val == 0的线程全部return了,但是下面while里面写了如果Block1DAddress==0的话才break,这样导致了如果一个block里面的第0个thread的值是0,s_changed就永远无法初始化为0

MEM issue

  • http://stackoverflow.com/questions/7903566/how-is-2d-shared-memory-arranged-in-cuda