Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. /*
  2. ============================================================================
  3. Name : APD_LAB7.c
  4. Author : eu
  5. Version :
  6. Copyright : No copyright found. You can do everything you want with this code.
  7. Description : Hello OpenMP World in C
  8. ============================================================================
  9. */
  10. #include <omp.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. /**
  14. * Hello OpenMP World prints the number of threads and the current thread id
  15. */
  16.  
  17. //int log2(int x) {
  18. // int l = 0;
  19. // while (x != 1) {
  20. // x >>= 1;
  21. // ++l;
  22. // }
  23. // return l;
  24. //}
  25.  
  26. void Comprim_iter(int R[10][10], int j, int n) {
  27. int m = log2(n);
  28.  
  29. int k, i;
  30. int k2;
  31. int k2_1;
  32.  
  33. for (k = m - 1; k >= 0; --k) {
  34. k2 = 1 << k;
  35. k2_1 = 1 << (k + 1);
  36. #pragma omp parallel for
  37. for (i = k2; i <= k2_1 - 1; ++i) {
  38. R[i - 1][j] = R[2 * i - 1][j] + R[2 * i][j];
  39. }
  40.  
  41. }
  42. }
  43.  
  44. int main(int argc, char *argv[]) {
  45.  
  46. int A[10];
  47. int P[10];
  48. int R[10][10];
  49. int n = 4;
  50. int i, j;
  51. for (i = 0; i < 10; i++) {
  52. A[i] = P[i] = 0;
  53. for (j = 0; j < 10; j++)
  54. R[i][j] = 0;
  55. }
  56.  
  57. A[0] = 2;
  58. A[1] = 6;
  59. A[2] = 3;
  60. A[3] = 8;
  61.  
  62. #pragma omp parallel for private(i)
  63.  
  64. for (j = 0; j < n; j++) {
  65. for (i = 0; i < n; i++) {
  66. if (A[i] < A[j]) {
  67. R[i + n - 1][j] = 1;
  68. } else {
  69. R[i + n - 1][j] = 0;
  70. }
  71. }
  72. }
  73.  
  74. for (j = 0; j <= n; j++) {
  75. Comprim_iter(R, j, n);
  76. P[j] = R[0][j];
  77. }
  78.  
  79. #pragma omp parallel for
  80.  
  81. for (j = 0; j < n; j++) {
  82. A[P[j]] = A[j];
  83. }
  84.  
  85. for (i = 0; i < n; i++) {
  86. printf("%d ", A[i]);
  87. }
  88. return 0;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement