AFEPack
命名空间 | 组合类型 | 函数
MPI命名空间参考

命名空间

namespace  __global_controller_environment
namespace  details
namespace  DOF
namespace  FaceData
namespace  lb_details
namespace  Periodic
namespace  Shared_type_filter

组合类型

struct  Remote_pointer
struct  Shared_object
struct  Shared_list
struct  Shared_ptr_list
struct  Transmit_map
struct  PointDistance
class  HGeometryForest
class  BirdView
class  BirdViewSet
class  HGeometryMatcher
class  HLoadBalance
class  MemoryReclaimer
class  DOFSyncer
class  PropSyncer

函数

int get_comm_tag (MPI_Comm comm)
int get_comm_int (MPI_Comm comm)
template<class DataIterator , class TargetIterator >
void sendrecv_data (MPI_Comm comm, int n, DataIterator start_send_data, DataIterator start_recv_data, TargetIterator start_target)
template<class T , class DATA_PACKER , class SHARED_TYPE_FILTER >
void sync_data (MPI_Comm comm, Transmit_map< T, SHARED_TYPE_FILTER > &map, DATA_PACKER &data_packer, void(DATA_PACKER::*pack)(T *, int, AFEPack::ostream<> &), void(DATA_PACKER::*unpack)(T *, int, AFEPack::istream<> &))
template<class T , class SHARED_LIST , class DATA_PACKER >
void sync_data (MPI_Comm comm, SHARED_LIST &shlist, DATA_PACKER &data_packer, void(DATA_PACKER::*pack)(T *, int, AFEPack::ostream<> &), void(DATA_PACKER::*unpack)(T *, int, AFEPack::istream<> &))
template<class T , class SHARED_LIST , class DATA_PACKER , class SHARED_TYPE_FILTER >
void sync_data (MPI_Comm comm, SHARED_LIST &shlist, DATA_PACKER &data_packer, void(DATA_PACKER::*pack)(T *, int, AFEPack::ostream<> &), void(DATA_PACKER::*unpack)(T *, int, AFEPack::istream<> &), const SHARED_TYPE_FILTER &stf)
template<class T , class SHARED_LIST , class DATA_PACKER >
void sync_data (MPI_Comm comm, SHARED_LIST &shlist, DATA_PACKER &data_packer, void(DATA_PACKER::*pack)(T *, int, AFEPack::ostream<> &), void(DATA_PACKER::*unpack)(T *, int, AFEPack::istream<> &), bool(DATA_PACKER::*filter)(T *))
template<class T , class SHARED_LIST , class DATA_PACKER , class SHARED_TYPE_FILTER >
void sync_data (MPI_Comm comm, SHARED_LIST &shlist, DATA_PACKER &data_packer, void(DATA_PACKER::*pack)(T *, int, AFEPack::ostream<> &), void(DATA_PACKER::*unpack)(T *, int, AFEPack::istream<> &), bool(DATA_PACKER::*filter)(T *), const SHARED_TYPE_FILTER &stf)
void registerController (const char *name, void(*function)(const char *), const char *desc=NULL)
void controllerScript (const char *filename, MPI_Comm=MPI_COMM_WORLD)
void getControl ()
template<class T >
void registerController (const char *name, T *obj, void(T::*function)(const char *), const char *desc=NULL)
template<class T >
void registerController (const char *name, const T *obj, void(T::*function)(const char *) const, const char *desc=NULL)
template<class FOREST >
BirdViewSet< FOREST > make_set (BirdView< FOREST > &mesh0, BirdView< FOREST > &mesh1)
template<class FOREST >
BirdViewSet< FOREST > make_set (BirdView< FOREST > &mesh0, BirdView< FOREST > &mesh1, BirdView< FOREST > &mesh2)
template<class FOREST >
BirdViewSet< FOREST > make_set (BirdView< FOREST > &mesh0, BirdView< FOREST > &mesh1, BirdView< FOREST > &mesh2, BirdView< FOREST > &mesh3)
template<class FOREST >
void load_forest (const std::string &dirname, FOREST &forest, bool is_has_orphans=false)
template<class FOREST >
void load_mesh (const std::string &dirname, FOREST &forest, BirdView< FOREST > &mesh, bool is_has_orphans=false)
template<class FOREST >
void load_mesh (const std::string &dirname, FOREST &forest, u_int n_mesh,...)
template<class FOREST >
void load_mesh_set (const std::string &dirname, FOREST &forest, BirdViewSet< FOREST > &bvs, bool is_has_orphans=false)
void lb_collect_local_data_dir (MPI_Comm comm, const std::string &src_dir, const std::string &dst_dir)
 namespace lb_details
void lb_sync_local_data_dir (MPI_Comm comm, const std::string &src_dir, const std::string &dst_dir)
template<class FOREST >
void load_mesh (const std::string &dirname, bool is_has_orphans, FOREST &forest, u_int n_mesh,...)
void init_controller (MPI_Comm comm)
int getOneControl (const int i)

