para comparar dos vectores SIMD:
#include <stdint.h>
#include <xmmintrin.h>
int32_t __attribute__ ((aligned(16))) vector1[4] = { 1, 2, 3, 4 };
int32_t __attribute__ ((aligned(16))) vector2[4] = { 1, 2, 2, 2 };
int32_t __attribute__ ((aligned(16))) result[4];
__m128i v1 = _mm_load_si128((__m128i *)vector1);
__m128i v2 = _mm_load_si128((__m128i *)vector2);
__m128i vcmp = _mm_cmpeq_epi32(v1, v2);
_mm_store_si128((__m128i *)result, vcmp);
Notas: Se supone
- datos a ser de 32 bits enteros
vector1
, vector2
, result
todos tenemos que ser de 16 bytes alineados
- resultado será -1 para igual, 0 para no igual (
{ -1, -1, 0, 0 }
para el ejemplo de código anterior)
ACTUALIZACIÓN
Si lo que desea es un resultado booleano para el caso en que los 4 elementos se ajustan a continuación, puede hacerlo de esta manera:
#include <stdint.h>
#include <xmmintrin.h>
int32_t __attribute__ ((aligned(16))) vector1[4] = { 1, 2, 3, 4 };
int32_t __attribute__ ((aligned(16))) vector2[4] = { 1, 2, 2, 2 };
__m128i v1 = _mm_load_si128((__m128i *)vector1);
__m128i v2 = _mm_load_si128((__m128i *)vector2);
__m128i vcmp = _mm_cmpeq_epi32(v1, v2);
uint16_t mask = _mm_movemask_epi8(vcmp);
int result = (mask == 0xffff);
que la arquitectura es usted ¿utilizando? Todos los SIMD son diferentes. – Phonon
Soy muy, muy nuevo en esto, así que por favor perdona mi ignorancia. Estoy tratando de incluir comandos SIMD usando la plataforma de Intel Parallel studio (¿esto responde su pregunta de algún modo?). –