сравнение с поплавками в неоновых

1

Я думаю, что это глупая проблема, но я попытался на день решить это, не повезло, так вот.

У меня есть регистр из четырех векторов (float32x4), и я хочу сделать некоторый процесс для некоторых из них, а другой я хочу установить его на 0.

Например, эта проблема в c:

for (int i=1; i<=4; i++)
{
    float b = 4/i;
    if(b<=3)
        result += process(b);
}

поэтому первый не будет обрабатываться, но другой будет, поэтому мне нужен регистр, в котором первая строка имеет 0, а другая - результат.

Но я не знаю, как это сделать на неон.

Я знаю, что есть vcltq_f32, но я попытался с этим, но без результата.

  • 0
    Я не уверен, почему вы отметили эти вопросы как opencv , но, похоже, он даже не удаленно связан с opencv.
  • 1
    извини, ты прав, я убрал это
Показать ещё 1 комментарий
Теги:
arm
neon
intrinsics

2 ответа

3
Лучший ответ

Как это:

const float32x4_t vector_3 = vdupq_n_f32(3.0f);
uint32x4_t mask = vcleq_f32(vector_b, vector_3);
vector_b = (float32x4_t)vandq_u32((uint32x4_t)vector_b, mask);
  • 0
    спасибо, я решаю это с побитовым выбором, но это также работает для меня.
  • 0
    да; vbsl также будет работать. Ванд обладает тем достоинством, что вам не нужно иметь вектор нулей.
0

Я мало знаю о Neon, но в большинстве SIMD-архитектур вы должны это делать, сравнивая и маскируя (побитовое И). Вы используете команду сравнения, которая затем генерирует маску, которую вы обычно можете использовать для этого.

  • 0
    я думаю, что это не работает с поплавками для того, что я понимаю
  • 0
    Быстрый поиск Google , кажется, предполагает , что он делает работу, например bulletphysics.org/Bullet/phpBB3/...
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню