Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <omp.h>
- using namespace std;
- unsigned __int64 fibRecursive(int n)
- {
- return n < 3 ? 1 : fibRecursive(n-1) + fibRecursive(n-2);
- }
- unsigned __int64 fibParallel(int n)
- {
- if(n < 3)
- {
- return 1;
- }
- else
- {
- unsigned __int64 firstCall;
- unsigned __int64 secondCall;
- #pragma omp task shared(firstCall) firstprivate(n)
- {
- if(n <= 40)
- {
- firstCall = fibRecursive(n - 1);
- }
- else
- {
- firstCall = fibParallel(n - 1);
- }
- }
- #pragma omp task shared(secondCall) firstprivate(n)
- {
- if(n <= 40)
- {
- secondCall = fibRecursive(n - 2);
- }
- else
- {
- secondCall = fibParallel(n - 2);
- }
- }
- #pragma omp taskwait
- return firstCall + secondCall;
- }
- }
- int main (int argc, char *argv[])
- {
- omp_set_dynamic(0);
- omp_set_num_threads(4);
- auto start = omp_get_wtime();
- #pragma omp parallel
- {
- #pragma omp single
- {
- cout << fibParallel(50) << endl;
- }
- }
- cout << omp_get_wtime() - start << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement