Пример #1
0
 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);
   }
 }