Ich möchte maximal zwei Vektoren mit 8 x 16 Bit unsigned int Elemente finden.SSE2 intrinsics - finden Sie Max von zwei vorzeichenlosen kurzen Vektoren
__m128i vi_A= _mm_loadu_si128(reinterpret_cast<const __m128i*>(&pSrc[0])); // 8 16-Bit Elements
__m128i vi_B= _mm_loadu_si128(reinterpret_cast<const __m128i*>(&pSrc1[0])); // 8 16-Bit Elements
__m128i vi_Max = _mm_max_epi16(vi_A,vi_B); //<-- Error
Aber diese _mm_max_epi16
ist ein signierter int Vergleich und dieser Überlauf verursacht. Also habe ich versucht, die unsignierte Version zu verwenden, indem SSE4.1- intrinsische
vi_Max = _mm_max_epu16(vi_A,vi_B);
verwenden, aber ich bin nicht zu verwenden SSE4.1- intrinsics erlaubt. Was ist der effiziente Weg, das Maximum dieser Elemente zu finden?
für Ihre schnelle Antwort Danke Wow! Es funktionierte wie Charme! –
XORing ist sehr wahrscheinlich schneller, aber noch wichtiger, es beseitigt die Möglichkeit eines Überlaufs. –
@CodyGray was Überlauf? das Addieren/Subtrahieren/Xorieren eines 16Bit Int mit 0x8000 sind alle genau gleich, ohne Kantenfälle – harold