我知道我可以使用mpirun
的x个处理器运行MPI C++程序:
mpirun -np x program-name
是否可以使用Rcpp库修改MPI C++程序,以便可以使用x个处理器从R调用它,而不必像现在Calling MPI from R to run C code上建议的那样求助于Rmpi库?
为了便于说明,我修改了MPI hello world程序,使其从R:
#include <mpi.h>
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
int hello_world() {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Print off a hello world message
Rcout << "Hello world from processor rank " << world_rank << " out of " << world_size << " processors\n";
// Finalize the MPI environment
MPI_Finalize();
return 0;
}
当我从R调用hello_world
函数时,我得到:
> library(Rmpihelloworld)
> hello_world()
Hello world from processor rank 0 out of 1 processors
是否可以使用x个处理器从R调用hello_world
函数?
1条答案
按热度按时间whlutmcx1#
正如John Zwinck和Dirk Eddelbuettel所建议的,我们最终也需要使用
mpirun
来运行来自使用x个处理器的R的MPI C程序。首先,我们可以将包含可从R调用的MPI C函数的R脚本封装到一个文件中,在我的示例中,我们可以将以下代码封装到一个名为
hello_world.R
的文件中:然后,我们可以使用
mpirun -np x Rscript r-script-name
从使用x个处理器的R调用MPI C++程序。使用8个处理器从R调用MPI hello world C++程序: