3

実は3つ質問があります。どんな入力でも大歓迎です。ありがとうございました!

1) 各ホストで正確に 1 つのプロセスを実行する方法は? 私のアプリケーションでは、マルチスレッドに TBB を使用しています。最高のパフォーマンスを得るには、各ホストで正確に 1 つのプロセスを実行する必要があるということですか?

2) クラスターに異種ホストがあります。一部のホストは、他のホストよりも優れた CPU とより多くのメモリを備えています。作業分散の目的でプロセスランクを実際のホストにマップする方法は? ホスト名を使用することを考えています。

3) 工程ランクはどのように割り当てられますか? 0 になるプロセスは?

4

1 に答える 1

3

1)TBBは、ループをスレッドプールの複数のスレッドに分割して、1台のマシンのすべてのプロセッサを利用します。したがって、マシンごとに1つのプロセスのみを実行する必要があります。より多くのプロセスがプロセッサ時間のために互いに戦うでしょう。マシンごとのプロセス数は、hostfileのオプションによって指定されます。

# my_hostfile 
192.168.0.208 slots=1 max_slots=1
...

2)各マシンにそのパフォーマンスに応じて適切な量の作業を与えることは簡単ではありません。最も簡単なアプローチは、ワークロードを小さな作業に分割し、それらをスレーブに送信し、回答を収集して、完了するまで新しい作業を提供することです。私のウェブサイトに例があります(ドイツ語)。そこには、マニュアルやチュートリアルへの参照もいくつかあります。

3)各プロセスは、プログラム内の番号(processID)を次のように取得します。

MPI_Comm_rank(MPI_COMM_WORLD, &processID);  

マスターのprocessID==0です。おそらく、他のマスターには、hostfileの順序でスロットが与えられます。もう1つの可能性は、スレーブへの接続が確立された順序で割り当てられることです。わかりません。

于 2011-08-24T05:28:12.627 に答える