2

データの並列性が高い C# プロトタイプがあり、.NETv4 で Parallel.For コンストラクトを使用して桁違いの高速化に非常に成功しています。今度はネイティブ コードでプログラムを作成する必要があります。さまざまなオペレーティング システムやコンパイラ間である程度移植性のあるものを好みますが、プッシュが押し寄せる場合は、Windows/VC++ を使用できます。

私は OpenMP を調べましたが、これは面白そうですが、これが他のプログラマーによって優れたソリューションと見なされているかどうかはわかりません。私が見ることができる他の移植可能なライブラリの提案も大好きです。

4

4 に答える 4

2

Parallel.Forから得られる並列処理のレベルに満足している場合、OpenMPはおそらくかなり良いソリューションです-ほぼ同じ種類のことを行います。標準ライブラリのアルゴリズムの並列化された実装についても、作業と研究が行われています。標準アルゴリズムを多用するコードは、これからさらに少ない作業で利益を得ることができます。

これのいくつかはOpenMPを使用して行われ、他の人は手書きのコードを使用して(試みて)より大きな利益を提供します。長期的には、後者の方が多く見られるでしょうが、今のところ、OpenMPルートはおそらくもう少し実用的です。

于 2010-06-04T22:35:53.013 に答える
1

Intelのスレッドビルディングブロックを確認する必要があります。Visual Studio 2010は、同時実行ランタイムネイティブも提供します。.NET 4.0ライブラリとConcRTは、同じではないにしても、非常によく似た設計になっています。

于 2010-06-04T22:38:24.113 に答える
1

.Net 4.0 で Parallel.For を使用している場合は、VS2010 for C++のParallel Pattern Libraryも参照する必要があります。多くのものが似ており、ライブラリベースです。

Windows 以外の別のプラットフォームで実行する必要がある場合、PPL はオープン ソース バージョンの Intel の Thread Building Blocks にも実装されています。

.Net 4.0 との類似点/相違点に関する他のコメントについては、PPL の並列ループ (parallel_for、parallel_for_each、parallel_invoke) は、実質的に .Net 4.0 ループと同じです。タスク モデルは少し異なりますが、単純である必要があります。

于 2010-06-04T23:22:54.847 に答える
0

さまざまな OS や環境に移植できるなど、汎用性の高いものが必要な場合は、Java を考慮しないことは非常に困難です。また、これらは C# に非常に似ているため、移行は非常に簡単です。

忍者のメスを抜いてコードを非常に効率的にしたい場合を除き、私は VC++ または C++ よりも Java の方がいいと思います。

于 2010-06-04T22:15:19.287 に答える