3

オープン ソースの画像処理ライブラリである OpenCV を使用していますが、アルゴリズムが複雑なため、ビデオ処理に複数のスレッドを使用する必要があります。

C++ 98 でマルチスレッドはどのように行われますか? C++ 11 にはスレッド (std::thread) 用のサポート ライブラリが組み込まれていることは知っていますが、私のプラットフォーム (MSVC++ 2010) にはそれがありません。また、C++ STL の汎用拡張機能であるBoostライブラリには、マルチスレッド用のメソッドがあることも知りました。また、 MSDNサポート (windows.h) により、Windows アプリケーションのスレッドを作成および管理できることも知っています。最後に、クロスプラットフォームの GUI ソリューションであるQt ライブラリがスレッド化をサポートしていることがわかりました。

クロスプラットフォームのマルチスレッド アプリケーションを作成する単純な方法 (サード パーティのライブラリを使用しない) はありますか?

4

3 に答える 3

4

OpenCV は、マルチスレッド化 (より正確には並列処理) のためにさまざまな外部システムに依存しています。可能なオプションは次のとおりです。

  • OpenMP (コンパイラ レベルで処理);
  • Intel の TBB (外部ライブラリ);
  • libdispatch (MacOS、iOS、*BSD など、それをサポートするシステム上);
  • GPGPU は CUDA と OpenCL を使用してアプローチします。

OpenCV の最近のバージョンでは、これらのシステムはparallel_forコンストラクトの背後に「隠されています」 。

これはすべて、並列処理、つまりデータ並列タスク (大まかに言えば、入力の各ピクセルまたは行を並列に処理する) に当てはまります。アプリケーション レベルのマルチスレッド化が必要な場合 (たとえば、マスター スレッドとワーカーを使用する場合など)、POSIX のスレッドや Qt などのフレームワークを使用する必要があります。

于 2013-07-18T11:17:44.220 に答える
2

C++11boost::threadと (ほぼ) 互換性があるものをお勧めします。std::threadクロスプラットフォームであり、非常に成熟しています。
OpenCV の並列処理は内部的なものであり、コードと直接混在することはありませんが、(機能として) 予想以上に多くのリソースとコアを使用する可能性がありますが、これは他の外部プロセスを犠牲にする可能性があります。

于 2013-07-18T14:00:07.840 に答える