首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >raymarching可以在SIMD架构下加速吗?

raymarching可以在SIMD架构下加速吗?
EN

Stack Overflow用户
提问于 2012-02-05 18:14:33
回答 3查看 319关注 0票数 1

答案似乎是否定的,因为光线行进是高度有条件的,即每条光线都遵循唯一的执行路径,因为在每一步,我们都会检查不透明度、终止等,这些都会根据单独光线的方向而变化。

因此,SIMD似乎在很大程度上无法加速这一过程;相反,需要MIMD来加速。

这有意义吗?或者我是否遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-31 17:59:59

如前所述,您可能会通过使用SSE指令实现向量数学来获得加速(请注意here讨论的效果-也适用于其他方法)。这种方法将使代码保持简洁和可维护。

然而,我假设您的问题是关于“数据包遍历”(或类似的东西),换句话说,处理不同光线的多个标量值:

原则上,应该可以将着色推迟到另一个过程。一旦裸行军通道终止,SIMD分组就可以用新的光线重新填充,并且临时结果被存储为阴影通道的输入。这将允许并行化特定的、依赖于大小写的百分比的代码来分解所有四个SIMD通道。平铺图像并以Morton顺序索引其中的光线可能也是一个好主意,以避免缓存压力(除非您的几何体是严格的程序)。

除非你试一试,否则你不会知道它是否值得。我的猜测是,如果是这样的话,加速的数量可能不值得只有四个通道的复杂代码。

您是否考虑过使用SIMT架构,例如可编程GPU?最新的可编程图形板允许您以交互速率执行光线行进(请参阅在浏览器here中发生的情况)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 21:57:49

前几天,我为menger海绵构建了一个基于软件的raymarcher。当时没有使用SIMD,我也没有使用特殊的算法。我只是在X和Y中跟踪从-1到1,这是目标纹理的U和V。然后我得到了一个相机位置和一个目的地,我用它来计算光线行进的增量向量。

之后,我使用一个常量的迭代值来执行,其中只有一个分支决定是否与分形体积相交。所以如果我的相机眼睛是E,我的方向向量是D,我必须找到最小的t,如果我找到了,或者达到了最大距离,我就中断循环。最后,我得到了t-由此我计算出了碎片的颜色。

在我看来,应该可以通过SSE1/2并行化这些操作,因为可以通过将向量(__m64 / __m128)中的字段设为空来解决分支问题,因此进一步的单指令多路运算在这里将不适用。这真的取决于你是什么光线行进/投射,但如果你只是计算一个函数的碎片颜色(就像我这里的分形曲线),而不是非线性地访问内存,有一些技巧可以实现。

当然,这个答案包含了一些猜测,但是当我将这个例程并行化后,我会通知你。

票数 1
EN

Stack Overflow用户

发布于 2012-02-05 21:30:09

例如,只有在SSE的范围内,你才能并行地对向量进行操作。

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

https://stackoverflow.com/questions/9148419

复制
相关文章

相似问题

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