首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenCL记录光线相交数据的最佳方法

用OpenCL记录光线相交数据的最佳方法
EN

Stack Overflow用户
提问于 2012-03-09 02:34:24
回答 1查看 723关注 0票数 0

我正在OpenCl中开发一种蒙特卡罗射线示踪器,用于计算辐射传热分析的“视图因子”,并希望知道比较物体x被物体i发射的射线相交次数的最佳方法。

现在,基本算法如下:

  1. 火随机射线,R,远离物体I
  2. 测试交点与物体0-N
  3. 的表面,确定第一个与R相交的对象,让这是对象x
  4. 记录第一个交点,方法是增加一个int的数组,使arrayi +=1

H 19重复总射线数<代码>H 210<代码>H 111将数组中的每个值除以从对象I激发的数组总数。H 212G 213

现在,通常在CPU上的并行实现中,每个线程只需要维护自己的arrayN副本,然后当所有射线都来自对象i时,主线程将对单个数组进行加和以获得结果。

在GPU上的OpenCL中,这不是一种实用的解决方案,因为当N增加时,本地内存就会迅速短缺,而使用带屏障的单个数组将降低性能。

结果数组预成形的最佳实用方法是什么,还是内存障碍是唯一实用的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-10 06:16:07

内核A),按照您的描述,编写自己的arrayN副本,最后返回全局内存。

内核B)用于还原的内核(在您的描述中“主线程”所做的)。

使内核的所有调用在完成时设置事件。使内核B的调用依赖于这些事件。您甚至可以使用内核B的多次调用来进行金字塔缩减,使用两个或更多的数组(可能需要调优)并写出一个和。事件链可以解决依赖关系,并允许深度排队。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9628191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档