检查两个字符向量在OpenCL中是否相等?

时间:2018-09-19 12:38:24

标签: c opencl

我有两个char8向量。我想检查一下它们是否相等。

使用all函数时出现错误:

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (isequal(a1, a2)) return 0; // error on this line

我也尝试过:

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a3 = a1 - a2;
if (all(a3 == 0)) return 0; // error: can't convert from char to int

2 个答案:

答案 0 :(得分:1)

OpenCL的isequal()函数是only defined for the floating-point vector & scalar types,所以这就是您的第一种方法不起作用的原因。

您的第二种方法是正确的;我认为问题在于您正在将char8a3)与int0)进行比较。实际上,您实际上不需要减去向量,等式应该可以正常工作(向量比较运算符得出-1为真,因此all()的MSB测试应该可以。):

char8 a1 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
char8 a2 = {'a', 'b', 'c', 'd', 'e', 'f','g','h'};
if (all(a1 == a2))
    return 0;

或者,您可以将减法的最后一行更改为:

if (all(a3 == (char8)(0))) return 0;

当您再次将char8与另一个char8(全为0)进行比较时,这也应该起作用。

答案 1 :(得分:-1)

您需要使用memcmp函数。

#define MIN(x,y) ((x) > (y) ? (y) : (x))

memcmp(a,b, MIN(sizeof(a), sizeof(b)));

   #include <string.h>

   int memcmp(const void *s1, const void *s2, size_t n);
     

memcmp()函数返回小于,等于或
的整数   如果分别找到s1的前n个字节,则大于零,
  小于,匹配或大于
的前n个字节   s2。

     

对于非零返回值,符号由的符号决定   第一对字节之间的差异(解释为   s1和s2不同的无符号字符)。

     

如果n为零,则返回值为零。

完整说明:http://man7.org/linux/man-pages/man3/memcmp.3.html