|
AFEPack
|
命名空间 | |
| 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。
| void MPI::load_forest | ( | const std::string & | dirname, |
| FOREST & | forest, | ||
| bool | is_has_orphans = false |
||
| ) |
| void MPI::load_mesh | ( | const std::string & | dirname, |
| FOREST & | forest, | ||
| BirdView< FOREST > & | mesh, | ||
| bool | is_has_orphans = false |
||
| ) |
| void MPI::load_mesh | ( | const std::string & | dirname, |
| FOREST & | forest, | ||
| u_int | n_mesh, | ||
| ... | |||
| ) |
| void MPI::load_mesh | ( | const std::string & | dirname, |
| bool | is_has_orphans, | ||
| FOREST & | forest, | ||
| u_int | n_mesh, | ||
| ... | |||
| ) |
| void MPI::load_mesh_set | ( | const std::string & | dirname, |
| FOREST & | forest, | ||
| BirdViewSet< FOREST > & | bvs, | ||
| bool | is_has_orphans = false |
||
| ) |
| BirdViewSet<FOREST> MPI::make_set | ( | BirdView< FOREST > & | mesh0, |
| BirdView< FOREST > & | mesh1 | ||
| ) |
| BirdViewSet<FOREST> MPI::make_set | ( | BirdView< FOREST > & | mesh0, |
| BirdView< FOREST > & | mesh1, | ||
| BirdView< FOREST > & | mesh2 | ||
| ) |
| 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 |
||
| ) |
| void MPI::registerController | ( | const char * | name, |
| T * | obj, | ||
| void(T::*)(const char *) | function, | ||
| const char * | desc = NULL |
||
| ) |
| void MPI::registerController | ( | const char * | name, |
| const T * | obj, | ||
| void(T::*)(const char *) const | function, | ||
| const char * | desc = NULL |
||
| ) |
| void MPI::sendrecv_data | ( | MPI_Comm | comm, |
| int | n, | ||
| DataIterator | start_send_data, | ||
| DataIterator | start_recv_data, | ||
| TargetIterator | start_target | ||
| ) |
进程间发送和接收数据。此函数根据区域分解的基本方式来完成数据的传 送,我们假设:对两个进程 i 和 j,要么互相发送数据,要么根本没有关 系。发送和接收的数据都被打包成为二进制形式存储在一个使用 BinaryBuffer 实现的数组中,整个发送和接收的操作分为两步进行:第一 步是告知对方自己要发送的数据的大小;第二步是发送要发送的数据。
交换发送数据的大小
接收数据缓冲区准备空间
发送和接收数据
| 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 | 进行解码的函数指针 |
输出信息条目数
信息条目数
| 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 | 进行解码的函数指针 |
| 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 | ||
| ) |
| 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 | ||
| ) |
使用成员函数做过滤器的版本。
使用常型成员函数做过滤器的版本。
| 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 | ||
| ) |
1.7.6.1