environment.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 124 行

CPP
124
字号
// Copyright (C) 2005-2006 Douglas Gregor <doug.gregor@gmail.com>// Use, modification and distribution is subject to the Boost Software// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// Message Passing Interface 1.1 -- 7.1.1. Environmental Inquiries#include <boost/mpi/environment.hpp>#include <boost/mpi/exception.hpp>#include <cassert>#include <exception>#include <stdexcept>namespace boost { namespace mpi {#ifdef BOOST_MPI_HAS_NOARG_INITIALIZATIONenvironment::environment(bool abort_on_exception)  : i_initialized(false),    abort_on_exception(abort_on_exception){  if (!initialized()) {    BOOST_MPI_CHECK_RESULT(MPI_Init, (0, 0));    i_initialized = true;  }  MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);}#endifenvironment::environment(int& argc, char** &argv, bool abort_on_exception)  : i_initialized(false),    abort_on_exception(abort_on_exception){  if (!initialized()) {    BOOST_MPI_CHECK_RESULT(MPI_Init, (&argc, &argv));    i_initialized = true;  }  MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);}environment::~environment(){  if (i_initialized) {    if (std::uncaught_exception() && abort_on_exception) {      abort(-1);    } else if (!finalized()) {      BOOST_MPI_CHECK_RESULT(MPI_Finalize, ());    }  }}void environment::abort(int errcode){  BOOST_MPI_CHECK_RESULT(MPI_Abort, (MPI_COMM_WORLD, errcode));}bool environment::initialized(){  int flag;  BOOST_MPI_CHECK_RESULT(MPI_Initialized, (&flag));  return flag != 0;}bool environment::finalized(){  int flag;  BOOST_MPI_CHECK_RESULT(MPI_Finalized, (&flag));  return flag != 0;}int environment::max_tag(){  int* max_tag_value;  int found = 0;  BOOST_MPI_CHECK_RESULT(MPI_Attr_get,                         (MPI_COMM_WORLD, MPI_TAG_UB, &max_tag_value, &found));  assert(found != 0);  return *max_tag_value - num_reserved_tags;}int environment::collectives_tag(){  return max_tag() + 1;}optional<int> environment::host_rank(){  int* host;  int found = 0;  BOOST_MPI_CHECK_RESULT(MPI_Attr_get,                         (MPI_COMM_WORLD, MPI_HOST, &host, &found));  if (!found || *host == MPI_PROC_NULL)    return optional<int>();  else    return *host;}optional<int> environment::io_rank(){  int* io;  int found = 0;  BOOST_MPI_CHECK_RESULT(MPI_Attr_get,                         (MPI_COMM_WORLD, MPI_IO, &io, &found));  if (!found || *io == MPI_PROC_NULL)    return optional<int>();  else    return *io;}std::string environment::processor_name(){  char name[MPI_MAX_PROCESSOR_NAME];  int len;  BOOST_MPI_CHECK_RESULT(MPI_Get_processor_name, (name, &len));  return std::string(name, len);}} } // end namespace boost::mpi

⌨️ 快捷键说明

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