私はCで並列プログラミングのためにMPIを学習しています。私は4つのコアを持つプロセッサを使用しています。MPIはC言語で1つのプロセスしか認識しませんか?
Hello world! I'm process 0 out of 4 processes
Hello world! I'm process 2 out of 4 processes
Hello world! I'm process 1 out of 4 processes
Hello world! I'm process 3 out of 4 processes
どんなために:私は、出力があるべきではチュートリアルから例をやろうとしています。ここで
は私のコードです:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char** argv)
{
int ierr, num_procs, my_id;
ierr = MPI_Init(&argc, &argv);
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
printf("Hello world! I'm process %i out of %i processes\n", my_id, num_procs);
ierr = MPI_Finalize();
}
私が使用してそれをコンパイルします。
mpicc helloworld.c -o helloworld
を私は使用してそれを実行します。
mpirun -np 4 helloworld
をこれが出力されているものです。
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
これは4回出力されていますが、これは比較的良いニュースですが、プログラムはスレッド数と各スレッドIDを認識していません。
並列で実行しているのですか、それとも4回連続して実行していますか? スレッドとスレッドIDの量をプログラムが正しく認識できるようにするにはどうすればよいですか?
ありがとうございます!
どのMPIライブラリを使用していますか? – Arash
mpich。 sudo apt-get mpichを介して入手したライブラリ。それ以外は何もしていない。 @arash –
あなたが使用した 'mpirun'が実際には同じmp1ライブラリmpich(mpiccを提供しています)からで、openmpiからではないことを確認してください。 (mpichには 'mpiexec'があり、openmpiには' mpirun'があります;スクリプトによって使用される環境変数のセットが異なるので、mpirunはプログラムが並行して起動していることを保証できません)。 – osgx