void operator()() { /* Figure out the number of threads */ unsigned int size; pfunc::get_num_threads (taskmgr, size); /* Prepare all the tasks for launch */ TaskType sub_tasks[size]; std::vector<applicator> funcs; for (unsigned int rank=0; rank<size; ++rank) { SpaceType subspace = PartitionerType::create (space.begin(), space.end(), rank, size); funcs.push_back (applicator(func.split(), subspace)); } /* Launch the tasks */ for (unsigned int rank=0; rank<size; ++rank) { pfunc::spawn (taskmgr, sub_tasks[rank], funcs[rank]); } /* wait for them */ pfunc::wait_all (taskmgr, sub_tasks, sub_tasks+size); /* aggregate the results */ for (unsigned int rank=0; rank<size; ++rank) { func.join(funcs[rank].func); } }