Advertisement
Guest User

Untitled

a guest
Mar 31st, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. //
  2. // Created by otomo on 31.03.20.
  3. //
  4. #include "stdio.h"
  5. #include "omp.h"
  6. #include "stdlib.h"
  7. #include "string.h"
  8.  
  9. int main(int argc, char *argv[]) {
  10.  
  11. if(argc < 3) {
  12. printf("Usage: <matrix_size>");
  13. return EXIT_FAILURE;
  14. }
  15.  
  16. int N = atoi(argv[1]);
  17. int c[N][N];
  18. int d[N][N];
  19.  
  20. int a[N][N], b[N][N], f[N][N], l[N][N];
  21.  
  22. double start, end, actual_time;
  23.  
  24.  
  25. // ========= INIT FIELDS =========
  26. for (size_t i = 0; i < N; ++i) {
  27. for (size_t j = 0; j < N; ++j) {
  28. a[i][j] = rand() % 100 + 1;
  29. b[i][j] = rand() % 100 + 1;
  30. f[i][j] = rand() % 100 + 1;
  31. l[i][j] = rand() % 100 + 1;
  32. }
  33. }
  34.  
  35. if(strcmp(argv[2], "serial") == 0 ) {
  36. // ========= SERIAL IMPLEMENTATION 1 =========
  37. start = omp_get_wtime();
  38. for (size_t i = 0; i < N; ++i) {
  39. for (size_t j = 0; j < N; ++j) {
  40. c[i][j] = a[i][j] * b[i][j];
  41. }
  42. }
  43. end = omp_get_wtime();
  44. actual_time = end-start;
  45. printf("Serial implementation 1: WT Used: %f\n", actual_time);
  46.  
  47. // ========= SERIAL IMPLEMENTATION 2 =========
  48. start = omp_get_wtime();
  49. for (size_t j = 0; j < N; ++j) {
  50. for (size_t i = 0; i < N; ++i) {
  51. c[i][j] = a[i][j] * b[i][j];
  52. }
  53. }
  54. end = omp_get_wtime();
  55. actual_time = end-start;
  56. printf("Serial implementation 2: WT Used: %f\n", actual_time);
  57. return EXIT_SUCCESS;
  58. }
  59.  
  60.  
  61.  
  62.  
  63. // ========= PARALLEL IMPLEMENTATION 1 =========
  64. start = omp_get_wtime();
  65. #pragma omp parallel for
  66. for (size_t i = 0; i < N; ++i) {
  67. #pragma omp parallel for
  68. for (size_t j = 0; j < N; ++j) {
  69. c[i][j] = a[i][j] * b[i][j];
  70. }
  71. }
  72. end = omp_get_wtime();
  73. actual_time = end-start;
  74. printf("Parallel implementation 1: WT Used: %f\n", actual_time);
  75.  
  76. // ========= PARALLEL IMPLEMENTATION 2 =========
  77. start = omp_get_wtime();
  78. #pragma omp parallel for
  79. for (size_t j = 0; j < N; ++j) {
  80. #pragma omp parallel for
  81. for (size_t i = 0; i < N; ++i) {
  82. d[i][j] = a[i][j] * b[i][j];
  83. }
  84. }
  85. end = omp_get_wtime();
  86. actual_time = end-start;
  87. printf("Parallel implementation 2: WT Used: %f\n", actual_time);
  88.  
  89. return EXIT_SUCCESS;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement