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 オプションをつける。