2009-03-03 11 views

答えて

12

マルチコアプログラミングは、基本的にマルチスレッドプログラミングです。アプリケーションがマルチスレッドである限り、オペレーティングシステムはどのコアをどのスレッドで実行するかを決定します。

それでは、あなたの本当の疑問は、どんな種類のアプリケーションがマルチスレッド化のメリットがあるのでしょうか?そのようなアプリケーションを考え、複数のスレッドをインスタンス化して、問題の同等の部分を解決します。

+0

開始するには、私は4つのスレッド(私はクワッドコアマシンを持っています)から回転するものを書きますと思います。各スレッドは別々のコンソールアプリケーションを実行し、1〜2分(CPU使用率の急上昇)の計算を強要します。 この場合、100%のCPU使用率が必要ですか? –

+0

それはかなり正確でなければなりません。 –

+0

ありがとうございました!私は今これをかなりよく理解しています。特定の種類のアプリケーションだけでは、4つのコアが軽度に必要であると考えられることは意味があります。 –

3

最善の方法は、parrallel拡張フレームワークの最新のCTPを取得し、サンプルコードを使用して開始することです。

+0

多分、パラレルエクステンションが少し上にあります。手始めにスレッドを手動で開始して、すべての問題を理解し、基本を学ぶべきではありませんか? –

+0

私はこれらを通して学ぶことがより良いと思う傾向がある(したがって、.net 4.0に関する情報を探すための私の答え)。基本的には、すべてをフックする方法に費やす時間が少なくて済み、パラレルがロジックにどのように影響を与えるかに時間がかかります。そして、ソースが利用できない場合は、リフレクターでピークを見ることができます。 – eglasius

1

ルック。それはそれのための別の構成を追加することになります。

2

.NETが使用する非同期プログラミングモデルを読んでください。デリゲートをスレッドプールで実行できるようにするBeginXXXとEnxXXXのパラダイムを研究します。

ストリームクラスにはすべて、非同期IOを実行できるBeingXXX、EndXXXメソッド(BeginRead、EndReadなど)があります。 IOベースのものに取り組んでいるなら、これらのメソッドを使用して並列性を高めることが望ましいでしょう。

+0

"続きを読む..."あなたはこれらのパラダイムを理解しています。私が始めることを示す資料はありますか? 感謝! –

+0

http://msdn.microsoft.com/en-us/magazine/cc163467.aspxを見てください 件名にJeffrey Richterが何かを読んでみてください。また、Joe Duffyの記事(http://msdn.microsoft.com/en-us/magazine/cc163467.aspxなど)を探すこともできます。彼はマルチスレッド化に関する優れた本を持っています。 – Sean

0

プロジェクトを特定の機能を実行するために特化したさまざまなスレッドに分割するだけで、複数のコアを利用できます。 OSは、最も利用可能なプロセッサコアへの異なるスレッドのスケジューリングを処理します。

1

JaredParのように、Parallel Extensionsはかなり良いです。私はそれらと少し演奏し、彼らは使いやすくパフォーマンスを追加するのが簡単です。

私が大好きな構成は、Parallel.ForEach()とPLinqでした。

Parallel.ForEachは、DotNet 2.0コレクションにあるForEach(デリゲート)関数に似ています。アクションデリゲートをとり、それを並行して実行します。

Plinqを使用すると、通常のLinqクエリを、クエリの最後に.AsParallel()を追加して並列に実行できます。

Jaredが詳細情報を掲載したリンクを確認してください。

関連する問題