首页 > 解决方案 > 对类的私有成员的 MPI 操作

问题描述

我想知道您是否可以将 MPI 与 C++ 类的私有成员一起使用,例如void bcast在下面的示例中:

class foo
{
public:
  int rank;
  int size;

  foo()
  { 
   _isOperational = false;
  }

 void bcast(){
    MPI_Bcast(&_isOperational,1,MPI::BOOL, 0, MPI_COMM_WORLD);
  }
private:
  bool _isOperational;

};

我得到的只是一个僵局。这有什么意义吗?

标签: c++mpi

解决方案


一个最小的可重现示例,证明私有成员在 MPI 中不是问题。

#include <mpi.h>
#include <stdio.h>


class foo
{
private:
  bool _isOperational;

public:
  int rank;
  int size;

  foo()
  { 
   _isOperational = false;
  }
  void changeOperational(bool b){
    _isOperational = b;
  }

  void printOperational(){
    printf("Rank: %d -> Operational: %d\n",rank,_isOperational);
  }

 void bcast(){
    MPI_Bcast(&_isOperational,1,MPI::BOOL, 0, MPI_COMM_WORLD);
  }

};


int main(){

  foo f;
  MPI_Init(NULL,NULL);

  MPI_Comm_size(MPI_COMM_WORLD, &f.size);
  MPI_Comm_rank(MPI_COMM_WORLD, &f.rank);
  f.printOperational();
  if(f.rank == 0)
    f.changeOperational(true);


  f.bcast();
  f.printOperational();


  MPI_Finalize();



  return 0;
}

推荐阅读