请问CUDA现在支持递归吗?要不支持的话,我下面的程序怎么改啊?

ahnselina 2011-11-17 08:34:55
_global__ void f(struct point *head,struct point *last,float sigma)
{
struct point *hl;/*hl contains the remotest point C*/
struct point *p=head->next;
float h,max=0;
while(p->next!=last)
{
h=len(head->x,head->y,p->x,p->y,last->x,last->y);
if(h>max)
{
max=h;
hl=p;
}
p=p->next;
} //这段程序是在找距离最大的点
if(max<=sigma) /*It is not a feature point*/
{
head->next=last;
}
else /*It is a feature point*/
{
f(head,hl,sigma);
f(hl,last,sigma);
}
}
...全文
571 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cyrosly 2012-01-07
  • 打赏
  • 举报
回复
已经支持递归了,但用的时候要谨慎,一般在比如计算随递归深度N次方递增或递减或者单个线程或者单个warp内的递归可以考虑,如果是跨block的递归,则由于要考虑全局同步,所以效率肯定会受影响,这种情况下不建议使用。毕竟也只是“支持”而已
ahnselina 2011-12-13
  • 打赏
  • 举报
回复
嗯,谢谢,其实我也是这样想的,哈哈[Quote=引用 4 楼 alfacuton 的回复:]
你可以在 Host 部分(CPU部分)设计递归啊,然后递归的实现部分由 GPU来做就可以了.
但是不知道这样的效率如何..
[/Quote]
alpha.5 2011-12-07
  • 打赏
  • 举报
回复
你可以在 Host 部分(CPU部分)设计递归啊,然后递归的实现部分由 GPU来做就可以了.
但是不知道这样的效率如何..
ahnselina 2011-12-05
  • 打赏
  • 举报
回复
不过我不知道具体到我的上面的程序,不用递归你有没有一个好的办法解决?你输入的这段程序我看到过,不过感觉对我启发不是很大,不管怎样还是谢谢你[Quote=引用 1 楼 alfacuton 的回复:]
CUDA 肯定是不支持递归的.你要开启GPU多线程,对应上线程和线程块,like:

C/C++ code
int x=threadIdx.x+blockIdx.x*blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
int offset=x+y*blockDim.x*gridDim.x;
[/Quote]
ahnselina 2011-12-05
  • 打赏
  • 举报
回复
嗯,谢谢你O(∩_∩)O~[Quote=引用 1 楼 alfacuton 的回复:]
CUDA 肯定是不支持递归的.你要开启GPU多线程,对应上线程和线程块,like:

C/C++ code
int x=threadIdx.x+blockIdx.x*blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
int offset=x+y*blockDim.x*gridDim.x;
[/Quote]
alpha.5 2011-11-21
  • 打赏
  • 举报
回复
CUDA 肯定是不支持递归的.你要开启GPU多线程,对应上线程和线程块,like:
int x=threadIdx.x+blockIdx.x*blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;
int offset=x+y*blockDim.x*gridDim.x;

581

社区成员

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

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