2010-10-20 20 views
1

Mes données d'entrée sont des données de 16 bits, et j'ai besoin de trouver une médiane de 3 valeurs en utilisant le jeu d'instructions SSE2.Trouver une médiane de 3 valeurs en utilisant le jeu d'instructions SSE2

Si j'ai 3 entrées 16 bits valeurs A, B et C, je pensais le faire comme ceci:

D = max(max(A, B), C) 
E = min(min(A, B), C) 
median = A + B + C - D - E 

fonctions C Je suis de rabotage à utiliser sont:

  • max - _mm_max_epi16
  • min - _mm_min_epi16
  • addition - _mm_add_epi16
  • soustraction - _mm_sub_epi16

Quelqu'un peut-il suggérer un meilleur moyen?

Répondre

5

Votre idée est assez intelligente, mais vous pouvez le faire avec moins d'opérations en utilisant uniquement les valeurs max et min.

t1 = min(A, B) 
t2 = max(A, B) 
t3 = min(t2, C) 
median = max(t1, t3) 

Ce ne sera que 4 instructions SSE par rapport à 8 dans votre implémentation d'origine.

Notez que ceci est en fait juste un élagué sorting network N = 3.

+1

Neat. Je vous remercie –