2

Fortran を使用する R パッケージの作成方法を学ぶために、モンテカルロ シミュレーションで Pi を計算する簡単なパッケージを作成しました。現在、Fortran コードを MPI と並列化しようとしています。

use MPIFortran コードに追加して Rstudio のボタンをクリックするBuild and Reloadと、次のエラーが発生します。

==> R CMD INSTALL --no-multiarch --with-keep.source MyPi

* installing to library ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2’
* installing *source* package ‘MyPi’ ...
gfortran  -fpic -g -O2 -fstack-protector-strong  -c  Fpi.f90 -o Fpi.o
/usr/lib/R/etc/Makeconf:161: recipe for target 'Fpi.o' failed
** libs
Fpi.f90:2.4:

  use mpi
1
Fatal Error: Can't open module file 'mpi.mod' for reading at (1): No such file or directory
make: *** [Fpi.o] Error 1
ERROR: compilation failed for package ‘MyPi’
* removing ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2/MyPi’
* restoring previous ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2/MyPi’

Exited with status 1.

問題は、Rstudio が mpi90 の代わりに gfortran を使用してコンパイルしようとしていることだと思います。この投稿に従って、非常に基本的な Hello World を実行できますが、コードを次のようにコンパイルします。mpif90 -fpic -shared -o test.so test.f90

Rstudio にmpif90 -fpic -sharedの代わりに使用するように指示するにはどうすればよいgfortranですか?


これを追加しましたsrc/Makevars

 FC=mpif90

これは私が得るものです:

==> R CMD INSTALL --no-multiarch --with-keep.source MyPi

* installing to library ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2’
* installing *source* package ‘MyPi’ ...
gfortran  -fpic -g -O2 -fstack-protector-strong  -c  Fpi.f90 -o Fpi.o
/usr/lib/R/etc/Makeconf:161: recipe for target 'Fpi.o' failed
** libs
Fpi.f90:2.4:

  USE MPI
1
Fatal Error: Can't open module file 'mpi.mod' for reading at (1): No such file or directory
make: *** [Fpi.o] Error 1
ERROR: compilation failed for package ‘MyPi’
* removing ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2/MyPi’
* restoring previous ‘/home/ignacio/R/x86_64-pc-linux-gnu-library/3.2/MyPi’

Exited with status 1.
4

1 に答える 1

1

使用する fortran コンパイラを示すためFCに、ファイルにフラグを設定するだけです。Makevars

FC=mpif90

編集 - パッケージにローカルに含まれている場合、上記は機能しません

マクロを上書きする前にファイルが読み取られるため、FCパッケージ内で指定された場合、マクロは上書きされます。デフォルトのコンパイラを変更するには、ディレクトリ内のディレクトリにMakevars ファイルを作成します。Makevarssrc/Makevars$RHOME/etc/MakeconfFC.R/$HOME

次に、上記と同じ行でファイルを作成します。R を再起動して、再度コンパイルを試みます (これは、私の Ubuntu システムで機能しました)。

于 2015-08-10T16:41:51.820 に答える