Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- #include <omp.h>
- #define n 1000
- using namespace std;
- double par, seq;
- bool show_c = 0;
- float A[n][n] = { 0 };
- float B[n] = { 0 };
- float C0[n] = { 0 };
- float C1[n] = { 0 };
- float C2[n] = { 0 };
- float C4[n] = { 0 };
- void print_vector(float arr[n]) {
- for (int i = 0; i < n; i++) {
- printf("%.2f ", arr[i]);
- }
- cout << "\n";
- }
- void parallel_method(float A[n][n], float B[n], float C[n], int thr_num)
- {
- double t1, t2;
- float tmp = 0;
- int i, j;
- t1 = omp_get_wtime();
- omp_set_dynamic(0);
- omp_set_num_threads(thr_num);
- #pragma omp parallel private(tmp, j)
- {
- #pragma omp for
- for (i = 0; i < n; i++) {
- tmp = 0;
- for (j = 0; j < n; j++) {
- tmp += A[i][j] * B[j];
- }
- C[i] += tmp;
- }
- t2 = omp_get_wtime();
- }
- if (show_c) print_vector(C);
- par = t2 - t1;
- printf("Parallel_method (%d c) time = %.15f\n", thr_num, par);
- //printf("Parallel Speedup = %.3f\n", seq / par);
- //printf("Parallel Efficiency = %.3f\n", seq / (par * thr_num));
- }
- void sequential_method(float A[n][n], float B[n], float C[n])
- {
- double ts1, ts2;
- float tmp = 0;
- ts1 = omp_get_wtime();
- for (int i = 0; i < n; i++) {
- tmp = 0;
- for (int j = 0; j < n; j++) {
- tmp += A[i][j] * B[j];
- }
- C[i] = tmp;
- }
- ts2 = omp_get_wtime();
- if (show_c) print_vector(C);
- seq = ts2 - ts1;
- printf("seq_method time = %.15f\n", seq);
- }
- int main()
- {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- A[i][j] = (float)(i + 1) * log(j + 1);
- }
- B[i] = (float)sqrt(i + 1);
- }
- cout << "n = " << n << endl << endl;
- sequential_method(A, B, C0);
- parallel_method(A, B, C1, 1);
- parallel_method(A, B, C2, 2);
- parallel_method(A, B, C4, 4);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement