Quelqu'un peut-il me donner un [~ # ~] tbb [~ # ~ ~] Exemple Comment:
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;
}
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