web-dev-qa-db-fra.com

Exemple TBB le plus simple

Quelqu'un peut-il me donner un [~ # ~] tbb [~ # ~ ~] Exemple Comment:

  1. définissez le nombre maximal de threads actifs.
  2. exécuter des tâches indépendantes des autres et présentées sous la forme de fonctions de classe et non statiques.
20
Jofsey

Voici une utilisation plus moderne de parallel_for avec une lambda; compile et fonctionne sur Debian/Wheezy avec g++ -std=c++11 tbb_example.cpp -ltbb && ./a.out:

#include "tbb/parallel_for.h"
#include "tbb/task_scheduler_init.h"
#include <iostream>
#include <vector>

struct mytask {
  mytask(size_t n)
    :_n(n)
  {}
  void operator()() {
    for (int i=0;i<1000000;++i) {}  // Deliberately run slow
    std::cerr << "[" << _n << "]";
  }
  size_t _n;
};

int main(int,char**) {

  //tbb::task_scheduler_init init;  // Automatic number of threads
  tbb::task_scheduler_init init(tbb::task_scheduler_init::default_num_threads());  // Explicit number of threads

  std::vector<mytask> tasks;
  for (int i=0;i<1000;++i)
    tasks.Push_back(mytask(i));

  tbb::parallel_for(
    tbb::blocked_range<size_t>(0,tasks.size()),
    [&tasks](const tbb::blocked_range<size_t>& r) {
      for (size_t i=r.begin();i<r.end();++i) tasks[i]();
    }
  );

  std::cerr << std::endl;

  return 0;
}
16
timday

1-

 //!
 //! Get the default number of threads
 //!
 int nDefThreads = tbb::task_scheduler_init::default_num_threads();

 //!
 //! Init the task scheduler with the wanted number of threads
 //!
 tbb::task_scheduler_init init(nDefThreads);

2-

Peut-être que si votre code le permet, le meilleur moyen de courir une tâche indépendante avec TBB est le parallèle_invoke . Dans le blog de Intel Developers Zone, il y a un post expliquant certains cas de la manière dont l'aide parallèle_invoke pourrait être. Découvrez Ceci

1
Vazquinhos