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 | ||
) |