Что эквивалентно задачам OpenMP в Pthreads в этом примере рекурсии? - PullRequest
0 голосов
/ 19 ноября 2018

Я изучаю параллельное программирование и использую следующую директиву OpenMP для распараллеливания рекурсивной функции:

voir recursiveFunction()
{
  //sequential code

  #pragma omp task
  {
    recursiveFunction(); //First instance
  }                     //Independent from each other,
                        //they allow an embarrassingly parallel strategy

  recursiveFunction(); //Second instance
}

Это работает достаточно хорошо, но мне трудно пытаться сделать эквивалентное распараллеливание, используя только pthreads.

Я думал что-то вроде этого:

voir recursiveFunction()
{
  //sequential code

  Pthread_t thread;

  //First instance
  pthread_create(thread, NULL, recursiveFunction, recFuncStructParameter);

  //Second instance
  recursiveFunction();
}

И ... Я как-то здесь потерян ... Я не могу понять, как контролировать количество потоков, если дляНапример, я хочу, чтобы было создано только 16 потоков, и если все они «заняты», то продолжайте последовательно, пока один из них не будет освобожден, затем повторите параллель.

Может ли кто-нибудь указать мне правильное направление?Я видел примеры, которые кажутся действительно сложными, но у меня есть ощущение, что в этом конкретном примере, который допускает смущающе параллельную стратегию, есть простой подход, на который я не могу указать ...

...