Почему пример SHUFFLE из OpenCL недействителен? - PullRequest
0 голосов
/ 12 сентября 2018

Существует пример shuffle OpenCL во время документа .

//Examples that are not valid are:
uint8 mask;
short16 a;
short8 b;
b = shuffle(a, mask); // invalid

Но я не могу понять, почему. Я тестировал это во время Android с AndroidStudio, и результат сказал: Сбой программы сборки: BC-src-code: 9: 9: {9: 9-9: 16}: ошибка: нет соответствующей встроенной функции для вызова ' перетасовать '. Затем я меняю short на int , вот так:

uint8 mask;
int16 a;
int8 b;
b = shuffle(a, mask);

и это нормально. Я не могу найти причину из документа, кто-нибудь может мне помочь? Спасибо!

1 Ответ

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

Я думаю, что критическая часть описания в спецификации это:

Размер каждого элемента в маске должен соответствовать размеру каждого элемента в результате.

Я понимаю, что если вы хотите перетасовать вектор short с, ваша маска должна быть вектором ushort; маска uint8 будет действительна только для тасующих векторов с элементами по 4 байта - другими словами, int, uint и float.

Таким образом, следующее должно снова быть действительным:

ushort8 mask; // <-- changed
short16 a;
short8 b;
b = shuffle(a, mask); // now valid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...