Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ============================================================================
- Name : APD_LAB7.c
- Author : eu
- Version :
- Copyright : No copyright found. You can do everything you want with this code.
- Description : Hello OpenMP World in C
- ============================================================================
- */
- #include <omp.h>
- #include <stdio.h>
- #include <stdlib.h>
- /**
- * Hello OpenMP World prints the number of threads and the current thread id
- */
- //int log2(int x) {
- // int l = 0;
- // while (x != 1) {
- // x >>= 1;
- // ++l;
- // }
- // return l;
- //}
- void Comprim_iter(int R[10][10], int j, int n) {
- int m = log2(n);
- int k, i;
- int k2;
- int k2_1;
- for (k = m - 1; k >= 0; --k) {
- k2 = 1 << k;
- k2_1 = 1 << (k + 1);
- #pragma omp parallel for
- for (i = k2; i <= k2_1 - 1; ++i) {
- R[i - 1][j] = R[2 * i - 1][j] + R[2 * i][j];
- }
- }
- }
- int main(int argc, char *argv[]) {
- int A[10];
- int P[10];
- int R[10][10];
- int n = 4;
- int i, j;
- for (i = 0; i < 10; i++) {
- A[i] = P[i] = 0;
- for (j = 0; j < 10; j++)
- R[i][j] = 0;
- }
- A[0] = 2;
- A[1] = 6;
- A[2] = 3;
- A[3] = 8;
- #pragma omp parallel for private(i)
- for (j = 0; j < n; j++) {
- for (i = 0; i < n; i++) {
- if (A[i] < A[j]) {
- R[i + n - 1][j] = 1;
- } else {
- R[i + n - 1][j] = 0;
- }
- }
- }
- for (j = 0; j <= n; j++) {
- Comprim_iter(R, j, n);
- P[j] = R[0][j];
- }
- #pragma omp parallel for
- for (j = 0; j < n; j++) {
- A[P[j]] = A[j];
- }
- for (i = 0; i < n; i++) {
- printf("%d ", A[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement