关于纹理访问的问题

cjwbeyond 2010-03-10 01:24:00
texture<float, 1, cudaReadModeElementType> texfloat;

__global__void function()
{
int weight[9];
float sumweight = 0;

//calc weight[0];
...
weight0 = tex1Dfetch(texfloat, weight[0]);// ------ step 1

//calc weight[1];
...
weight1 = tex1Dfetch(texfloat, weight[1]);// ------ step 2

sumweight = weight0 + weight1; // ------ step 3
}
现在计算step1和2时,weight0和weight1返回值都正确(都为0.1~0.9),但是step3时,返回值就不正常(=0)。如果我把step3换成“sumweight=weight0”或者“sumweight=weight1”时返回sumweight也正确,就是一相加就不对。很奇怪的问题,希望大牛们赐教。
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 l7331014 的回复:]
引用 7 楼 cjwbeyond 的回复:
好像是kernel函数中的执行语句的数量有限制,我超过一定的数量就不对了,不超过就没问题,看来是得另外想招了


超过了2M条指令?LZ的程序有多复杂?
如果kernel没执行,更可能的是有bug吧.
[/Quote]

或使用资源(smem和/或register)过多,导致连一个block也启动不起来.
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cjwbeyond 的回复:]
好像是kernel函数中的执行语句的数量有限制,我超过一定的数量就不对了,不超过就没问题,看来是得另外想招了
[/Quote]

超过了2M条指令?LZ的程序有多复杂?
如果kernel没执行,更可能的是有bug吧.
cjwbeyond 2010-03-12
  • 打赏
  • 举报
回复
好像是kernel函数中的执行语句的数量有限制,我超过一定的数量就不对了,不超过就没问题,看来是得另外想招了
cjwbeyond 2010-03-11
  • 打赏
  • 举报
回复
引用 3 楼 mimi122 的回复:
weight0,weight1是什么类型的,应该是float型吧

对,都是float型
mimi122 2010-03-11
  • 打赏
  • 举报
回复
weight0,weight1是什么类型的,应该是float型吧
cjwbeyond 2010-03-11
  • 打赏
  • 举报
回复
我是把sumweight作为结果输出来的,这个代码里面没有体现出来,输出这部分肯定没问题

[Quote=引用 5 楼 l7331014 的回复:]
看一下对应的ptx码.
如果改为sumweight = weight0*1.0f + weight1;哪?
另外问一句,你是如何看sumweigh的值的?
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cjwbeyond 的回复:]
还是不行,还是=0
引用 1 楼 l7331014 的回复:float  sumweight  =  0; 改为: float  sumweight  =  0.0f; 试一下?
[/Quote]

看一下对应的ptx码.
如果改为sumweight = weight0*1.0f + weight1;哪?
另外问一句,你是如何看sumweigh的值的?
cjwbeyond 2010-03-10
  • 打赏
  • 举报
回复
还是不行,还是=0
引用 1 楼 l7331014 的回复:
float  sumweight  =  0;
改为:
float  sumweight  =  0.0f;
试一下?
  • 打赏
  • 举报
回复
float sumweight = 0;
改为:
float sumweight = 0.0f;
试一下?

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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