私は最近、C++での作業をやり直し、整数値の行列から最適なパスを見つける簡単なテストアプリケーションを作成しました。このアプリケーションのパフォーマンスを向上させるために、C++ 11 std :: threadを使用してマルチスレッドを実装しました。利用可能なすべてのスレッドを悪用して使用していますか?
unsigned int threadCount = std::thread::hardware_concurrency();
std::vector<std::thread> threads;
for (unsigned int threadIndex = 0; threadIndex < threadCount; threadIndex++) {
threads.push_back(std::thread(&AltitudeMapPath::bestPath, this, threadCount, threadIndex));
}
for (auto& thread : threads) {
thread.join();
}
現在、私は利用可能なスレッドの総数を判断し、各スレッドに対してテストを実行します。
はそれ試してみて、与えられたシステムのために利用可能なすべてのスレッドを使用するには、悪い習慣です...これは素晴らしい仕事をしているが、それは私が考えるようになりましたか?この単純な例だけでなく、マルチスレッドのプロダクションレベルのアプリケーションは、できるだけ多くのスレッドを取り込もうとします(問題が許す限り)か、それほど貪欲ではありませんか?
おかげで、
私はこの質問はかなり広いと思います。おそらくユーザーがスレッドの数を自分で指定できるようにプログラムにパラメータを追加するのでしょうか? –
'std :: async'を見てください。それはあなたに生のスレッドよりもいくらか抽象度を与えます。実際の生産コードでは、タスクベースのライブラリを使用します。インテルTBB、マイクロソフトPPLまたはアップルGCD。 – Jens
@Jensお役立ち情報さて、これは私をC++に戻すためのちょっとしたプロジェクトです...マルチスレッドとCUDAプログラミングを使いこなしています。しかし、大きな画像について考えるのは常に良いことです! – ductiletoaster