C++ Coder

HCP高性能计算架构,实现,编译器指令优化,算法优化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首页 新随笔 联系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

最近在实现一个向量相称的CUDA程序的时候,碰见一个让我很头疼的问题。基本症状是:计算结果在小数据量的时候是完全正确的,如果向量的维数增大到一定数值后,计算结果就不对了。我查了好久,终于找到了问题的源头。竟然是数据类型的问题,写下来提醒后来人!

我在内核函数中使用以下语句:

01.unsigned char tx = threadIdx.x;  
02.unsigned char bx = blockIdx.x;  
03.unsigned int id = tx + bx*blockDim.x;  

 

id竟然不对了。我需要ls个线程,如果ls的数目足够大,使得bx的值溢出了。


解决方法是: 

 

unsigned short bx = blockIdx.x;

头疼的解决总会是好的。欢迎大家的驻足,我继续。。


http://blog.csdn.net/bendanban/article/details/7971447
posted on 2012-10-21 12:56 jackdong 阅读(456) 评论(0)  编辑 收藏 引用 所属分类: CUDA

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理