__m256 dst = _mm256_cmp_ps(value1, value2, _CMP_LE_OQ);
Если dst равно [0,0,0,-nan, 0,0,0,-nan]; Я хочу иметь возможность узнать первый -nan индекс, в данном случае 3 без выполнения цикла for с 8 итерациями. Это возможно?
dst
[0,0,0,-nan, 0,0,0,-nan];
-nan
3
8
Я бы movmskps результат сравнения, а затем сделать битовое сканирование вперед .
movmskps
Используя встроенные функции (это работает с gcc / clang, см. здесь для альтернатив ):
int pos = __builtin_ctz(_mm256_movemask_ps(dst));
Обратите внимание, что результат bsf не указан, если бит не установлен.Чтобы обойти это, вы можете, например, написать это, чтобы получить 8, если никакой другой бит не установлен:
bsf
int pos = __builtin_ctz(_mm256_movemask_ps(dst) | 0x100);