关于循环展开的问题

chencb 2009-12-24 01:14:03
大家帮我看看这个编译提示是什么意思?
(1)
#pragma unroll <----- Advisory: Loop was not unrolled, unexpected control flow construct
for(int j=0; j < BUFW; j++)
{
if((i==0 || i==BUFH-1) && (j==0 || j==BUFW-1))
continue;

(2)
#pragma unroll <----- Advisory: Loop was not unrolled, not an innermost loop
for(int i=0; i < BUFH; i++)
{
#pragma unroll
for(int j=0; j < BUFW; j++)
{

(3)
#pragma unroll <----- Advisory: Loop was not unrolled, inline assembly
for(int i=1; i <= DIM; i++)
buffer[idx][idy][i] = tex3D(texPrev, (float)coor_x, (float)coor_y, (float)i);

经验证代码运行结果正确,请高人分别给说说这三个建议的注意问题。
...全文
314 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lixingjian4 的回复:]
第3个应该是tex3D函数在编译时直接嵌入汇编导致的。。。
不过不太明白为啥嵌入汇编就不可以展开了,不知道编译器认为哪里不好实现
[/Quote]

可能是cuda上的gpu函数参数是固定分配寄存器的,因此,对优化有影响.
lixingjian4 2009-12-31
  • 打赏
  • 举报
回复
第3个应该是tex3D函数在编译时直接嵌入汇编导致的。。。
不过不太明白为啥嵌入汇编就不可以展开了,不知道编译器认为哪里不好实现
OpenHero 2009-12-30
  • 打赏
  • 举报
回复
第一个应该是continue
wanggangkahn 2009-12-30
  • 打赏
  • 举报
回复
问一下LZ,你的编译提示是在哪里找到的?
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 l7331014 的回复:]
1)循环内控制流程太复杂(?),编译不能正确展开循环.
[/Quote]

估计问题出在continue上.
  • 打赏
  • 举报
回复
1)循环内控制流程太复杂(?),编译不能正确展开循环.
ilyyyfn 2009-12-24
  • 打赏
  • 举报
回复
1、应该是说展开的循环里面不能有控制语句
2、应该是说只有展开最内层循环
3、就不太明白了,好像说用了内联汇编???

580

社区成员

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

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