我正在研究并行编程,并且使用以下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个线程,并且如果所有线程都“忙”,则继续依次释放其中之一,直到再次释放。
有人能指出我正确的方向吗?我已经看到了一些可能看起来真的很复杂的示例,但是我有一个感觉,在这个允许令人尴尬的并行策略的特定示例中,有一种我无法指出的简单方法...