码迷,mamicode.com
首页 > 其他好文 > 详细

cuda自己常犯的傻逼错误

时间:2015-05-12 08:02:58      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

1.使用shared memory时如果申明

__shared__ myshared;

在使用kernel函数时不需要指明shared的大小

如果使用

extern __shared__ myshared;

需要再使用kernel时再<<<>>>中指明所使用的sharedmemory的大小.

2.没有为申明的device变量申请空间

再运行cuda代码的时候,如果没有使用检错函数,对于没有为在GPU中使用的内存使用

cudamalloc分配存储空间的时候,代码可以编译通过,并且可以运行,成功,但实际上并没有

发起kernel函数,最后导致的结果就是我们看到结果时错误的,但是却不知道错误再哪里

所以发现没有得到kernel运行后期望的输出时首先检错device'上的内醋是否分配了

或者输出的结果

3.

__syncthreads(); }
if (tid < 32) {
if (blockSize >= 64) sdata[tid] += sdata[tid + 32];//for every time a warp to execute one instruction
__syncthreads();
if (blockSize >= 32) sdata[tid] += sdata[tid + 16];
__syncthreads();
if (blockSize >= 16) sdata[tid] += sdata[tid + 8];
__syncthreads();
if (blockSize >= 8) sdata[tid] += sdata[tid + 4];
__syncthreads();
if (blockSize >= 4) sdata[tid] += sdata[tid + 2];
__syncthreads();
if (blockSize >= 2) sdata[tid] += sdata[tid + 1];
__syncthreads();
}
if (tid == 0) c[blockIdx.x] = sdata[0];

在进行reduction的时候我们将循环展开,消除线程对齐带来的麻烦.

 

cuda自己常犯的傻逼错误

标签:

原文地址:http://www.cnblogs.com/Erdos001/p/4496245.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!