ConcRT parallel_for などの並列 for ループの実装があるとします。すべての作業を 1 つの for ループ本体内に配置するのが常に最善ですか?
次の例を見てください。
for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
}
for(size_t i = 0; i < size(); ++i)
{
DoSomethingElse(a[i], b[i]);
}
と比べて
for(size_t i = 0; i < size(); ++i)
{
DoSomething(a[i], b[i]);
DoSomethingElse(a[i], b[i]);
}
2 番目のバリアントは当然の方法ですが、並列処理に関しては他の考慮事項があるのでしょうか?
parallel_for を使用すると、オプション 1 が 2 番目のオプション (平均で約 30 ミリ秒から約 38 ミリ秒) よりも高速である場合がありました。しかし、私は並列アルゴリズムのベンチマークの問題が苦手なので、間違って測定したのかもしれません。とにかく、残念ながら、この観察の実際のコード例を投稿することはできません。
いくつかの経験則、追加の考慮事項、または単に試してベンチマークがありますか?