告诉 Rstudio 使用 mpif90 而不是 gfortran
Tell Rstudio to use mpif90 instead of gfortran
为了学习如何创建使用 Fortran 的 R 包,我创建了 a simple one to calculate Pi with a monte carlo simulation。现在我正在尝试使 Fortran 代码与 MPI 并行。
当我将 use MPI
添加到我的 Fortran 代码并单击 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 正在尝试使用 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.
您只需要在 Makevars
文件中设置 FC
标志以指示您希望使用的 Fortran 编译器。
FC=mpif90
编辑 - 如果本地包含在您的包中,以上内容将不起作用
在包 Makevars
中指定时,FC
宏将被覆盖,因为 src/Makevars
文件在 $RHOME/etc/Makeconf
之前被读取,这会覆盖 FC
宏.要更改默认编译器,请在 $HOME
目录的 .R/
目录中创建一个 Makevars 文件。
然后用与上面相同的行创建文件。重新启动 R 并尝试再次编译(这在我的 Ubuntu 系统上有效)。
为了学习如何创建使用 Fortran 的 R 包,我创建了 a simple one to calculate Pi with a monte carlo simulation。现在我正在尝试使 Fortran 代码与 MPI 并行。
当我将 use MPI
添加到我的 Fortran 代码并单击 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 正在尝试使用 gfortran 而不是 mpi90 进行编译。我可以按照 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.
您只需要在 Makevars
文件中设置 FC
标志以指示您希望使用的 Fortran 编译器。
FC=mpif90
编辑 - 如果本地包含在您的包中,以上内容将不起作用
在包 Makevars
中指定时,FC
宏将被覆盖,因为 src/Makevars
文件在 $RHOME/etc/Makeconf
之前被读取,这会覆盖 FC
宏.要更改默认编译器,请在 $HOME
目录的 .R/
目录中创建一个 Makevars 文件。
然后用与上面相同的行创建文件。重新启动 R 并尝试再次编译(这在我的 Ubuntu 系统上有效)。