Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <omp.h>
  4. #include <time.h>
  5. const int N=500;
  6. const int M=600;
  7. const int P=300;
  8.  
  9. int main(){
  10. srand(time(NULL));
  11. int macierzA[N][M];
  12. int macierzB[M][P];
  13. long macierzWynikowa[N][P];
  14. int temp;
  15. double start, end;
  16. for(int i=0;i<N;i++){
  17. for(int j=0;j<P;j++){
  18. macierzWynikowa[i][j]=0;
  19. }
  20. }
  21. for(int i=0;i<N;i++){
  22. for(int j=0;j<M;j++){
  23. macierzA[i][j]=rand()%10;
  24. }
  25. }
  26. for(int i=0;i<M;i++){
  27. for(int j=0;j<P;j++){
  28. macierzB[i][j]=rand()%10;
  29. }
  30. }
  31. printf("Bez pragmy:\n");
  32. start = omp_get_wtime();
  33. for(int i=0;i<N;i++){
  34. for(int j=0;j<P;j++){
  35. temp = 0;
  36. for(int k=0;k<M;k++){
  37. temp += macierzA[i][k]*macierzB[k][j];
  38. }
  39. macierzWynikowa[i][j] = temp;
  40. }
  41. }
  42. end = omp_get_wtime();
  43. printf("Czas mnozenia: %lf\n",end-start);
  44.  
  45. printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(static):\n");
  46. start = omp_get_wtime();
  47. #pragma omp parallel for num_threads(7) schedule(static)
  48. for(int i=0;i<N;i++){
  49. #pragma omp parallel for num_threads(7) schedule(static)
  50. for(int j=0;j<P;j++){
  51. #pragma omp critical
  52. {
  53. temp = 0;
  54. }
  55. #pragma omp parallel for num_threads(7) schedule(static)
  56. for(int k=0;k<M;k++){
  57. #pragma omp critical
  58. {
  59. temp += macierzA[i][k]*macierzB[k][j];
  60. }
  61. }
  62.  
  63. macierzWynikowa[i][j] = temp;
  64. }
  65. }
  66. end = omp_get_wtime();
  67. printf("Czas mnozenia: %lf\n",end-start);
  68.  
  69. printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(static,4):\n");
  70. start = omp_get_wtime();
  71. #pragma omp parallel for num_threads(7) schedule(static,4)
  72. for(int i=0;i<N;i++){
  73. #pragma omp parallel for num_threads(7) schedule(static,4)
  74. for(int j=0;j<P;j++){
  75. temp = 0;
  76. #pragma omp parallel for num_threads(7) schedule(static,4)
  77. for(int k=0;k<M;k++){
  78. #pragma omp critical
  79. {
  80. temp += macierzA[i][k]*macierzB[k][j];
  81. }
  82. }
  83. macierzWynikowa[i][j] = temp;
  84. }
  85. }
  86. end = omp_get_wtime();
  87. printf("Czas mnozenia: %lf\n",end-start);
  88.  
  89. printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(dynamic):\n");
  90. start = omp_get_wtime();
  91. #pragma omp parallel for num_threads(7) schedule(dynamic)
  92. for(int i=0;i<N;i++){
  93. #pragma omp parallel for num_threads(7) schedule(dynamic)
  94. for(int j=0;j<P;j++){
  95. temp = 0;
  96. #pragma omp parallel for num_threads(7) schedule(dynamic)
  97. for(int k=0;k<M;k++){
  98. #pragma omp critical
  99. {
  100. temp += macierzA[i][k]*macierzB[k][j];
  101. }
  102. }
  103. macierzWynikowa[i][j] = temp;
  104. }
  105. }
  106. end = omp_get_wtime();
  107. printf("Czas mnozenia: %lf\n",end-start);
  108.  
  109. printf("Dla kazdego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
  110. start = omp_get_wtime();
  111. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  112. for(int i=0;i<N;i++){
  113. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  114. for(int j=0;j<P;j++){
  115. temp = 0;
  116. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  117. for(int k=0;k<M;k++){
  118. #pragma omp critical
  119. {
  120. temp += macierzA[i][k]*macierzB[k][j];
  121. }
  122. }
  123. macierzWynikowa[i][j] = temp;
  124. }
  125. }
  126. end = omp_get_wtime();
  127. printf("Czas mnozenia: %lf\n",end-start);
  128.  
  129. printf("Dla pierwszego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
  130. start = omp_get_wtime();
  131. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  132. for(int i=0;i<N;i++){
  133. for(int j=0;j<P;j++){
  134. temp = 0;
  135. for(int k=0;k<M;k++){
  136. #pragma omp critical
  137. {
  138. temp += macierzA[i][k]*macierzB[k][j];
  139. }
  140. }
  141. macierzWynikowa[i][j] = temp;
  142. }
  143. }
  144. end = omp_get_wtime();
  145. printf("Czas mnozenia: %lf\n",end-start);
  146.  
  147. printf("Dla drugiego fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
  148. start = omp_get_wtime();
  149. for(int i=0;i<N;i++){
  150. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  151. for(int j=0;j<P;j++){
  152. temp = 0;
  153. for(int k=0;k<M;k++){
  154. #pragma omp critical
  155. {
  156. temp += macierzA[i][k]*macierzB[k][j];
  157. }
  158. }
  159. macierzWynikowa[i][j] = temp;
  160. }
  161. }
  162. end = omp_get_wtime();
  163. printf("Czas mnozenia: %lf\n",end-start);
  164.  
  165. printf("Dla trzecigo fora #pragma omp parallel for num_threads(7) schedule(dynamic,3):\n");
  166. start = omp_get_wtime();
  167. for(int i=0;i<N;i++){
  168. for(int j=0;j<P;j++){
  169. temp = 0;
  170. #pragma omp parallel for num_threads(7) schedule(dynamic, 3)
  171. for(int k=0;k<M;k++){
  172. #pragma omp critical
  173. {
  174. temp += macierzA[i][k]*macierzB[k][j];
  175. }
  176. }
  177. macierzWynikowa[i][j] = temp;
  178. }
  179. }
  180. end = omp_get_wtime();
  181. printf("Czas mnozenia: %lf\n",end-start);
  182. return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement