2

为了学习如何创建一个使用 Fortran 的 R 包,我创建了一个简单的包来使用 monte carlo 模拟计算 Pi。现在我正在尝试使 Fortran 代码与 MPI 并行。

当我添加use MPI到我的 fortran 代码并单击Build and ReloadRstudio 上的按钮时,我收到以下错误。

==> 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 正在尝试使用 gfortran 而不是 mpi90 进行编译。我可以按照这篇文章做一个非常基本的 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

您只需在文件中设置FC标志Makevars以指示您希望使用的 fortran 编译器。

FC=mpif90

编辑 - 如果本地包含在您的包中,上述内容将不起作用

FC包中指定宏时将被覆盖,Makevars因为在src/Makevars读取文件之前$RHOME/etc/Makeconf会覆盖FC宏。为了改变默认编译器是.R/在你的$HOME目录中创建一个 Makevars 文件。

然后只需使用与上面相同的行创建文件。重新启动 R 并尝试再次编译(这适用于我的 Ubuntu 系统)。

于 2015-08-10T16:41:51.820 回答