Wenn versuchen:Ist AVX intrinsic _mm256_cmp_ps soll NaN zurückgeben, wenn es wahr ist? i
__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);
, die eine < b ich die Ausgabe erhalten:
[0, 0, 0, 0, 0, 0, 0, 0]
Aber wenn man versucht:
__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);
oder
__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);
I get
[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]
ist dieses erwartete Verhalten? Die Dokumentation unter https://software.intel.com/en-us/node/524077 sagt nur, dass es das Ergebnis ohne Angabe zurückgibt.
Das Ergebnis ist alle 1s, für wahr, was zufällig ein NaN ist. Bei false sind es 0, was 0,0 ist. Normalerweise verwenden Sie das Ergebnis als bitweise Maske, daher ist der Gleitkommawert nicht wirklich sinnvoll. –