Empezando con SSE

Quiero aprender más sobre el uso de la ESS .

¿Qué formas hay de aprender, además de la lectura obvia de los manuales del desarrollador de software Intel® 64 e IA-32 Architectures ?

Principalmente estoy interesado en trabajar con las funciones incorporadas de GCC X86 .

En primer lugar, no recomiendo usar las funciones integradas, ya que no son portátiles (a través de comstackdores del mismo arco).

Al usar intrínsecos , GCC hace un trabajo maravilloso al optimizar los intrínsecos de SSE en un código aún más optimizado. Siempre puede echar un vistazo al ensamblaje y ver cómo utilizar SSE a su máximo potencial.

Los intrínsecos son fáciles, al igual que las llamadas de función normales:

#include  // portable to all x86 compilers int main() { __m128 vector1 = _mm_set_ps(4.0, 3.0, 2.0, 1.0); // high element first, opposite of C array order. Use _mm_setr_ps if you want "little endian" element order in the source. __m128 vector2 = _mm_set_ps(7.0, 8.0, 9.0, 0.0); __m128 sum = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2 vector1 = _mm_shuffle_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3)); // vector1 is now (1, 2, 3, 4) (above shuffle reversed it) return 0; } 

Utilice _mm_load_ps o _mm_loadu_ps para cargar datos de arrays.

Por supuesto, hay muchas más opciones, el SSE es realmente poderoso y, en mi opinión, relativamente fácil de aprender.

Consulte también https://stackoverflow.com/tags/sse/info para obtener algunos enlaces a guías.

Como pediste recursos:

Una guía práctica para usar SSE con C ++ : buena descripción conceptual sobre cómo usar SSE de manera efectiva, con ejemplos.

MSDN Listado de intrínsecos del comstackdor : referencia completa para todas sus necesidades intrínsecas. Es MSDN, pero casi todos los intrínsecos listados aquí también son compatibles con GCC e ICC.

Página SSE de Christopher Wright : Referencia rápida sobre los significados de los códigos de operación SSE. Supongo que los manuales de Intel pueden cumplir la misma función, pero esto es más rápido.

Probablemente sea mejor escribir la mayoría de su código en intrínsecos, pero compruebe el objeto de la salida de su comstackdor para asegurarse de que esté produciendo un código eficiente. La generación de código SIMD es todavía una tecnología bastante nueva y es muy posible que el comstackdor pueda fallar en algunos casos.

¡Creo que las guías de investigación y optimización del Dr. Agner Fog son muy valiosas! También tiene algunas bibliotecas y herramientas de prueba que aún no he probado. http://www.agner.org/optimize/