2016-07-09 9 views
-2

私はUbuntu 14.04とIntel ifortコンパイラでopenmpiを使って天気予報ソフトウェアを倍精度でコンパイルしました。しかし、私はいくつかの問題を把握することができません。私はmpirunに送る必要があるプロセッサの数を把握する必要があります。これは、これは私が私のソフトウェアに のmpirun -np 4 AAAを実行するために使用していますコマンドですlscpuopenmpiを使用するためのプロセッサ数の把握

x86_64 
CPU op-mode(s):  32-bit, 64-bit 
Byte Order:   Little Endian 
CPU(s):    4 
On-line CPU(s) list: 0-3 
Thread(s) per core: 2 
Core(s) per socket: 2 
Socket(s):    1 
NUMA node(s):   1 
Vendor ID:    GenuineIntel 
CPU family:   6 
Model:     60 
Stepping:    3 
CPU MHz:    800.000 
BogoMIPS:    6784.93 
Virtualization:  VT-x 
L1d cache:    32K 
L1i cache:    32K 
L2 cache:    256K 
L3 cache:    3072K 
NUMA node0 CPU(s):  0-3output of lscpu 

の出力です。私はこれを行うとしかし、私はこれらのエラーを取得する -

MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD 
with errorcode 1001. 

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes. 
You may or may not see output from other processes, depending on 
exactly when Open MPI kills them. 

私は1にNPを設定すると、それが正常に実行されたが、完全にCPUを使用していません。 CPU使用率は3%から35%まで変化しますが、メモリ使用量はほぼ100%です。システムは約10分間停止し、エラーメッセージ

forrtl severe(41)for virtual memoryが不足して終了します。

複数のセマフォを持つWRF(この質問に関連するソフトウェアはWRFではありません)を実行しましたが、速度やメモリの問題は発生していません。 私は単精度に再コンパイルできますが、それを行う前に、mpirunに送信するコア(プロセッサ)の数を把握できるようにしたいと考えています。

答えて

1

多くのインテルCPU(使用しているCPUを含む)には、「ハイパースレッディング」と呼ばれる2つの命令ストリームを同時に実行できる仮想実行ユニットがあります。 Linuxカーネルには、余分なCPUコアとして表示されます。したがって、lscpuは、4つのCPUコア(CPU(s): 4)があることを示します。出力の残りの部分を注意深く見ると、あなたが実際には、唯一の2つのCPUコアがあることがわかります。私は、一般的に単一の物理CPUコア上で複数のMPIプロセスを実行することはお勧めしません

Thread(s) per core: 2 <--- this is hyperthreading 
Core(s) per socket: 2 
Socket(s):    1 

場合でも、そこにハイパースレッディングです。それは有害なパフォーマンスにつながる傾向があり、場合によってはクラッシュすることがあります。 mpiexec -np 2 aaaを試して、何が起こるかを見てください。もう一度クラッシュすると、何か間違ったことがあります。

npを1に設定すると、正常に実行されますが、CPUは完全には使用されません。 CPU使用率は3%から35%まで変化しますが、メモリ使用率はほぼ100%です。システムは約10分間停止し、仮想メモリ不足のエラーメッセージ(41)で終了します。

問題のサイズを小さくする必要があります。このマシンは、要求された割り当てを満たすのに十分な物理メモリーを持っておらず、仮想メモリー(本質的にハード・ディスク・スペース)を使用してそれらを実行しようとしています。いずれにしても、シミュレーションを実行するときには仮想メモリを使用したくない(すでに遅い主メモリよりも1000倍遅い)。

+0

美しい答えです。私はすべての情報を吸収させてください! – gansub

+0

はそれをすべて吸収しました。ソフトウェアを開発した人々は、小さな問題サイズを実行するのではなく、単精度で再コンパイルするように求めました。それについての考え? – gansub

+0

グリッドやAMR流体力学ソルバーを使用していると仮定しているので、精度を変更すると問題のサイズを半減させることになります。これは、精度の低下を処理できるかどうかの問題です。それはあなたの問題に敏感に依存します。 – Tim

関連する問題