⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intracomm_inln.h

📁 MPI stands for the Message Passing Interface. Written by the MPI Forum (a large committee comprising
💻 H
字号:
// -*- c++ -*-// // Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana//                         University Research and Technology//                         Corporation.  All rights reserved.// Copyright (c) 2004-2005 The University of Tennessee and The University//                         of Tennessee Research Foundation.  All rights//                         reserved.// Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, //                         University of Stuttgart.  All rights reserved.// Copyright (c) 2004-2005 The Regents of the University of California.//                         All rights reserved.// Copyright (c) 2006      Cisco Systems, Inc.  All rights reserved.// Copyright (c) 2007      Sun Microsystems, Inc.  All rights reserved.// $COPYRIGHT$// // Additional copyrights may follow// // $HEADER$//inlineMPI::Intracomm::Intracomm(MPI_Comm data) {  int flag = 0;  if (MPI::Is_initialized() && (data != MPI_COMM_NULL)) {    (void)MPI_Comm_test_inter(data, &flag);    if (flag) {      mpi_comm = MPI_COMM_NULL;    } else {      mpi_comm = data;    }  }  else {    mpi_comm = data;  }}inline voidMPI::Intracomm::Scan(const void *sendbuf, void *recvbuf, int count,      const MPI::Datatype & datatype, const MPI::Op& op) const{  (void)MPI_Scan(const_cast<void *>(sendbuf), recvbuf, count, datatype, op, mpi_comm);}inline voidMPI::Intracomm::Exscan(const void *sendbuf, void *recvbuf, int count,			      const MPI::Datatype & datatype, 			      const MPI::Op& op) const{  (void)MPI_Exscan(const_cast<void *>(sendbuf), recvbuf, count, datatype, op, mpi_comm);}inline MPI::IntracommMPI::Intracomm::Dup() const{  MPI_Comm newcomm;  (void)MPI_Comm_dup(mpi_comm, &newcomm);  return newcomm;}inline MPI::Intracomm&MPI::Intracomm::Clone() const{  MPI_Comm newcomm;  (void)MPI_Comm_dup(mpi_comm, &newcomm);  MPI::Intracomm* dup = new MPI::Intracomm(newcomm);  return *dup;}inline MPI::IntracommMPI::Intracomm::Create(const MPI::Group& group) const{  MPI_Comm newcomm;  (void)MPI_Comm_create(mpi_comm, group, &newcomm);  return newcomm;}inline MPI::IntracommMPI::Intracomm::Split(int color, int key) const{  MPI_Comm newcomm;  (void)MPI_Comm_split(mpi_comm, color, key, &newcomm);  return newcomm;}inline MPI::IntercommMPI::Intracomm::Create_intercomm(int local_leader,					const MPI::Comm& peer_comm,					int remote_leader, int tag) const{  MPI_Comm newintercomm;  (void)MPI_Intercomm_create(mpi_comm, local_leader, peer_comm,			     remote_leader, tag, &newintercomm);   return newintercomm;}inline MPI::CartcommMPI::Intracomm::Create_cart(int ndims, const int dims[],				   const bool periods[], bool reorder) const{  int *int_periods = new int [ndims];  for (int i=0; i<ndims; i++)    int_periods[i] = (int) periods[i];    MPI_Comm newcomm;  (void)MPI_Cart_create(mpi_comm, ndims, const_cast<int *>(dims), 		      int_periods, (int)reorder, &newcomm);  delete [] int_periods;  return newcomm;}inline MPI::GraphcommMPI::Intracomm::Create_graph(int nnodes, const int index[],				    const int edges[], bool reorder) const{  MPI_Comm newcomm;  (void)MPI_Graph_create(mpi_comm, nnodes, const_cast<int *>(index),                          const_cast<int *>(edges), (int)reorder, &newcomm);  return newcomm;}//// Process Creation and Management//inline MPI::IntercommMPI::Intracomm::Accept(const char* port_name, 			      const MPI::Info& info,			      int root) const{  MPI_Comm newcomm;  (void) MPI_Comm_accept(const_cast<char *>(port_name), info, root, mpi_comm,			 &newcomm);  return newcomm;}inline MPI::IntercommMPI::Intracomm::Connect(const char* port_name,			       const MPI::Info& info,			       int root) const{  MPI_Comm newcomm;  (void) MPI_Comm_connect(const_cast<char *>(port_name), info, root, mpi_comm,			  &newcomm);  return newcomm;}inline MPI::IntercommMPI::Intracomm::Spawn(const char* command, const char* argv[],			     int maxprocs, const MPI::Info& info, 			     int root) const{  MPI_Comm newcomm;  (void) MPI_Comm_spawn(const_cast<char *>(command), const_cast<char **>(argv), maxprocs,			info, root, mpi_comm, &newcomm, 			(int *)MPI_ERRCODES_IGNORE);  return newcomm;}inline MPI::IntercommMPI::Intracomm::Spawn(const char* command, const char* argv[],                             int maxprocs, const MPI::Info& info,                             int root, int array_of_errcodes[]) const{  MPI_Comm newcomm;  (void) MPI_Comm_spawn(const_cast<char *>(command), const_cast<char **>(argv), maxprocs,                        info, root, mpi_comm, &newcomm, 			array_of_errcodes);  return newcomm;}inline MPI::IntercommMPI::Intracomm::Spawn_multiple(int count, 				      const char* array_of_commands[],				      const char** array_of_argv[],				      const int array_of_maxprocs[],				      const Info array_of_info[], int root){  MPI_Comm newcomm;  MPI_Info *const array_of_mpi_info =       convert_info_to_mpi_info(count, array_of_info);  MPI_Comm_spawn_multiple(count, const_cast<char **>(array_of_commands), 			  const_cast<char ***>(array_of_argv),                           const_cast<int *>(array_of_maxprocs),			  array_of_mpi_info, root,			  mpi_comm, &newcomm, (int *)MPI_ERRCODES_IGNORE);  delete[] array_of_mpi_info;  return newcomm;}inline MPI_Info *MPI::Intracomm::convert_info_to_mpi_info(int p_nbr, const Info p_info_tbl[]){   MPI_Info *const mpi_info_tbl = new MPI_Info [p_nbr];   for (int i_tbl=0; i_tbl < p_nbr; i_tbl++) {       mpi_info_tbl[i_tbl] = p_info_tbl[i_tbl];   }   return mpi_info_tbl;}inline MPI::IntercommMPI::Intracomm::Spawn_multiple(int count,                                      const char* array_of_commands[],                                      const char** array_of_argv[],                                      const int array_of_maxprocs[],                                      const Info array_of_info[], int root,				      int array_of_errcodes[]){  MPI_Comm newcomm;  MPI_Info *const array_of_mpi_info =       convert_info_to_mpi_info(count, array_of_info);  MPI_Comm_spawn_multiple(count, const_cast<char **>(array_of_commands),                           const_cast<char ***>(array_of_argv),                           const_cast<int *>(array_of_maxprocs),                          array_of_mpi_info, root,                          mpi_comm, &newcomm, array_of_errcodes);  delete[] array_of_mpi_info;  return newcomm;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -