2009-06-24 7 views
3

私たちはWindowsプラットフォーム向けに何かを開発しています。私たちは今日、PCに存在する複数のコアを利用したいと考えています。Windows上のC/C++用の並列API

私はVS2010では、Concurrency Runtimeがあることを知っています。しかし、まだベータ版です。その間、今すぐ品質コードをリリースする必要がありますが、後で円滑な移行を可能にするAPIにとっては良い選択です。その他の提案?

答えて

2

私の知っている:

  • Intel Thread Building Block library(オープンソース)
  • C++ 0xのスレッドライブラリのC++ 0xのスレッドライブラリのサポート(いつか将来的には、クロスプラットフォーム)
  • Just Software実装 - 2008年の新しいC++スレッドライブラリを使用して頭を悩むことができます。
  • OpenMP - VSを含む最近のC++コンパイラに組み込まれています。
  • pthreads for win32 - すべてのPOSIXコンプレントOSのクロスプラットフォームであるため、POSIXスレッドです。
  • WIN32 API

に糸を通すことは、他のマルチスレッドAPIのの大部分にわたってより高い抽象レベルだと私は、インテル®スレッド・ビルディング・ブロックをお勧めします。また、オープンソースであるため、ダウンロードしていくつかのことがどのように行われているかを見ることができます。 Upcommingバージョンは、Windows Concurrency Runtimeが利用可能であれば使用します。私は、インテルがTBBをC++標準に含めることを提出したことも読んでいます。

pthreadsとWin32 APIは、マルチスレッド環境をもっとよく理解する必要がある下位レベルのプリミティブです。あなたが何をしているのか分かっているならば、これらのツールはあなたに最もコントロールを与えます。

私は新しいC++スレッディングサポートをまだ使用していませんが、pthreadsと同じレベルか少し高いと思われます。 Just Softwareには、新しいC++スレッドライブラリの使い方に関する面白い​​があります。

私はOpenMPについてしか読んでいませんが、私はそれがどのようなものかについてはわかりません。

Joe Duffy'sConcurrent Programming on Windows本を読むことをお勧めします。

Herb Sutterも、効果的な並行処理のタイトルの下で多数の記事を投稿します。

希望に役立ちます。

1

インテルのスレッド・ビルディング・ブロック・ライブラリーには、並行処理ランタイムと類似している(上位レベルの)並列タスク・システムがあります。 APIの詳細は異なりますが、プログラムを独立して実行する小さなタスクに分割する作業は引き継がれます。

+0

スレッドビルディングブロックライブラリの詳細については、http://www.threadingbuildingblocks.org/を参照してください。これはC++ライブラリなので、Cコードから使用したい場合は、 pthreadsまたはOpenMPと一緒に行く – garethm

1

私はいつもpthreadsが好きです。私が実行した他のスレッドモデルにはかなりよくマップされていますが、これは比較的簡単にプログラミングできます(MPIと比較して)。が見つかりました。

しかし、それは並行性ランタイムほど高いレベルではありません。

私はまた、OpenMPについていくつかのノイズを聞いたことがありますが、それを調べていません。

+0

Windows用のpthreadについて詳しくは、http://sourceware.org/pthreads-win32/ – garethm

2

私は待っている間にOpenMPを使用することをお勧めします。これはほとんどのコンパイラに実装されており、既存のコードに比較的簡単に追加でき、後で他のAPIで使用することもできます。

1

短い答え:良いスレッド経験を持つプログラマーを雇う。

マルチコアでマルチスレッドを扱うのは難しいです。経験に代わるものはありません。

Visual C++(最近のバージョン)には、並列ソフトウェアを開発するためのツールがありますが、経験の浅い人にとっては非常に扱いにくいデータ同期などの複雑さがあります。 Concurrency Runtimeのやり方は、複雑さを隠し、コンパイラにその作業をさせようとする試みです。それは非常にうまくいくかもしれませんが、陪審員はまだ出ています。現時点では、既存のツールを使用して良い結果を得ることができますが、専門知識が必要です。

優れた建築業者を雇って、適切な建築を手伝い、自分の職員を迅速に訓練することを検討してください。

+0

をご覧ください。こんにちは!マルチスレッドをやっているのは初めてのことだという誤った印象をおかけして申し訳ありません。私の質問は、API/archが "future-proofing"のために使うべきものに関するより多くのものでした。私たちはその請負業者です。 – moogs

+0

その場合、私の回答はまだ未来の "解決策"がないということです。 VS10のものは1つになるかもしれませんが、成熟するまではそうではありません。ベータ版として使用するリスクはかなり大きいでしょう。次のC++標準にはいくつかの並列処理が含まれていますが、まだまだ低レベルです。私は_beginthread()またはCreateThread()を使用すると言うでしょう。クリティカルセクション、ミューテックス、セマフォー、イベントを使用する。それはまだ重い持ち上げですが、少なくともあなたは誰かのバグを汗ばませていません。良いAPIが来るだろうが、実行可能なことからおそらく2年ある。 –

関連する問題