Когда я попробовать:Является ли AVX встроенным _mm256_cmp_ps, который должен возвращать NaN, когда это правда?
__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);
__m256 c = _mm256_cmp_ps(a, b, _CMP_LT_OQ);
Который является < б я получаю выход:
[0, 0, 0, 0, 0, 0, 0, 0]
Но при попытке:
__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);
__m256 c = _mm256_cmp_ps(b, a, _CMP_LT_OQ);
или
__m256 a = _mm256_set_ps(1, 1, 1, 1, 1, 1, 1, 1);
__m256 b = _mm256_set_ps(0, 0, 0, 0, 0, 0, 0, 0);
__m256 c = _mm256_cmp_ps(a, b, _CMP_GT_OQ);
Iget
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]
Ожидаемое поведение? В документации по адресу https://software.intel.com/en-us/node/524077 просто говорится, что он возвращает результат без указания.
В результате получается все 1s, для истины, которое является NaN. Для false это все 0s, что бывает 0.0. Обычно вы используете результат в виде побитовой маски, поэтому значение float не имеет смысла. –