Práctica SSE ints vs. floats

Cuando se trata tanto de ints como de flotadores en SSE (AVX), ¿es una buena práctica convertir todos los ints en flotadores y trabajar solo con flotadores? Debido a que solo necesitamos unas pocas instrucciones SIMD después de eso, todo lo que necesitamos usar es agregar y comparar las instrucciones ( <, <=, == ) que esta conversión, espero, debería conservar por completo.

Expandir mis comentarios en una respuesta.

Básicamente, usted está sopesando la siguiente compensación:

Stick con entero:

  • El SSE entero es de baja latencia y alto rendimiento. (doble problema en Sandy Bridge)
  • Limitado al ancho SIMD de 128 bits.

Convertir a punto flotante:

  • Benefíciese del AVX de 256 bits.
  • Latencias más altas y solo sum / resta de un solo problema (en Sandy Bridge)
  • Incurre en la sobrecarga de conversión inicial.
  • Restringe la entrada a aquellos que caben en un float sin pérdida de precisión.

Yo diría que te quedes con el entero por ahora. Si no desea duplicar el código con las versiones float , esa es su decisión.

Las únicas veces que he visto que la emulación de enteros con punto flotante se vuelve más rápida es cuando tienes que hacer divisiones.


Tenga en cuenta que no he mencionado la legibilidad ya que sumergirse en la vectorización manual probablemente implica que el rendimiento es más importante.