Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <ctime>
- #include <cstdlib>
- #include <fstream>
- #include <omp.h>
- using namespace std;
- int *arr_sum(const int *a, const int *b, int N) {
- int *c = new int[N];
- for (int i = 0; i < N; i++)
- c[i] = a[i] + b[i];
- return c;
- }
- int *arr_sum_par(const int *a, const int *b, int N) {
- int *c = new int[N];
- int i = 0;
- omp_set_dynamic(0);
- int nThreads = omp_get_max_threads();
- if (!nThreads) nThreads = 2;
- omp_set_num_threads(nThreads);
- #pragma omp parallel shared(a, b, c) private(i, N)
- {
- #pragma omp parallel for
- for (i = 0; i < N; i++)
- c[i] = a[i] + b[i];
- }
- return c;
- }
- void print_arr(string filename, int *arr, int N) {
- ofstream out(filename);
- for (int i = 0; i < N; i++)
- out << arr[i] << " ";
- out << endl;
- out.close();
- }
- int main() {
- srand(time(NULL));
- int N = 50000;
- int *a = new int[N];
- int *b = new int[N];
- int *c = nullptr;
- for (int i = 0; i < N; i++) {
- a[i] = rand() % N;
- b[i] = rand() % N;
- }
- double start = clock()/(double)CLOCKS_PER_SEC;
- c = arr_sum(a, b, N);
- double finish = clock()/(double)CLOCKS_PER_SEC;
- const double time1 = finish - start;
- print_arr("sum.txt", c, N);
- delete[] c;
- start = clock()/(double)CLOCKS_PER_SEC;
- c = arr_sum_par(a, b, N);
- finish = clock()/(double)CLOCKS_PER_SEC;
- const double time2 = finish - start;
- print_arr("sum_par.txt", c, N);
- delete[] c;
- cout << "time1: " << time1 << endl;
- cout << "time2: " << time2 << endl;
- delete[] a;
- delete[] b;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement