我有一些C ++ / CUDA代码,我想在其中比较不等式的两个float2值。从本质上讲,我需要的是:
float2 cond = {1,0}
float2 *array = ...
while (array[0] != cond)
{
Code...
}
我的代码的目标是在共享内存的几个进程之间实现一些基本的握手。我希望数组中的一个值作为就绪标志,所以我想监视它的值。我意识到还有其他方法可以在进程之间实现握手,但是我需要在不对已经存在的代码进行许多更改的情况下实现它。
注意:正如其他人所指出的那样,在花车之间进行直接比较绝不是一个好主意。但是,在我的情况下,没有任何操作将应用于相关元素,因此不应该有任何问题。在未来,我肯定会致力于更好的解决方案,但在目前的限制下,这需要足够了。
答案 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
结构定义不提供这样定义的运算符),除非您提供一些额外的脚手架或框架。这个额外的脚手架或框架将包括我在上面的例子中显示的比较代码。
作为最终评论,通常不建议比较浮点数量是否相等。通常建议确定如果两个量子之间的差异小于某个阈值,则它们相等"。但这确实是一个与你的问题不同的主题,也可能是你的"握手"用例不适合此模型,通常在比较"正确性"的数值/算术结果时使用。