3,881
社区成员
发帖
与我相关
我的任务
分享
//SSE2 SIMD example
#include <stdio.h>
#include <intrin.h>
typedef unsigned __int16 WORD;
__declspec(align(32)) WORD x[16];
__declspec(align(32)) WORD y[16];
__inline void histogram_add_Intrinsic_SSE2(const WORD x[16], WORD y[16]) {
__m128i b2 = _mm_load_si128((__m128i *)&y[8]);
__m128i b1 = _mm_load_si128((__m128i *) y );
__m128i a2 = _mm_load_si128((__m128i *)&x[8]);
__m128i a1 = _mm_load_si128((__m128i *) x );
a1 = _mm_add_epi16(a1, b1);
a2 = _mm_add_epi16(a2, b2);
_mm_store_si128((__m128i *)&y[8], a2);
_mm_store_si128((__m128i *) y , a1);
}
int main() {
int i;
for (i=0;i<16;i++) {
x[i]=i+1;
y[i]=8;
}
printf("x: ");for (i=0;i<16;i++) printf("%2hd ",x[i]);printf("\n");
printf("y: ");for (i=0;i<16;i++) printf("%2hd ",y[i]);printf("\n");
histogram_add_Intrinsic_SSE2(x,y);printf("--------------------\n");
printf("x: ");for (i=0;i<16;i++) printf("%2hd ",x[i]);printf("\n");
printf("y: ");for (i=0;i<16;i++) printf("%2hd ",y[i]);printf("\n");
return 0;
}
//x: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
//y: 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
//--------------------
//x: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
//y: 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
//