2009-09-07 28 views

Respuesta

38

En primer lugar, no recomiendo usar las funciones integradas, ya que no son portátiles (en compiladores del mismo arco).

Utilice intrinsics, GCC does a wonderful job optimizando las intrínsecas SSE en un código aún más optimizado. Siempre puede echar un vistazo al ensamblaje y ver cómo usar SSE para aprovechar todo su potencial.

intrínsecas son fáciles - al igual que las llamadas a funciones normales:

#include <xmmintrin.h> 

__m128 vector1 = _mm_set1_ps(4, 3, 2, 1); // Little endian, stored in 'reverse' 
__m128 vector2 = _mm_set1_ps(7, 8, 9, 0); 

// Addition 
__m128 result = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2 

// A more advanced function, called shuffle 
vector1 = _mm_shuf_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3)); 
// vector1 is now (1, 2, 3, 4) (above shuffle reversed it) 

Por supuesto que hay manera más opciones, SSE es realmente de gran alcance y en mi opinión relativamente fácil de aprender.

+0

¿Sabía que hacer un punto caliente producto de dos matrices de elementos int32 cada uno? – psihodelia

+6

Haz una pregunta y me aseguraré de ayudarte :) – LiraNuna

32

Has solicitado que los recursos:

A practical guide to using SSE with C++: Buena visión general conceptual sobre cómo utilizar eficazmente SSE, con ejemplos.

MSDN Listing of Compiler Intrinsics: Referencia completa para todas sus necesidades intrínsecas. Es MSDN, pero prácticamente todas las características intrínsecas enumeradas aquí también son compatibles con GCC e ICC.

Christopher Wright's SSE Page: 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 parte de su código en intrínsecos, pero verifique el objdump de la salida de su compilador para asegurarse de que está produciendo un código eficiente. La generación de código SIMD sigue siendo una tecnología bastante nueva y es muy posible que el compilador pueda equivocarse en algunos casos.

4

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