Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <time.h>
- #define size 2048
- #define size2 4096
- #define size3 8192
- typedef struct vector{float a,s,d,f;} vector;
- void addsml(vector v1, vector v2)
- {
- asm(
- "movups %0,%%XMM0 \n\t"
- "movups %1,%%XMM1 \n\t"
- "addps %%XMM1,%%XMM0"
- :
- :"g"(v1) , "g"(v2)
- :
- );
- }
- void addsm(vector* v1, vector* v2, int wielkosc)
- {
- clock_t t, t_all=0;
- t = clock();
- for (int i = 0; i < 100; i++)
- {
- for( int j = 0; j < wielkosc; j++)
- {
- addsml(v1[j], v2[j]);
- }
- }
- t_all = clock() - t;
- printf("Srednia z 10, dodawanie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
- }
- void submsl(vector v1, vector v2)
- {
- asm(
- "movups %0,%%XMM0 \n\t"
- "movups %1,%%XMM1 \n\t"
- "divps %%XMM1,%%XMM0"
- :
- :"g"(v1) , "g"(v2)
- :
- );
- }
- void subsm(vector* v1, vector* v2, int wielkosc)
- {
- clock_t t, t_all=0;
- t = clock();
- for (int i = 0; i < 100; i++)
- {
- for(int j=0;j<wielkosc;j++)
- {
- submsl(v1[j], v2[j]);
- }
- }
- t_all = clock() - t;
- printf("Srednia z 10, odejmowanie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
- }
- void mulsml(vector v1, vector v2)
- {
- asm(
- "movups %0,%%XMM0 \n\t"
- "movups %1,%%XMM1 \n\t"
- "mulps %%XMM1,%%XMM0"
- :
- :"g"(v1) , "g"(v2)
- :
- );
- }
- void mulsm(vector* v1, vector* v2, int wielkosc)
- {
- clock_t t, t_all = 0;
- t = clock();
- for (int i = 0; i < 100; i++)
- {
- for(int j=0;j<wielkosc;j++)
- {
- mulsml(v1[j], v2[j]);
- }
- }
- t_all = clock() - t;
- printf("Srednia z 10, mnozenie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
- }
- void divsml(vector v1, vector v2)
- {
- asm(
- "movups %0,%%XMM0 \n\t"
- "movups %1,%%XMM1 \n\t"
- "divps %%XMM1,%%XMM0"
- :
- :"g"(v1) , "g"(v2)
- :
- );
- }
- void divsm(vector* v1, vector* v2, int wielkosc)
- {
- clock_t t, t_all=0;
- t = clock();
- for (int i = 0; i < 100; i++)
- {
- for(int j=0;j<wielkosc;j++)
- {
- divsml(v1[j], v2[j]);
- }
- }
- t_all = clock() - t;
- printf("Srednia z 10, dzielenie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
- }
- int main()
- {
- struct vector v1[size], v2[size];
- struct vector v3[size2], v4[size2];
- struct vector v5[size3], v6[size3];
- for(int i=0;i<size;i++)
- {
- v1[i].a=random();
- v1[i].s=random();
- v1[i].d=random();
- v1[i].f=random();
- v2[i].a=random();
- v2[i].s=random();
- v2[i].d=random();
- v2[i].f=random();
- }
- for(int i=0;i<size2;i++)
- {
- v3[i].a=random();
- v3[i].s=random();
- v3[i].d=random();
- v3[i].f=random();
- v4[i].a=random();
- v4[i].s=random();
- v4[i].d=random();
- v4[i].f=random();
- }
- for(int i=0;i<size3;i++)
- {
- v5[i].a=random();
- v5[i].s=random();
- v5[i].d=random();
- v5[i].f=random();
- v6[i].a=random();
- v6[i].s=random();
- v6[i].d=random();
- v6[i].f=random();
- }
- printf("Pomiary dla simd:\n");
- addsm(v1, v2, size);
- subsm(v1, v2, size);
- mulsm(v1, v2, size);
- divsm(v1, v2, size);
- addsm(v3, v4, size2);
- subsm(v3, v4, size2);
- mulsm(v3, v4, size2);
- divsm(v3, v4, size2);
- addsm(v5, v6, size3);
- subsm(v5, v6, size3);
- mulsm(v5, v6, size3);
- divsm(v5, v6, size3);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement