1

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 ミリ秒) よりも高速である場合がありました。しかし、私は並列アルゴリズムのベンチマークの問題が苦手なので、間違って測定したのかもしれません。とにかく、残念ながら、この観察の実際のコード例を投稿することはできません。

いくつかの経験則、追加の考慮事項、または単に試してベンチマークがありますか?

4

1 に答える 1