新手求助,关于GPU上使用树结构

小妹我作为一个新手刚刚入门,遇到了点困难,向大家请教一下
我编写了一个实现三维热度图的程序,主要用于计算大量热点对中国各个地区产生的热度值,比如说我定义了1000个热点,这1000个热点会对北京,天津,沈阳等等全国各个地区城市产生热度影响值,根据各个城市的经纬度不同,产生的热度值也不同,在GPU上为每个城市分配一个线程,计算每个城市的热度值是并行运行的。我现在遇到的问题是,当热点数目特别大的时候,我经常需要计算上百万个热点对各个城市产生热度值,计算时间就会很长,往往需要四五个小时,于是我想利用四叉树解决这个问题。一个城市的热度值只会被在其周围一定范围内的热点影响,超出这个范围内的热点对其的影响热度值可以近似为0,我想利用四叉树将大量的热点按地域经纬度分类,在针对一个城市热度值计算时先进行树的遍历,只计算会产生热度的热点。在CPU上我可以定义热点结构体,利用递归和指针将这个树结构构造出来,但是在传递到GPU中,显存应该是不支持这种结构体指针吧,而且热点是随机的,不同范围内的热点数目也是不同的,如何在显存中保存这个热点的四叉树结构,求各位大神指点迷津

LZ您好,您的问题大致答复如下:

1:我无法评价您的问题和算法,因为我不懂这个。

2:结构体指针,链表,树,这些CUDA都可以支持的,形式上和C语言中的基本一致,只是要注意指针指向的空间什么的都得是显存中的,而不能是host端内存中的。

您可以参考下结构体指针的实现的讨论:
http://cudazone.nvidia.cn/forum/forum.php?mod=viewthread&tid=6820&extra=page%3D1

3:使用这样的方法,可能导致访存效率大幅度下降,您需要仔细考虑和评估下访存效率,以及其他可能的代替方法。

您的问题大致答复如上,主要是一些思路方面的,供您参考。

祝您好运~

谢谢您的帮助,最近刚刚把这个问题解决完了,时间有点久,嘿嘿,还是很感谢您对帮助