2009-02-27 30 views
0

マルチスレッドアプリケーションの作成に異なる考え方を持たせるか、別のパラダイムがありますか?おそらく、プログラミングプログラミングのような手続き型プログラミングとはまったく異なると感じるものです。スレッディング・パラダイム?

答えて

2

同時実行性には、さまざまな問題に対してさまざまなモデルがあります。 concurrencyのWikipediaページにはいくつかのモデルが掲載されており、concurrency patternsのページもあります。これには、並行性にアプローチするさまざまな種類の出発点があります。

あなたが取るアプローチは、手元の問題に大きく依存しています。異なるモデルは、並行アプリケーションで発生する可能性のあるさまざまな異なる問題を解決します。

クラスIでは、並行性の問題を解決するために同時実行でmutual exclusionsynchronizationを一緒に使用すると教えられました。一部のソリューションでは1つのみが必要ですが、どちらのソリューションでも同時実行性の問題を解決できるはずです。

大きく異なる概念のために、不変性と並行性を見ることができます。すべてのデータが不変の場合、従来の並行性のアプローチは必要ではありません。 This articleがそのトピックを探検します。

0

私は実際にこの質問を理解していませんが、何らかのコーディングを行う場合は、CUDAを使ってマルチスレッドアプリケーションについて考えてみましょう。

これは、数千のスレッドが同時に存在するため、セマフォ、モニタなどの一般的なマルチスレッド技術とは異なります。したがって、CUDAの並列処理の問題は、データを分割して後でデータのまとまりを混合することにあります。

一般的なシリアル問題の完全な再考のほんの少しの例は、SCANアルゴリズムです。 SET {A、B、C、D、E}

私は、次のセットをしたい考える

  • :それは同じくらい簡単です

    {、A + B、A

    この場合の記号「+」は任意の正則演算子である(プラスだけでなく、乗算も行うことができる)。 )。

    これを並行して行う方法は?それはこの問題を完全に再考したもので、paperに記載されています。 CUDAに異なるアルゴリズムの

    より多くの実装がよく、非常に保守的なパラダイムシフトがスレッド中心の同時実行であるNVIDIA website

0

に見出すことができる(すべてを共有する)プロセス中心の並行性(アドレス空間分離に向かって)。このように、意図しないデータ共有を避けることができ、異なるサブシステム間で通信ポリシーを適用する方が簡単です。

このアイデアは古いもので、Micro-Kernel OSコミュニティによって伝播され、より信頼性の高いオペレーティングシステムを構築しています。興味深いことに、Microsoft ResearchのSingularity OSプロトタイプでは、このモデルで作業するときに従来のアドレススペースが不要であることが示されています。

0

私が気に入っている比較的新しいアイデアはtransactional memoryです。更新が常にアトミックであることを確認して並行性の問題を回避してください。

0

興味深いバリエーションについてはOpenMPを見てください。