详细描述

˴ʹõ㷨ʹе MemoryReclaimer һģ֮ͬǶڹ 彫лաʹ ULoadBalance ˸ƽ αúܸӣǺʵֹĿͬʱգ˶ еĹ嶼лաΪ˲չ壬ֱṹ Ҫ

"һijϣֵܶȻڴ˷п"

ͨв轫вյļ϶һǣںIJ УǼ˱ǣȷЩ岻ᱻաΪ

1. ΪĵԪбǣ Ǽӵֵϣ

2. бǹĵԪϱǣ

м˱ǵļ壬ͨrelabelHGeometryRecursively У index Ϊ -2 ʱ򣬶ԼǷǹǼĹ ǹһжϣǣͲ index ޸Ϊ-2 index -2ͲᱻաĻ乹ǹļĻս ƽIJ֮󣬹ΪļԺŽС˴ ڴղǷdzȫڹ٣Ӧ ǿԽܵġ


函数文档

void MPI::controllerScript ( const char *  filename,
MPI_Comm  comm = MPI_COMM_WORLD 
)
int MPI::get_comm_int ( MPI_Comm  comm)
int MPI::get_comm_tag ( MPI_Comm  comm)

取一个大于 RAND_MAX/2 的随机数做标签,用来避免大部分的数据冲突。

模掉MPI标签值的上界

模掉MPI标签值的上界

void MPI::getControl ( )
int MPI::getOneControl ( const int  i)
void MPI::init_controller ( MPI_Comm  comm)
void MPI::lb_collect_local_data_dir ( MPI_Comm  comm,
const std::string &  src_dir,
const std::string &  dst_dir 
)

namespace lb_details

假定在数据存储的时候,所有数据都存储在每个计算节点的局部存储上。本 函数将所有这些文件都收集到网络文件系统上的同一个目录中。此实现中直 接使用shell命令来完成,数据传输由网络文件系统来完成,事实上不可能 做到实时,而且可能有很久的延时。其中 src_dir 应该是在计算节点的局 部存储上, dst_dir 应该在全局存储上。

假定在数据存储的时候,所有数据都存储在每个计算节点的局部存储上。本 函数将所有这些文件都收集到网络文件系统上的同一个目录中。此实现中直 接使用shell命令来完成,数据传输由网络文件系统来完成,事实上不可能 做到实时,而且可能有很久的延时。

void MPI::lb_sync_local_data_dir ( MPI_Comm  comm,
const std::string &  src_dir,
const std::string &  dst_dir 
)

在做负载平衡的时候,假定数据被存储在每个计算节点的局部存储上。我 们使用下面的函数将进程之间的文件进行交换,使得每个进程都拿到其需 要载入的数据文件。

先将目录建立好并进行同步,使得后面可以节省数据传输的开销。

如果目标目录存在,说明 i 和 rank 共用同样的存储空间,此时本 进程直接将旧文件移动成为新文件即可。

否则通过网络发送数据

如果源目录存在,则说明 i 和 rank 共用同样的存储空间,此时进 程 i 将会负责将旧文件移动成为新文件,这里什么都不必做。

不会运行到这里的

最后对目录中的两个配置文件进行同步。目前,配置文件的名称为 .config 和 .migration.cfg。

先将目录建立好并进行同步,使得后面可以节省数据传输的开销。

如果目标目录存在,说明 i 和 rank 共用同样的存储空间,此时本 进程直接将旧文件移动成为新文件即可。

否则通过网络发送数据

如果源目录存在,则说明 i 和 rank 共用同样的存储空间,此时进 程 i 将会负责将旧文件移动成为新文件,这里什么都不必做。

不会运行到这里的

最后对目录中的两个配置文件进行同步。目前,配置文件的名称为 .config 和 .migration.cfg。

template<class FOREST >
void MPI::load_forest ( const std::string &  dirname,
FOREST &  forest,
bool  is_has_orphans = false 
)
template<class FOREST >
void MPI::load_mesh ( const std::string &  dirname,
FOREST &  forest,
BirdView< FOREST > &  mesh,
bool  is_has_orphans = false 
)
template<class FOREST >
void MPI::load_mesh ( const std::string &  dirname,
FOREST &  forest,
u_int  n_mesh,
  ... 
)
template<class FOREST >
void MPI::load_mesh ( const std::string &  dirname,
bool  is_has_orphans,
FOREST &  forest,
u_int  n_mesh,
  ... 
)
template<class FOREST >
void MPI::load_mesh_set ( const std::string &  dirname,
FOREST &  forest,
BirdViewSet< FOREST > &  bvs,
bool  is_has_orphans = false 
)
template<class FOREST >
BirdViewSet<FOREST> MPI::make_set ( BirdView< FOREST > &  mesh0,
BirdView< FOREST > &  mesh1 
)
template<class FOREST >
BirdViewSet<FOREST> MPI::make_set ( BirdView< FOREST > &  mesh0,
BirdView< FOREST > &  mesh1,
BirdView< FOREST > &  mesh2 
)
template<class FOREST >
BirdViewSet<FOREST> MPI::make_set ( BirdView< FOREST > &  mesh0,
BirdView< FOREST > &  mesh1,
BirdView< FOREST > &  mesh2,
BirdView< FOREST > &  mesh3 
)
void MPI::registerController ( const char *  name,
void(*)(const char *)  function,
const char *  desc = NULL 
)
template<class T >
void MPI::registerController ( const char *  name,
T *  obj,
void(T::*)(const char *)  function,
const char *  desc = NULL 
)
template<class T >
void MPI::registerController ( const char *  name,
const T *  obj,
void(T::*)(const char *) const  function,
const char *  desc = NULL 
)
template<class DataIterator , class TargetIterator >
void MPI::sendrecv_data ( MPI_Comm  comm,
int  n,
DataIterator  start_send_data,
DataIterator  start_recv_data,
TargetIterator  start_target 
)

