C++17において,OSによらず容易にマルチタスクを行えるようになった.
従来のfor_eash,algotrith.hの各メソッドに実行ポリシーを指定するだけで行えるようになる.
namespace std::execution {
class sequenced_policy { unspecified };
class parallel_policy { unspecified };
class parallel_unsequenced_policy { unspecified };
inline constexpr sequenced_policy seq{ unspecified };
inline constexpr parallel_policy par{ unspecified };
inline constexpr parallel_unsequenced_policy par_unseq{ unspecified };
}
・seq
Sequential.すなわち逐次実行であり,普通のfor_each文と変わらない.
・par
並列実行を許可する.強制ではなく環境によっては逐次実行される.
・par_unseq
並列化およびベクトル化を許可する.
ベクトル化については以下を参照.
https://ja.wikipedia.org/wiki/%E3%83%99%E3%82%AF%E3%83%88%E3%83%AB%E5%8C%96
例:
いずれの場合も第一引数に実行ポリシーを指定するだけでよい.
#include <algorithm>
#include <execution>
...
//for_eachの並列実行
std::for_each(std::execution::par,
enemys.begin(),
enemys.end(),
[](auto* enemy)
{
enemy->Move();
});
//algorithmの並列
//all_ofを並列に処理している
const auto rst = std::all_of(std::execution::par,vec.begin(),
vec.end(), [](const auto x) { return x < 9; });