Intel TBB による並列化
とりあえずこういうシンプルな for 構文を並列化したい。
#include <iostream> #include <vector> int main () { const int N = 100; std::vector<int> v(N); for(int i=0; i<N; ++i) { v[i] = i*i; } }
まず for の中身を lambda 式に書き換える。
#include <iostream> #include <vector> int main () { const int N = 100; std::vector<int> v(N); auto calc = [&](int i) { v[i] = i*i; }; for(int i=0; i<N; ++i) { calc(i); } }
続いてこれを tbb にする。
#include <iostream> #include <vector> #include <tbb/parallel_for.h> #include <tbb/task_scheduler_init.h> int main () { const int N = 100; std::vector<int> v(N); auto calc = [&](int i) { v[i] = i*i; }; tbb::parallel_for(size_t{0}, (size_t)N, calc); }
コンパイルするときは -ltbb
オプションをつける。