AFEPack
组合类型 | 命名空间 | 宏定义 | 函数
MPI_ULoadBalance.h文件参考

完成动态负载平衡的功能。此处的功能是为了使得分区能够不仅仅 在最初的背景单元上进行,使用的技术途径是将几何遗传树的根单 元几何体进行了更换。 更多...

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <cstdio>
#include <boost/program_options.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <AFEPack/Serialization.h>
#include "MPI.h"
#include "MPI_UGeometry_archive.h"
#include "MPI_Migration.h"

浏览该文件的源代码。

组合类型

class  MPI::HLoadBalance< FOREST >
struct  MPI::HLoadBalance< FOREST >::rank_map_val

命名空间

namespace  MPI

宏定义

#define GDIM   0
#define GEO   HGeometry<GDIM,dow>
#define OBJ   Shared_object<GEO>
#define GDIM   1
#define GEO   HGeometry<GDIM,dow>
#define OBJ   Shared_object<GEO>
#define GDIM   2
#define GEO   HGeometry<GDIM,dow>
#define OBJ   Shared_object<GEO>
#define GDIM   3
#define GEO   HGeometry<GDIM,dow>
#define OBJ   Shared_object<GEO>
#define GDIM   0
#define GEO   HGeometry<GDIM,dow>
#define GDIM   1
#define GEO   HGeometry<GDIM,dow>
#define GDIM   2
#define GEO   HGeometry<GDIM,dow>
#define GDIM   3
#define GEO   HGeometry<GDIM,dow>
#define SYNC_DATA(D)
#define SYNC_DATA(D)
#define SYNC_DATA(D)

函数

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, 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)
void MPI::lb_collect_local_data_dir (MPI_Comm comm, const std::string &src_dir, const std::string &dst_dir)
 namespace lb_details
void MPI::lb_sync_local_data_dir (MPI_Comm comm, const std::string &src_dir, const std::string &dst_dir)

详细描述

完成动态负载平衡的功能。此处的功能是为了使得分区能够不仅仅 在最初的背景单元上进行,使用的技术途径是将几何遗传树的根单 元几何体进行了更换。

作者:
Ruo Li <rli@math.pku.edu.cn>
日期:
Sun Dec 5 21:00:16 2010

关于动态负载平衡的基本目标确定为:对背景网格进行重新分区,从而完成一 定程度上的动态负载平衡。这个目标的实现分为下面的步骤:

1. 将每个背景单元上的负载进行计算;

2. 根据背景单元上的负载进行重新分区;

3. 对新的分区方式进行数据分析和准备;

4. 利用序列化将准备的数据存储,以此完成数据分拆;

5. 利用序列化将存储的数据重新在恰当的进程载入;

6. 对载入的数据进行分析、数据合并以及恢复;

在真正的并行机上实际进行并行计算的时候,数据在存储的时候将会由网络 文件系统(NFS)完成最终的硬件存储操作,这会导致非常严重的延迟。因此在 这样的情况下,我们使用下面的方式来进行实用的负载平衡:

1. 使用 HLoadBalance 类将系列化的数据存储在计算节点的本地硬盘上;

2. 使用 lb_sync_local_data_dir 函数将存储的数据在进程间进行交换,使 得每个进程都获得其进行载入时需要的数据文件;

3. 使用 HLoadBalance 类将数据从本地硬盘上载入;

HLoadBalance 在存储的时候会将本进程的在负载平衡以前的数据存储下来, 然后由 lb_sync_local_data_dir 进行分发,使得每个进程拥有负载平衡后 应该载入的数据,这样就在使用网络文件系统的硬件上解决了延迟问题。由 于存储在硬盘上的数据是一个系统的目录结构,对存储和载入数据的目录我 们有下面两点要求:

1. 为了避免出现由于偶然性所带来的问题,需要将数据交换前后的目录名给 一个不会碰巧被别人用的名字。与此同时,在数据网本节点的本地硬盘上 进行存储的时候,请先将可能出问题的目录删除一遍,以避免冲突。

2. 使用中,要求整个通讯器上的存储和载入数据的目录名是一致的,这样可 以使得在同一个计算节点上运行的进程不必进行数据的传输,提高程序运 行的效率。否则,检测不到数据在本地有,将会进行数据传输,这样尽管 运行不会出错,但是效率将会降低。


宏定义文档

#define GDIM   0
#define GDIM   1
#define GDIM   2
#define GDIM   3
#define GDIM   0
#define GDIM   1
#define GDIM   2
#define GDIM   3
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define GEO   HGeometry<GDIM,dow>
#define OBJ   Shared_object<GEO>
#define OBJ   Shared_object<GEO>
#define OBJ   Shared_object<GEO>
#define OBJ   Shared_object<GEO>
#define SYNC_DATA (   D)
值:
if (dim >= D) { \
      sync_data(comm, _forest->template get_shared_list<D>(), *this, \
                &this_t::template pack_set_new_rank<D>, \
                &this_t::template unpack_set_new_rank<D>, \
                type_filter); \
    }
#define SYNC_DATA (   D)
值:
if (dim >= D) { \
      sync_data(comm, _forest->template get_shared_list<D>(), *this,    \
                &this_t::template pack_check_new_rank<D>, \
                &this_t::template unpack_check_new_rank<D>, \
                type_filter); \
    }
#define SYNC_DATA (   D)
值:
if (dim >= D) { \
      sync_data(comm, _forest->template get_shared_list<D>(), *this, \
                &this_t::template pack_global_index<D>, \
                &this_t::template unpack_global_index<D>, \
                type_filter); \
    }