cuda里的求余运算

chenbo888666999 2010-08-13 09:14:52
cuda里的求余运算结构好奇怪呀:

__device__ unsigned int dsync=0;
unsigned int sync=0;

__global__ void kernel()
{
int tid=threadIdx.x;
int bid=blockIdx.x;

if(bid%2==0 && tid==0)
{
atomicInc(&dsync,33);
}
}
由于一直没找到程序的错误,所以写了一个简单的测试程序,测试原来程序中使用院子函数的情况。我的bid范围为0~31,按理说经过上面的kernel运算后dsync应该是16才对呀,但是输出的结果却是dsync=26,但是我把if(bid%2==0 && tid==0)改为if(bid<16 && tid==0)结构就是16,为什么求余运算都不对呀?
...全文
604 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
agathah 2011-10-31
  • 打赏
  • 举报
回复
如果是对2取模,可以用位操作代替?
试试看if((bid&1)==0 && tid==0) ?
dirdirdir3 2011-10-26
  • 打赏
  • 举报
回复
很有可能是操作符优先级的问题..........
if((bid%2)==0 && tid==0)
guankm 2011-10-24
  • 打赏
  • 举报
回复
cuda不建议做除法和取模运算。。。
ddweidong 2011-10-19
  • 打赏
  • 举报
回复
我也遇到这种问题,求余和除法都没作用,cuda-gdb调试打印求余和除法的结果时,给出这个警告: Variable is not live at this point. Returning garbage value.

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