Cuda 光线跟踪算法中的分支预测函数

Cuda 光线跟踪算法中的分支预测函数,cuda,opencl,gpu,raytracing,branch-prediction,Cuda,Opencl,Gpu,Raytracing,Branch Prediction,有没有人在任何光线跟踪碰撞测试内核(Cuda、Opencl)中尝试过用于GPU计算的自定义分支预测算法 我是否应该担心低深度(2-5)的性能 例如: trace for the first group of rays check for previous ray depth predictor, if zero, guess zero. if gt one, guess d>=1 go

有没有人在任何光线跟踪碰撞测试内核(Cuda、Opencl)中尝试过用于GPU计算的自定义分支预测算法

我是否应该担心低深度(2-5)的性能

例如:

 trace for the first group of rays
     check for previous ray depth predictor, if zero, guess zero.
                                   if gt one, guess d>=1
           go one level deeper in tracing kernel.(with pseudo stack & recursivity)

                           recursively repeat

                     go out of one depth after saving guess state

                  recursively go out of depths.
这能超过硬件水平预测吗?这能使总跟踪时间更好吗

此伪代码中的“if”语句不应包含任何“if”。因此它仅根据预测值计算零或实际值

谢谢。

这是来自:

使用预测而不是控制流。谓词允许 GPU并行执行两条执行路径,可以 比试图通过巧妙的方法最小化工作量更快 控制流量。原因是如果没有内存操作 存在于?:运算符(也称为三元运算符)中 操作被转换为单个cmov_逻辑指令,该指令 在单个循环中执行。这方面的一个例子是:

If(A>B){C+=D;}else{C-=D;}

将其替换为:

int-factor=(A>B)?1:-1; C+=系数*D

在第一段代码中,这将转换为IF/ELSE/ENDIF 条件码序列,每个周期约为8个周期。如果有分歧, 该代码在36个时钟内执行;否则,在约28个时钟内。枝干 未采取的成本为四个周期(一个指令槽);枝 添加四个延迟槽以从指令中提取指令 缓存,总共16个时钟。由于执行掩码已保存, 然后对分支进行修改,然后恢复,当 发散,不发散时约8个时钟

在第二段代码中,是?: 运算符以向量单位执行,因此不需要额外的CF指令 生成。由于指令是顺序相关的,因此 代码块以12个周期执行,速度提高1.3倍。到 见此,第一个循环是(A>B)比较,其结果 是第二个循环的输入,即cmov_逻辑因子bool, 1, -1. 最后一个循环是MAD指令:MAD C,factor,D,C。 如果条件代码和ALU指令之间的比率较低, 这是移除控制流的一个好模式

看起来你的0/1选择可能基于预测。不确定这是否是你要找的

资料来源: