Question

I am trying to learn OMP library task based programming and as an example I copied and pasted the code below taken from a book and it outputs errors

 'task' : expected an OpenMP directive name  

and

 'taskwait' : expected an OpenMP directive name

I can run omp parallel for loops but not tasks. Do you know whether omp tasking needs any further adjustments in visual studio?

 #include "stdafx.h"
 #include <omp.h>

 int fib(int n)
 {
   int i, j;
   if (n<2)
    return n;
 else
 {
   #pragma omp task shared(i) firstprivate(n)
   i=fib(n-1);

   #pragma omp task shared(j) firstprivate(n)
   j=fib(n-2);

   #pragma omp taskwait
   return i+j;
 }
 }

 int main()
{
  int n = 10;

  omp_set_dynamic(0);
  omp_set_num_threads(4);

  #pragma omp parallel shared(n)
  {
     #pragma omp single
     printf ("fib(%d) = %d\n", n, fib(n));
  }
}
Was it helpful?

Solution

Unfortunately, even Visual Studio 2019 still only supports OpenMP 2.0, while Tasks were an OpenMP 3.0 addition and the current standard at the time of writing is 5.0.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top