C++ コードの配列の内容を fortran 90 コードに送信できるかどうかを確認しようとしています。Intel 11.1.072 コンパイラを使用してビルドされた openmpi 1.4.3 を使用しています。これらは、Linux バージョン 2.6.18-108chaos (mockbuild@chaos4builder1) (gcc バージョン 4.1.2 20080704 (Red Hat 4.1.2-48)) にインストールされます。
C++ 側は次のとおりです。
# include <cstdlib>
# include <iostream>
# include <mpi.h>
using namespace std;
void printarray (float arg[], int length) {
for (int n=0; n<length; n++)
cout << arg[n] << " ";
cout << "\n";
}
int main(int argc, char *argv[] ){
float a[10];
int myrank,i;
MPI::Init ( argc, argv );
myrank=MPI::COMM_WORLD.Get_rank();
cout << "rank "<<myrank<<" is c++ rank."<<std::endl;
for (i=0;i<10;i++){
a[i]=10.0;
}
printarray(a,10);
MPI::COMM_WORLD.Send(&a[0],1,MPI::DOUBLE_PRECISION,1,100);
MPI::Finalize();
}
f90 側は次のとおりです。
program main
implicit none
include "mpif.h"
integer:: ierr,stat(MPI_STATUS_SIZE)
real(8):: a(10)
call mpi_init(ierr)
a=0
print*,a
call mpi_recv(a(1),10,MPI_DOUBLE_PRECISION,0,100,MPI_COMM_WORLD,stat,ierr)
print*,a
call mpi_finalize(ierr)
end program
2 つのコードをコンパイルした後、次のように実行します。
$mpirun -n 1 *c_executable* : -n 1 *fortran_executable* > output
Fortran 側で取得した数値は 10.0 ではありません。