madzik4113

openMP SORTOWANIE

Dec 11th, 2014
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include "omp.h"
  6.  
  7. #define MAX_SIZE 1000
  8.  
  9.  
  10. void generate_list(int * x, int n) {
  11. int i,j,t;
  12. for (i = 0; i < n; i++)
  13. x[i] = i;
  14. for (i = 0; i < n; i++) {
  15. j = rand() % n;
  16. t = x[i];
  17. x[i] = x[j];
  18. x[j] = t;
  19. }
  20. }
  21.  
  22. void print_list(int * x, int n) {
  23. int i;
  24. for (i = 0; i < n; i++) {
  25. printf("%d ",x[i]);
  26. printf("\n");
  27. }
  28. }
  29.  
  30. void merge(int * X, int n, int * tmp) {
  31. int i = 0;
  32. int j = n/2;
  33. int ti = 0;
  34.  
  35. while (i<n/2 && j<n) {
  36. if (X[i] < X[j]) {
  37. tmp[ti] = X[i];
  38. ti++; i++;
  39. } else {
  40. tmp[ti] = X[j];
  41. ti++; j++;
  42. }
  43. }
  44. while (i<n/2) { /* finish up lower half */
  45. tmp[ti] = X[i];
  46. ti++; i++;
  47. }
  48. while (j<n) { /* finish up upper half */
  49. tmp[ti] = X[j];
  50. ti++; j++;
  51. }
  52. memcpy(X, tmp, n*sizeof(int));
  53.  
  54. } // end of merge()
  55.  
  56. void mergesort(int * X, int n, int * tmp)
  57. {
  58. if (n < 2) return;
  59.  
  60. #pragma omp task firstprivate (X, n, tmp)
  61. mergesort(X, n/2, tmp);
  62.  
  63. #pragma omp task firstprivate (X, n, tmp)
  64. mergesort(X+(n/2), n-(n/2), tmp);
  65.  
  66. #pragma omp taskwait
  67.  
  68. /* merge sorted halves into sorted list */
  69. merge(X, n, tmp);
  70. }
  71.  
  72.  
  73. int main()
  74. {
  75. int n = 100;
  76. double start, stop;
  77.  
  78. int data[MAX_SIZE], tmp[MAX_SIZE];
  79.  
  80. generate_list(data, n);
  81. printf("Lista przed sortowaniem\n");
  82. print_list(data, n);
  83. start = omp_get_wtime();
  84. #pragma omp parallel
  85. {
  86. #pragma omp single
  87. mergesort(data, n, tmp);
  88. }
  89. stop = omp_get_wtime();
  90. printf("\nLista po sortowaniu\n");
  91. print_list(data, n);
  92. printf("\nCzas: %g\n",stop-start);
  93. }
  94.  
  95.  
  96. MAKEFILE
  97. omp: omp.o
  98. g++ omp.c -o omp -fopenmp
Advertisement
Add Comment
Please, Sign In to add comment