我的CUDA程序调用如下:
for(; ;
{
cudaRun<<<>>>();
}
当cudaRun只开一个block,2、3个线程时就会出现运算结果的错误?
我测试过当数据量都比较大时,也就是线程数比较多时,不会有问题,一运行到线程数少的时候就出问题……而且小数据(少线程数时)只运行一次貌似也不会有问题,即不要循环调用。
具体测试代码贴出来看看
需要排除是否是kernel里面写得有问题
再来看是否是CUDA的bug
CUDA 确实有过这样的bug,就是线程少了,会有计算错误,不过那个是很久以前的bug了。。
开勇牛叉!:right:
那个代码蛮长的,挺麻烦的,现在尝试用别的方法实现。
global void SetCompressor(int *dbStarts, int *dbEnds, int *qStarts, int qEnds, int compressor, int cur, int num)
{
int tid = blockIdx.xblockDim.x+threadIdx.x;
for(; tid<num-cur; tid+=gridDim.xblockDim.x)
{
compressor[tid] = (int)(dbStarts[cur+tid]<dbEnds[cur+tid] && qStarts[cur+tid]<qEnds[cur+tid]);
__syncthreads();
}
}
现在有这么样的一段代码,这样的实现有没有什么问题?貌似一运行到这段代码就出问题……而且发现,当num-cur <blockDim.x时,我只开一个block没问题,开多个就有问题……
检查一下你的边界条件,画一个图出来,这个地方很有可能出问题了。边界没定义好