📄 win_inln.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) 2007 Sun Microsystems, Inc. All rights reserved.// Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.// $COPYRIGHT$// // Additional copyrights may follow// // $HEADER$////// Miscellany//inline MPI::Errhandler MPI::Win::Create_errhandler(MPI::Win::Errhandler_fn* function){ MPI_Errhandler errhandler; (void) MPI_Win_create_errhandler((MPI_Win_errhandler_fn *) ompi_mpi_cxx_win_errhandler_intercept, &errhandler); MPI::Errhandler temp(errhandler); temp.win_handler_fn = (void(*)(MPI::Win&, int* , ...)) function; return temp;} inline MPI::Errhandler MPI::Win:: Get_errhandler() const { return *my_errhandler;}//// One sided communication//inline void MPI::Win::Accumulate(const void* origin_addr, int origin_count, const MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp, int target_count, const MPI::Datatype& target_datatype, const MPI::Op& op) const { (void) MPI_Accumulate(const_cast<void *>(origin_addr), origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, op, mpi_win); }inline voidMPI::Win::Complete() const { (void) MPI_Win_complete(mpi_win);}inline MPI::Win MPI::Win::Create(const void* base, MPI::Aint size, int disp_unit, const MPI::Info& info, const MPI::Intracomm& comm) { MPI_Win newwin; (void) MPI_Win_create(const_cast<void *>(base), size, disp_unit, info, comm, &newwin); return newwin;}inline void MPI::Win::Fence(int assert) const { (void) MPI_Win_fence(assert, mpi_win);}inline void MPI::Win::Get(const void *origin_addr, int origin_count, const MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp, int target_count, const MPI::Datatype& target_datatype) const { (void) MPI_Get(const_cast<void *>(origin_addr), origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, mpi_win);}inline MPI::Group MPI::Win::Get_group() const{ MPI_Group mpi_group; (void) MPI_Win_get_group(mpi_win, &mpi_group); return mpi_group;}inline void MPI::Win::Lock(int lock_type, int rank, int assert) const { (void) MPI_Win_lock(lock_type, rank, assert, mpi_win);}inline void MPI::Win::Post(const MPI::Group& group, int assert) const { (void) MPI_Win_post(group, assert, mpi_win);}inline void MPI::Win::Put(const void* origin_addr, int origin_count, const MPI::Datatype& origin_datatype, int target_rank, MPI::Aint target_disp, int target_count, const MPI::Datatype& target_datatype) const { (void) MPI_Put(const_cast<void *>(origin_addr), origin_count, origin_datatype, target_rank, target_disp, target_count, target_datatype, mpi_win); }inline void MPI::Win::Start(const MPI::Group& group, int assert) const{ (void) MPI_Win_start(group, assert, mpi_win);}inline bool MPI::Win::Test() const{ int flag; MPI_Win_test(mpi_win, &flag); return OPAL_INT_TO_BOOL(flag); }inline void MPI::Win::Unlock(int rank) const{ (void) MPI_Win_unlock(rank, mpi_win);}inline void MPI::Win::Wait() const{ (void) MPI_Win_wait(mpi_win);}//// External Interfaces//inline void MPI::Win::Call_errhandler(int errorcode) const{ (void) MPI_Win_call_errhandler(mpi_win, errorcode);}// 1) original Create_keyval that takes the first 2 arguments as C++// functionsinline intMPI::Win::Create_keyval(MPI::Win::Copy_attr_function* win_copy_attr_fn, MPI::Win::Delete_attr_function* win_delete_attr_fn, void* extra_state){ // Back-end function does the heavy lifting return do_create_keyval(NULL, NULL, win_copy_attr_fn, win_delete_attr_fn, extra_state);}// 2) overload Create_keyval to take the first 2 arguments as C// functionsinline intMPI::Win::Create_keyval(MPI_Win_copy_attr_function* win_copy_attr_fn, MPI_Win_delete_attr_function* win_delete_attr_fn, void* extra_state){ // Back-end function does the heavy lifting return do_create_keyval(win_copy_attr_fn, win_delete_attr_fn, NULL, NULL, extra_state);}// 3) overload Create_keyval to take the first 2 arguments as C++ & C// functionsinline intMPI::Win::Create_keyval(MPI::Win::Copy_attr_function* win_copy_attr_fn, MPI_Win_delete_attr_function* win_delete_attr_fn, void* extra_state){ // Back-end function does the heavy lifting return do_create_keyval(NULL, win_delete_attr_fn, win_copy_attr_fn, NULL, extra_state);}// 4) overload Create_keyval to take the first 2 arguments as C & C++// functionsinline intMPI::Win::Create_keyval(MPI_Win_copy_attr_function* win_copy_attr_fn, MPI::Win::Delete_attr_function* win_delete_attr_fn, void* extra_state){ // Back-end function does the heavy lifting return do_create_keyval(win_copy_attr_fn, NULL, NULL, win_delete_attr_fn, extra_state);}inline void MPI::Win::Delete_attr(int win_keyval) { (void) MPI_Win_delete_attr(mpi_win, win_keyval);}inline void MPI::Win::Free_keyval(int& win_keyval){ (void) MPI_Win_free_keyval(&win_keyval);}// version 1: pre-errata Get_attr (not correct, but probably nice to supportinline boolMPI::Win::Get_attr(const Win& win, int win_keyval, void* attribute_val) const{ int ret; (void) MPI_Win_get_attr(win, win_keyval, attribute_val, &ret); return OPAL_INT_TO_BOOL(ret);}// version 2: post-errata Get_attr (correct, but no one seems to know about it)inline bool MPI::Win::Get_attr(int win_keyval, void* attribute_val) const{ int ret; (void) MPI_Win_get_attr(mpi_win, win_keyval, attribute_val, &ret); return OPAL_INT_TO_BOOL(ret);}inline void MPI::Win::Get_name(char* win_name, int& resultlen) const{ (void) MPI_Win_get_name(mpi_win, win_name, &resultlen);}inline void MPI::Win::Set_attr(int win_keyval, const void* attribute_val) { (void) MPI_Win_set_attr(mpi_win, win_keyval, const_cast<void *>(attribute_val));}inline void MPI::Win::Set_name(const char* win_name) { (void) MPI_Win_set_name(mpi_win, const_cast<char *>(win_name));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -