stiansjogren icon

main.c

stiansjogren | PRO | 06/11/16 02:53:51 PM UTC | 0 ⭐ | 798 👁️ | Never ⏰ | []
text |

1.56 KB

|

None

|

0 👍

/

0 👎

#include <stdio.h>#include "stdlib.h"#include "smmintrin.h"#include "emmintrin.h"#include "time.h"#include "time_meas.h"#include "math.h" void m16_vv(int16_t *x, int16_t *y, int16_t *z, int N){	__m128i *x128, *y128, *z128;	x128 = (__m128i *)x;	y128 = (__m128i *)y;	z128 = (__m128i *)z;	int i;	for(i=0;i<(N>>3); i++){		z128[i] =  _mm_slli_epi16( _mm_mulhi_epi16(x128[i], y128[i]),1);	}}     void m16_vv_mulhrs(int16_t *x, int16_t *y, int16_t *z, int N){	__m128i *x128, *y128, *z128;	x128 = (__m128i *)x;	y128 = (__m128i *)y;	z128 = (__m128i *)z;	int i;	for(i=0;i<(N>>3); i++){		z128[i] =  _mm_slli_epi16( _mm_mulhrs_epi16(x128[i], y128[i]),1);	}}     int main() {  	int16_t x[2048]; int16_t y[2048]; int16_t z[2048];	int i,j;  	time_t t; 	/* Intializes random number generator */    srand((unsigned) time(&t));	for( j = 0 ; j < 2048 ; j++ ){ 		x[j] = rand()%1000;		y[j] = rand()%1000; 		z[j] = 0;   	} 	printf("x = [ ");	for( j = 0 ; j < 2048 ; j++ ){ 		printf("%d, ", x[j]); 	}	printf(" ] \n");	printf("y = [ "); 	for( j = 0 ; j < 2048 ; j++ ){ 		printf("%d, ", y[j]);		}	printf("]\n"); 	m16_vv(x,y,z,2048);	printf("z = [ ");	for (i=0;i<16; i++){	printf("%d, ", z[i]);    } 	printf(" ]\n"); 	printf("should be "); 	printf(" = [ ");	for (i=0;i<16; i++){		printf("%d, ", (int)((x[i]*y[i])/pow(2,16)) *2  );		}	printf(" ]\n");	time_stats_t ts;	reset_meas (&ts);	start_meas (&ts); 	unsigned long long k;	for(k=0;k< 4000000; k++){		m16_vv(x,y,z,2048); 	}	stop_meas (&ts);	printf("difference:  %lld \n", ts.diff); return 0;}

Comments