比较float2s的Equality / Inequality

时间:2017-03-16 23:19:21

标签: c++ cuda

我有一些C ++ / CUDA代码,我想在其中比较不等式的两个float2值。从本质上讲,我需要的是:

float2 cond = {1,0}
float2 *array = ...

while (array[0] != cond)
{
    Code...
}

我的代码的目标是在共享内存的几个进程之间实现一些基本的握手。我希望数组中的一个值作为就绪标志,所以我想监视它的值。我意识到还有其他方法可以在进程之间实现握手,但是我需要在不对已经存在的代码进行许多更改的情况下实现它。

注意:正如其他人所指出的那样,在花车之间进行直接比较绝不是一个好主意。但是,在我的情况下,没有任何操作将应用于相关元素,因此不应该有任何问题。在未来,我肯定会致力于更好的解决方案,但在目前的限制下,这需要足够了。

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效:

float2 cond;
cond.x = 1;  cond.y = 0;
float2 *array = (float2 *)malloc(array_len*sizeof(float2));
// initialize array values, for example:
array[0].x = 0;
array[0].y = 0;

while ((array[0].x != cond.x) || (array[0].y != cond.y))
{
    Some code...
}

我不认为这与CUDA有任何关系,但它在主机代码或CUDA设备代码中都会以类似的方式工作。

也许您在问是否可以通过某种直接比较来完成,例如

array[0] != cond
如你所示,

它不能(因为float2结构定义不提供这样定义的运算符),除非您提供一些额外的脚手架或框架。这个额外的脚手架或框架将包括我在上面的例子中显示的比较代码。

作为最终评论,通常不建议比较浮点数量是否相等。通常建议确定如果两个量子之间的差异小于某个阈值,则它们相等"。但这确实是一个与你的问题不同的主题,也可能是你的"握手"用例不适合此模型,通常在比较"正确性"的数值/算术结果时使用。