Existen diferentes factores intrínsecos porque corresponden a instrucciones diferentes.
Existen diferentes instrucciones de carga porque Intel desea mantener la libertad de diseñar un procesador en el que los vectores de doble precisión estén respaldados por un archivo de registro físico diferente que los vectores de precisión simple o vectores enteros, o utilizar unidades de ejecución diferentes. Cualquiera de estos puede agregar latencia adicional si no hubiera una manera de especificar que los datos se carguen en el archivo de registro apropiado o en la red de reenvío.
Una forma de pensar es que las diferentes instrucciones hacen lo mismo, pero además proporcionan una pista al procesador diciéndole cómo los datos que se están cargando serán utilizados por las instrucciones futuras. Esto puede ayudar al procesador a asegurarse de que los datos estén en el lugar correcto para ser utilizados de la manera más eficiente posible, o puede ser ignorado por el procesador.
Tenga en cuenta que esto no es solo una hipotética. Existen procesadores en los que el uso de una carga vectorial entera (MOVDQA) para cargar datos consumidos por una operación de punto flotante requiere más tiempo que el uso de una carga de punto flotante para obtener datos para una operación de coma flotante (y viceversa) . Consulte el Manual de optimización de Intel o las notas de Agner Fog para obtener más detalles sobre el tema. Use la carga que coincida con la forma en que usará los datos para evitar el riesgo de tales riesgos de desempeño en el futuro.
El tipo de retorno para '_mm_load_pd' es' __m128d', no '__m128' –
@PaulR: Eso ... tiene todo el sentido del mundo. No me di cuenta de eso por completo. Gracias por mencionarlo. :) – Mehrdad