質問

マルチスレッド アプリケーションの作成に別の考え方や考え方を与えるパラダイムはありますか?おそらく、手続き型プログラミングと関数型プログラミングのように、大きく異なるように感じられるものかもしれません。

役に立ちましたか?

解決

同時実行には、さまざまな問題に対応するさまざまなモデルがあります。ウィキペディアのページ 同時実行性 いくつかのモデルをリストしており、次のページもあります。 同時実行パターン これは、並行性にアプローチするさまざまな方法の良い出発点となります。

どのアプローチを取るかは、当面の問題に大きく依存します。異なるモデルは、同時アプリケーションで発生する可能性のあるさまざまな問題を解決し、一部は他のモデルを基にして構築されます。

授業では、同時実行には次のことを使用すると教えられました。 相互排除 そして 同期 一緒に同時実行の問題を解決します。一部のソリューションでは 1 つだけが必要ですが、両方を使用すれば同時実行の問題を解決できるはずです。

大きく異なる概念として、不変性と同時実行性を検討することができます。すべてのデータが不変であれば、従来の同時実行アプローチは必要ありません。 この記事 そのトピックを探求します。

他のヒント

質問はよくわかりませんが、次を使用してコーディングを開始すると、 CUDA マルチスレッド アプリケーションについての別の考え方を提供します。

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

一般的なシリアル問題を完全に再考した小さな例としては、次のようなものがあります。 スキャン アルゴリズム。それは次のように簡単です。

  • SET {a,b,c,d,e} が与えられた場合

次のセットが欲しいです。

{a、a+b、a+b+c、a+b+c+d、a+b+c+d+e}

この場合の記号「+」は、任意の可換演算子です (プラスだけでなく、乗算も実行できます)。

これを並行して行うにはどうすればよいでしょうか?これは問題を完全に再考したものであり、この記事で説明されています .

CUDA でのさまざまなアルゴリズムのさらに多くの実装は、NVIDIA で見つけることができます。 Webサイト

さて、非常に保守的なパラダイムシフトは、プロセス中心の同時実行(アドレス空間の分離)に向けて(すべてを共有する)スレッド中心の同時実行からです。この方法1は、意図しないデータの共有を避けることができますし、それが異なるサブシステム間の通信ポリシーを適用する方が簡単です。

この考え方は古く、より信頼性の高いオペレーティングシステムを構築するためにマイクロカーネルOSのコミュニティによって(特に)増殖させました。興味深いことに、マイクロソフトリサーチによる特異のOSのプロトタイプは、従来のアドレス空間があることを示していこのモデルで作業する場合にも必要ありません。

私が一番好きな比較的新しいアイデアは、トランザクショナルメモリである:確認することにより、並行性の問題を避けますアップデートは常にアトミックです。

興味深い変化をOpenMPののnoreferrer">

scroll top