在此递归示例中,Pthread中的OpenMP任务等效于什么?

时间:2018-11-19 07:34:10

标签: c pthreads openmp

我正在研究并行编程,并且使用以下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个线程,并且如果所有线程都“忙”,则继续依次释放其中之一,直到再次释放。

有人能指出我正确的方向吗?我已经看到了一些可能看起来真的很复杂的示例,但是我有一个感觉,在这个允许令人尴尬的并行策略的特定示例中,有一种我无法指出的简单方法...

0 个答案:

没有答案