Как оптимизировать цикл?

У меня есть следующая функция узкого места.

typedef unsigned char byte;
void CompareArrays(const byte * p1Start, const byte * p1End, const byte * p2, byte * p3)
{
     const byte b1 = 128-30;
     const byte b2 = 128+30;
     for (const byte * p1 = p1Start; p1 != p1End; ++p1, ++p2, ++p3) {
        *p3 = (*p1 < *p2 ) ? b1 : b2;
    }
}

Я хочу заменить код C ++ внутренними функциями SSE2. Я пробовал _mm_cmpgt_epi8 , но он использовал сравнение со знаком. Мне нужно сравнение без знака.

Есть ли какой-нибудь трюк (SSE, SSE2, SSSE3) для решения моей проблемы?

Примечание: Я не хочу использовать многопоточность в этом случае.

6
задан Alexey Malistov 21 October 2010 в 12:05
поделиться