2

あるプロセッサから別のプロセッサに整数を送信することになっており、大学のシェルサーバーで実行する必要があります...

最初に、次のようなソリューション コードを作成しました (少なくとも私はそう思います...)。

#include <stdio.h>
#include <mpi.h>

int main(int argc, char **argv)
{
    int currentRank = -1;

    MPI_Init(&argc, &argv);

    MPI_Comm_rank(MPI_COMM_WORLD, &currentRank);

    if(currentRank == 0) {
        int numberToSend = 1;
        MPI_Send(&numberToSend , 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
    }
    else if(currentRank == 1) {
        int recivedNumber;
        MPI_Recv(&recivedNumber, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
        printf("Recived number = %d\n", recivedNumber);
    }

    MPI_Finalize();

    return 0;
}

name.pbs ファイルを作成して実行する必要があります。そして、このプロセッサ数を指定する方法がわかりません...次のように試しました:

#PBS -l nodes=2:ppn=2 
#PBS -N cnt 
#PBS -j oe 
mpiexec ~/mpi1 

しかし、後でパテでこれをどうするかまだわかりません。qstatcomamnd は何もしないようです...「統計」が表示された場合のみ、qstat -Qまたはqどこにでも 0 の値があります...これは mpi での私の最初のプログラムであり、まったく理解していません...

そして、プログラムを実行しようとすると、次のようになります。

164900@halite:~$ ./transfer1
Fatal error in MPI_Send: Invalid rank, error stack:
MPI_Send(174): MPI_Send(buf=0x7fffd28ec640, count=1, MPI_INT, dest=1, tag=0, MPI_COMM_WORLD) failed
MPI_Send(99).: Invalid rank has value 1 but must be nonnegative and less than 1

サーバーでこれを実行する方法を誰かに説明してもらえますか?

4

1 に答える 1

3

サンプル コードはここで正常に動作し、OpenMPI と GCC でテストされています。

問題は、mpirun インスタンスを介してコアの数を指定する必要があるコードを実行するときに、トルクまたは使用しているスケジューラを使用してそれらを正しく割り当てた可能性がありますが、必要なシリアルであるかのようにコンパイルされたコードを実行していることです。 mpi heres で実行し、関連付けられた出力を使用して例を実行するには

mpirun -np 2 ./example
Recived number = 1

異なるスケジューラ hydra、PBS、または異なる MPI バージョンでは、上記と同じパターンに従う必要があり、mpi 実行コマンドに固有のコア数

于 2013-01-30T03:56:16.080 に答える