进程间发送和接收数据。此函数根据区域分解的基本方式来完成数据的传 送,我们假设:对两个进程 i 和 j,要么互相发送数据,要么根本没有关 系。发送和接收的数据都被打包成为二进制形式存储在一个使用 BinaryBuffer 实现的数组中,整个发送和接收的操作分为两步进行:第一 步是告知对方自己要发送的数据的大小;第二步是发送要发送的数据。

交换发送数据的大小

接收数据缓冲区准备空间

发送和接收数据

template<class T , class DATA_PACKER , class SHARED_TYPE_FILTER >
void MPI::sync_data ( MPI_Comm  comm,
Transmit_map< T, SHARED_TYPE_FILTER > &  map,
DATA_PACKER &  data_packer,
void(DATA_PACKER::*)(T *, int, AFEPack::ostream<> &)  pack,
void(DATA_PACKER::*)(T *, int, AFEPack::istream<> &)  unpack 
)

在进程之间传递数据的函数的使用方式将会成对出现的,发送数据的时候, 由远程指针中的 rank 指定发送目标,数据包由一系列的数据段组成。

typedef void (*data_pack_t)(T * local_obj, int remote_rank, AFEPack::ostream<>& os); typedef void (*data_unpack_t)(T * local_obj, int remote_rank, AFEPack::istream<>& is);

此类有一个模板参数 DATA_PACKER,这个类需要提供两个成员函数类型如 上面的 data_pack_t 和 data_unpack_t,来进行数据的编码和解码工作。

参数:
comm通讯器
data_packer可以完成数据编码和解码的类的对象
pack进行编码的函数指针
unpack进行解码的函数指针

输出信息条目数

信息条目数

template<class T , class SHARED_LIST , class DATA_PACKER >
void MPI::sync_data ( MPI_Comm  comm,
SHARED_LIST &  shlist,
DATA_PACKER &  data_packer,
void(DATA_PACKER::*)(T *, int, AFEPack::ostream<> &)  pack,
void(DATA_PACKER::*)(T *, int, AFEPack::istream<> &)  unpack 
)

使用 SHARED_LIST 中的信息进行数据同步化,同步化操作来自于 DATA_PACKER 及其提供的方法。

参数:
comm通信器
shlist共享对象列表
data_packer可以完成数据编码和解码的类的对象
pack进行编码的函数指针
unpack进行解码的函数指针
template<class T , class SHARED_LIST , class DATA_PACKER , class SHARED_TYPE_FILTER >
void MPI::sync_data ( MPI_Comm  comm,
SHARED_LIST &  shlist,
DATA_PACKER &  data_packer,
void(DATA_PACKER::*)(T *, int, AFEPack::ostream<> &)  pack,
void(DATA_PACKER::*)(T *, int, AFEPack::istream<> &)  unpack,
const SHARED_TYPE_FILTER &  stf 
)
template<class T , class SHARED_LIST , class DATA_PACKER >
void MPI::sync_data ( MPI_Comm  comm,
SHARED_LIST &  shlist,
DATA_PACKER &  data_packer,
void(DATA_PACKER::*)(T *, int, AFEPack::ostream<> &)  pack,
void(DATA_PACKER::*)(T *, int, AFEPack::istream<> &)  unpack,
bool(DATA_PACKER::*)(T *)  filter 
)

使用成员函数做过滤器的版本。

使用常型成员函数做过滤器的版本。

template<class T , class SHARED_LIST , class DATA_PACKER , class SHARED_TYPE_FILTER >
void MPI::sync_data ( MPI_Comm  comm,
SHARED_LIST &  shlist,
DATA_PACKER &  data_packer,
void(DATA_PACKER::*)(T *, int, AFEPack::ostream<> &)  pack,
void(DATA_PACKER::*)(T *, int, AFEPack::istream<> &)  unpack,
bool(DATA_PACKER::*)(T *)  filter,
const SHARED_TYPE_FILTER &  stf 
)