【发布时间】:2011-11-04 03:56:59
【问题描述】:
我已经开始使用 SSE 优化我的代码。本质上,它是一个光线追踪器,通过将坐标存储在 __m128 数据类型 x、y、z 中来一次处理 4 条光线(四条光线的坐标按轴分组)。但是,我有一个分支语句可以防止被零除,我似乎无法转换为 SSE。在串行是:
const float d = wZ == -1.0f ? 1.0f/( 1.0f-wZ) : 1.0f/(1.0f+wZ);
其中 wZ 是 z 坐标,需要对所有四条射线进行此计算。
我怎样才能把它翻译成 SSE?
我一直在尝试使用 SSE equals 比较,如下所示(现在 wz 属于 __m128 数据类型,其中包含四个射线中每一个的 z 值):
_mm_cmpeq_ps(_mm_set1_ps(-1.0f) , wZ )
然后用它来识别wZ[x] = -1.0的情况,取这种情况的绝对值,然后照常继续计算。
但是我在这方面的努力并没有取得太大的成功。
【问题讨论】:
-
除以零有什么问题?
-
除了明显的问题外,它会通过在 Nz = -1 处为算法的其余部分创建不一致来破坏结果。
标签: c++ sse intrinsics