C++ 比较是否相等/不相等

C++ 比较是否相等/不相等,c++,cuda,C++,Cuda,我有一些C++/CUDA代码,我想在其中比较两个float2值的不平等性。基本上,我需要的东西大致如下: float2 cond = {1,0} float2 *array = ... while (array[0] != cond) { Code... } 我的代码的目标是在共享内存的两个进程之间实现一些基本的握手。我希望数组中的一个值用作就绪标志,因此我希望监视它的值。我意识到还有其他方法可以实现进程之间的握手,但我需要在不对已经存在的代码进行太多更改的情况下实现这一点 注意:正

我有一些C++/CUDA代码,我想在其中比较两个float2值的不平等性。基本上,我需要的东西大致如下:

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

while (array[0] != cond)
{
    Code...
}
我的代码的目标是在共享内存的两个进程之间实现一些基本的握手。我希望数组中的一个值用作就绪标志,因此我希望监视它的值。我意识到还有其他方法可以实现进程之间的握手,但我需要在不对已经存在的代码进行太多更改的情况下实现这一点


注意:正如其他人所指出的,在浮动之间进行直接比较从来都不是一个好主意。但是,在我的例子中,没有任何操作将应用于所讨论的元素,因此不应该存在任何问题。将来我肯定会找到更好的解决方案,但在我目前的限制下,这就足够了。

类似的方法应该可以:

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
struct定义没有提供这样定义的操作符),除非您提供一些额外的脚手架或框架。这个额外的脚手架或框架将包括我在上面的例子中所展示的比较代码


最后一点,通常不建议比较浮点量是否相等。通常,建议确定如果两个量之间的差值小于某个阈值,则它们是“相等的”。但这与您的问题实际上是一个单独的主题,您的“握手”用例可能不适合此模型,通常在比较数字/算术结果的“正确性”时使用此模型。

使用浮点值对我来说似乎是一个特别糟糕的主意。我理解这一点。任何一个被比较的元素都不会应用任何操作,因此这应该不是问题。所发生的一切是它将被设置为{1,0}或{0,0}。我知道有无数更好的选择,但我现在正处于不幸的限制下工作。