Проверяем, равны ли два символьных вектора в OpenCL? - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть два вектора char8.Я хотел бы проверить, равны ли они.

Я получаю сообщение об ошибке при использовании всей функции:

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 голосов
/ 19 сентября 2018

Функция OpenCL isequal() определена только для векторных и скалярных типов с плавающей точкой , поэтому ваш первый подход не работает.

Ваш второй подход заключается вправильном пути;Я полагаю, проблема в том, что вы сравниваете char8 (a3) с int (0).На самом деле вам не нужно вычитать векторы, равенство должно работать нормально (операторы сравнения векторов дают -1 для true, поэтому тест 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).

0 голосов
/ 19 сентября 2018

вам нужно использовать функцию 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 () возвращаетцелое число меньше, равно или
больше нуля, если найдены первые n байтов s1, соответственно,
меньше, соответствует или больше первых n байтов
s2.

Для ненулевого возвращаемого значения знак определяется знаком различия между первой парой байтов (интерпретируемой как символ без знака), которые отличаются по s1 и s2.

Если nноль, возвращаемое значение ноль.

Полное описание: http://man7.org/linux/man-pages/man3/memcmp.3.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...