Как использовать неоновое сравнение (больше или равно) инструкции?

StackOverflow https://stackoverflow.com/questions/3788380

Вопрос

Как использовать инструкции неонового сравнения в целом?

Вот случай, я хочу использовать, больше, чем-либо равнозначно для обучения?

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

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

}

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

int32x4_t x;

...
...
...

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

}
Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top