Advertisement
Guest User

wcesnije2

a guest
May 23rd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5.  
  6. #define size 2048
  7. #define size2 4096
  8. #define size3 8192
  9.  
  10. typedef struct vector{float a,s,d,f;} vector;
  11.  
  12. void addsml(vector v1, vector v2)
  13. {
  14. asm(
  15. "movups %0,%%XMM0 \n\t"
  16. "movups %1,%%XMM1 \n\t"
  17. "addps %%XMM1,%%XMM0"
  18. :
  19. :"g"(v1) , "g"(v2)
  20. :
  21. );
  22. }
  23.  
  24. void addsm(vector* v1, vector* v2, int wielkosc)
  25. {
  26. clock_t t, t_all=0;
  27. t = clock();
  28. for (int i = 0; i < 100; i++)
  29. {
  30. for( int j = 0; j < wielkosc; j++)
  31. {
  32. addsml(v1[j], v2[j]);
  33. }
  34. }
  35. t_all = clock() - t;
  36. printf("Srednia z 10, dodawanie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
  37. }
  38.  
  39.  
  40. void submsl(vector v1, vector v2)
  41. {
  42. asm(
  43. "movups %0,%%XMM0 \n\t"
  44. "movups %1,%%XMM1 \n\t"
  45. "divps %%XMM1,%%XMM0"
  46. :
  47. :"g"(v1) , "g"(v2)
  48. :
  49. );
  50. }
  51.  
  52. void subsm(vector* v1, vector* v2, int wielkosc)
  53. {
  54. clock_t t, t_all=0;
  55. t = clock();
  56. for (int i = 0; i < 100; i++)
  57. {
  58. for(int j=0;j<wielkosc;j++)
  59. {
  60. submsl(v1[j], v2[j]);
  61. }
  62. }
  63. t_all = clock() - t;
  64. printf("Srednia z 10, odejmowanie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
  65. }
  66.  
  67.  
  68.  
  69. void mulsml(vector v1, vector v2)
  70. {
  71. asm(
  72. "movups %0,%%XMM0 \n\t"
  73. "movups %1,%%XMM1 \n\t"
  74. "mulps %%XMM1,%%XMM0"
  75. :
  76. :"g"(v1) , "g"(v2)
  77. :
  78. );
  79. }
  80.  
  81. void mulsm(vector* v1, vector* v2, int wielkosc)
  82. {
  83. clock_t t, t_all = 0;
  84. t = clock();
  85. for (int i = 0; i < 100; i++)
  86. {
  87. for(int j=0;j<wielkosc;j++)
  88. {
  89. mulsml(v1[j], v2[j]);
  90. }
  91. }
  92. t_all = clock() - t;
  93. printf("Srednia z 10, mnozenie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
  94. }
  95.  
  96.  
  97.  
  98. void divsml(vector v1, vector v2)
  99. {
  100. asm(
  101. "movups %0,%%XMM0 \n\t"
  102. "movups %1,%%XMM1 \n\t"
  103. "divps %%XMM1,%%XMM0"
  104. :
  105. :"g"(v1) , "g"(v2)
  106. :
  107. );
  108. }
  109.  
  110. void divsm(vector* v1, vector* v2, int wielkosc)
  111. {
  112. clock_t t, t_all=0;
  113. t = clock();
  114. for (int i = 0; i < 100; i++)
  115. {
  116. for(int j=0;j<wielkosc;j++)
  117. {
  118. divsml(v1[j], v2[j]);
  119. }
  120. }
  121. t_all = clock() - t;
  122. printf("Srednia z 10, dzielenie: %f sekund dla %d liczb.\n",((float)t_all/10)/CLOCKS_PER_SEC, wielkosc);
  123. }
  124.  
  125.  
  126. int main()
  127. {
  128. struct vector v1[size], v2[size];
  129. struct vector v3[size2], v4[size2];
  130. struct vector v5[size3], v6[size3];
  131.  
  132. for(int i=0;i<size;i++)
  133. {
  134. v1[i].a=random();
  135. v1[i].s=random();
  136. v1[i].d=random();
  137. v1[i].f=random();
  138. v2[i].a=random();
  139. v2[i].s=random();
  140. v2[i].d=random();
  141. v2[i].f=random();
  142. }
  143. for(int i=0;i<size2;i++)
  144. {
  145. v3[i].a=random();
  146. v3[i].s=random();
  147. v3[i].d=random();
  148. v3[i].f=random();
  149. v4[i].a=random();
  150. v4[i].s=random();
  151. v4[i].d=random();
  152. v4[i].f=random();
  153. }
  154. for(int i=0;i<size3;i++)
  155. {
  156. v5[i].a=random();
  157. v5[i].s=random();
  158. v5[i].d=random();
  159. v5[i].f=random();
  160. v6[i].a=random();
  161. v6[i].s=random();
  162. v6[i].d=random();
  163. v6[i].f=random();
  164. }
  165. printf("Pomiary dla simd:\n");
  166. addsm(v1, v2, size);
  167. subsm(v1, v2, size);
  168. mulsm(v1, v2, size);
  169. divsm(v1, v2, size);
  170.  
  171. addsm(v3, v4, size2);
  172. subsm(v3, v4, size2);
  173. mulsm(v3, v4, size2);
  174. divsm(v3, v4, size2);
  175.  
  176. addsm(v5, v6, size3);
  177. subsm(v5, v6, size3);
  178. mulsm(v5, v6, size3);
  179. divsm(v5, v6, size3);
  180.  
  181. return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement