Я изучаю параллельное программирование и использую следующую директиву 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 потоков, и если все они «заняты», то продолжайте последовательно, пока один из них не будет освобожден, затем повторите параллель.
Может ли кто-нибудь указать мне правильное направление?Я видел примеры, которые кажутся действительно сложными, но у меня есть ощущение, что в этом конкретном примере, который допускает смущающе параллельную стратегию, есть простой подход, на который я не могу указать ...