使用Rcpp从R运行MPI C++程序

gajydyqb  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(141)

我知道我可以使用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函数?

whlutmcx

whlutmcx1#

正如John Zwinck和Dirk Eddelbuettel所建议的,我们最终也需要使用mpirun来运行来自使用x个处理器的R的MPI C程序。
首先,我们可以将包含可从R调用的MPI C
函数的R脚本封装到一个文件中,在我的示例中,我们可以将以下代码封装到一个名为hello_world.R的文件中:

library(Rmpihelloworld)
hello_world()

然后,我们可以使用mpirun -np x Rscript r-script-name从使用x个处理器的R调用MPI C++程序。

mpirun -np 8 Rscript hello_world.R

使用8个处理器从R调用MPI hello world C++程序:

Hello world from processor rank 4 out of 8 processors
Hello world from processor rank 5 out of 8 processors
Hello world from processor rank 6 out of 8 processors
Hello world from processor rank 3 out of 8 processors
Hello world from processor rank 0 out of 8 processors
Hello world from processor rank 1 out of 8 processors
Hello world from processor rank 2 out of 8 processors
Hello world from processor rank 7 out of 8 processors
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0

相关问题