2012-04-25 79 views

Respuesta

15

Sí, puede usar los intrínsecos en los encabezados * mmintrin.h (emmintrin.h, xmmintrin.h, etc., dependiendo del nivel de SSE que desee usar). En general, esto es preferible al uso del ensamblador por muchas razones.

#include <emmintrin.h> 

int main(void) 
{ 
    __m128i a = _mm_set_epi32(4, 3, 2, 1); 
    __m128i b = _mm_set_epi32(7, 6, 5, 4); 
    __m128i c = _mm_add_epi32(a, b); 

    // ... 

    return 0; 
} 

Tenga en cuenta que este enfoque funciona para la mayoría de los compiladores x86 y x86-64 en diversas plataformas, p. gcc, clang e ICC de Intel en Linux/Mac OS X/Windows e incluso Visual C/C++ de Microsoft (solo Windows, por supuesto).

+0

¿Esto es para gcc o VC++? – pythonic

+4

Tanto gcc como VC++ son compatibles con los intrínsecos. –

+0

FTW, icc también admite estos intrínsecos – hroptatyr

4

Encuentra los encabezados *intrin.h en tu gcc incluye (/usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/ aquí).

Tal vez digno de mención, el encabezado immintrin.h incluye todas las demás intrínsecas según las características que permita (usando -msse2 o -mavx por ejemplo).

4

Lo que quiere es intrinsics, que parecen funciones de biblioteca pero que en realidad están integradas en el compilador, por lo que se traducen en códigos de máquina específicos.

Paul R y hroptatyr describen dónde encontrar la documentación de GCC. Microsoft also has good documentation on the intrinsics in their compiler; incluso si está utilizando GCC, puede encontrar que la descripción de MS de la idea es un mejor tutorial.

+0

¿Qué hay de la arquitectura ARM? ¿Admite NEON SIMD? o esto solo es para x86? – enthusiasticgeek

+1

@enthusiasticgeek La pregunta especifica x86-64. ARM y NEON tienen su propio compilador y sus propios intrínsecos. – Crashworks

Cuestiones relacionadas