2

単純な MPI プログラム (複数の配列の追加) を実行しようとしています。PC では完全に動作しますが、クラスターでハングするか、次のエラーが表示されます。open mpi と次のコマンドを使用して実行しています

クラスタのネットワーク構成(master&node1)

        MASTER

eth0 リンク encap:Ethernet HWaddr 00:22:19:A4:52:74
inet addr:10.1.1.1 Bcast:10.1.255.255 Mask:255.255.0.0 inet6 addr: fe80::222:19ff:fea4:5274/64 スコープ: Link UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RX パケット:16914 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:7183 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:0 RXバイト:2050581 (1.9 MiB) 送信バイト:981632 (958.6 KiB)

eth1 Link encap:Ethernet HWaddr 00:22:19:A4:52:76
inet addr:192.168.41.203 Bcast:192.168.41.255 Mask:255.255.255.0 inet6 addr: fe80::222:19ff:fea4:5276/64 スコープ: Link UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RX パケット:701 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:228 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:0 RXバイト:75457 (73.6 KiB) 送信バイト:25295 (24.7 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX パケット:88362 エラー:0 ドロップ:0 オーバーラン:0フレーム:0 TX パケット:88362 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 衝突:0 txqueuelen:0 RX バイト:21529504 (20.5 MiB) TX バイト:21529504 (20.5 MiB)

peth0 Link encap:Ethernet HWaddr 00:22:19:A4:52:74
inet6 addr: fe80::222:19ff:fea4:5274/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:17175 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:7257 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 衝突:0 txqueuelen:1000 RX バイト:2373869 (2.2 MiB) TX バイト:1020320 (996.4 KiB) 割り込み:16 メモリ:da000000-da012800

peth1 Link encap:Ethernet HWaddr 00:22:19:A4:52:76
inet6 addr: fe80::222:19ff:fea4:5276/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:1112 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:302 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 衝突:0 txqueuelen:1000 RX バイト:168837 (164.8 KiB) TX バイト:33241 (32.4 KiB) 割り込み:16 メモリ:d6000000-d6012800

virbr0 Link encap:Ethernet HWaddr 52:54:00:E3:80:BC
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:0 エラー:0ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:0 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:0 RX バイト:0 (0.0 b) TX バイト:0 (0.0 b)

            NODE 1

eth0 Link encap:Ethernet HWaddr 00:22:19:53:42:C6
inet addr:10.1.255.253 Bcast:10.1.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:16559 エラー:0ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:7299 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 衝突:0 txqueuelen:0 RX バイト:1898811 (1.8 MiB) TX バイト:1056294 (1.0 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX パケット:25 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:25 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:0 RX バイト:3114 (3.0 KiB) TX バイト:3114 (3.0 KiB)

peth0 Link encap:Ethernet HWaddr 00:22:19:53:42:C6
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:16913 エラー:0 ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:7276 エラー:0ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:1000 RX バイト:2221627 (2.1 MiB) TX バイト:1076708 (1.0 MiB) 割り込み:16 メモリ:f8000000-f8012800

virbr0 Link encap:Ethernet HWaddr 52:54:00:E7:E5:FF
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX パケット:0 エラー:0ドロップ:0 オーバーラン:0 フレーム:0 TX パケット:0 エラー:0 ドロップ:0 オーバーラン:0 キャリア:0 コリジョン:0 txqueuelen:0 RX バイト:0 (0.0 b) TX バイト:0 (0.0 b)

エラー

mpirun -machinefile machine -np 4 ./query
error code:
[[22877,1],0][btl_tcp_endpoint.c:638:mca_btl_tcp_endpoint_complete_connect] connect() to 192.168.122.1 failed: Connection refused (111)

コード

#include    <mpi.h>
#include    <stdio.h>
#include    <stdlib.h>
#include    <string.h>
#define     group           MPI_COMM_WORLD
#define     root            0
#define     size            100

int main(int argc,char *argv[])
{
int no_tasks,task_id,i;
MPI_Init(&argc,&argv);
MPI_Comm_size(group,&no_tasks);
MPI_Comm_rank(group,&task_id);
int arr1[size],arr2[size],local1[size],local2[size];
if(task_id==root)
{
    for(i=0;i<size;i++)
    {
        arr1[i]=arr2[i]=i;
    }
}
MPI_Scatter(arr1,size/no_tasks,MPI_INT,local1,size/no_tasks,MPI_INT,root,group);
MPI_Scatter(arr2,size/no_tasks,MPI_INT,local2,size/no_tasks,MPI_INT,root,group);
for(i=0;i<size/no_tasks;i++)
{
    local1[i]+=local2[i];
}
MPI_Gather(local1,size/no_tasks,MPI_INT,arr1,size/no_tasks,MPI_INT,root,group);
if(task_id==root)
{       
    printf("The Array Sum Is\n");
    for(i=0;i<size;i++)
    {
        printf("%d  ",arr1[i]);
    }
}
MPI_Finalize();
return 0;
}
4

1 に答える 1

8

virbr0TCP/IP 経由でメッセージを送信するために仮想ブリッジ インターフェイス インターフェイスを使用しないように Open MPI に指示します。またはeth0、目的にのみ使用するように指示することをお勧めします。

$ mpiexec --mca btl_tcp_if_include eth0 ...

tcpこれは、 TCP/IP を使用してメッセージを送信するOpen MPI の BTL コンポーネントの貪欲な動作に由来します。データ帯域幅を最大化するために、各ノードで稼働している使用可能なネットワーク インターフェイスをすべて使用しようとします。両方のノードがvirbr0同じサブネット アドレスで構成されています。Open MPI は両方のアドレスが等しいと認識して落ちますが、サブネットが一致するため、通話できるはずであると想定しvirbr0ます。したがって、プロセス A は、他のノードに存在するプロセス B にメッセージを送信しようとしています。プロセス B はポートPをリッスンし、プロセス A はこれを認識しているため、 に接続しようとし192.168.122.1:Pます。しかし、これは実際に与えられたアドレスですvirbr0プロセス A が存在するノード上のインターフェイスであるため、ノードは存在しないポートで自分自身と通信しようとするため、「接続が拒否されました」エラーが発生します。

于 2013-03-06T19:58:57.513 に答える