Как использовать инструкцию сравнения NEON (больше или равно)? - PullRequest
4 голосов
/ 24 сентября 2010

Как вообще использовать инструкции сравнения NEON?

Вот случай, который я хочу использовать, инструкция «Больше или равно»?

В настоящее время у меня есть,

int x;
...
...
...
if(x >= 0)
{
....

}

В NEON я хотел бы использовать x таким же образом, просто x на этот раз - вектор.

int32x4_t x;

...
...
...

if(vcgeq_s32(x, vdupq_n_s32(0))) // Whats the best way to achieve this effect?
{
....

}

1 Ответ

3 голосов
/ 25 сентября 2010

С SIMD не просто перейти от одного скаляра if / then к тесту на нескольких элементах. Обычно вы хотите проверить, является ли любой элемент больше или, если все элементы больше, и обычно для каждого случая будут разные предикаты SIMD, которые вы можете поместить в if (...). Я не вижу ничего подобного в NEON, поэтому вам может не повезти.

Часто вы хотите использовать другой подход, поскольку в оптимизированном коде ветки обычно нежелательны. В идеале вы захотите использовать результат сравнения SIMD в качестве маски для последующих операций (например, выбрать различные значения на основе маски с помощью побитовых операций).

...