AFEPack
公有类型 | 公有成员 | 私有类型 | 私有成员 | 私有属性
MPI::FaceData::SyncerPtr< FOREST, PACKER >模板类参考

#include <MPI_FaceData.h>

所有成员的列表。

公有类型

enum  { dim = FOREST::dim, dow = FOREST::dow }
typedef FOREST forest_t
typedef PACKER packer_t
typedef packer_t::data_t data_t
typedef HGeometry< dim-1, dowgeometry_t
 是一个指针类型

公有成员

 SyncerPtr ()
 SyncerPtr (const forest_t &forest)
 SyncerPtr (const forest_t &forest, const packer_t &packer)
 SyncerPtr (const this_t &syncer)
void set_forest (const forest_t &forest)
const forest_tforest () const
void set_packer (const packer_t &packer)
const packer_t::packer_t * packer () const
template<class OBJ >
void attach_send_buffer (const OBJ &obj, const data_t data) const
template<class OBJ >
void attach_recv_buffer (const OBJ &obj, const data_t data) const
void free_data_buffer ()
void update_transmit_map ()
void sync (bool is_update_transmit_map=true)
bool is_pack_data (geometry_t *geo) const
void pack_data (geometry_t *geo, int remote_rank, AFEPack::ostream<> &os)
void unpack_data (geometry_t *geo, int remote_rank, AFEPack::istream<> &is)

私有类型

typedef SyncerPtr< forest_t,
packer_t
this_t

私有成员

void new_property ()
void free_property ()

私有属性

packer_t _packer
const forest_t_forest
property_id_t< data_t_pid_out
property_id_t< data_t_pid_in
Transmit_map< geometry_t_transmit_map

详细描述

template<class FOREST, class PACKER>
class MPI::FaceData::SyncerPtr< FOREST, PACKER >

SyncerPtrSyncer 的不同之处是实际交换数据的空间是用户自己分配 的,SyncerPtr 自己仅仅记录了用户的数据空间的指针。在部分情况下, 这将会减少一次数据拷贝,使得执行效率得以提升。

请注意下面的例子代码和 Syncer 的不同:

/// 需要交换的数据类型为 std::vector<double>,此处需要在类型中加上指针 typedef MPI::FaceData::FESpace<std::vector<double> *,fe_space_t> data_packer_t; typedef MPI::FaceData::SyncerPtr<forest_t,typename data_packer_t::packer_t> syncer_t;

syncer_t syncer(htree, data_packer_t::get_packer(fem_space)); for (the_dgele 是单元之间的边界) { if (the_dgele 是一个需要交换数据的分区之间的边) { /// 用户需要自行准备发送数据的缓冲区 std::vector<double> * p_send_buf = new std::vector<double)(); ... ... /// 对需要发送的数据进行填充 syncer.attach_send_buffer(*the_dgele, p_send_buf);

/// 与此同时,用户需要自行准备接收数据缓冲区 std::vector<double> * p_recv_buf = new std::vector<double)(); syncer.attach_send_buffer(*the_dgele, p_recv_buf); } } syncer.sync(); /// 交换数据


成员类型定义文档

template<class FOREST , class PACKER >
typedef packer_t::data_t MPI::FaceData::SyncerPtr< FOREST, PACKER >::data_t
template<class FOREST , class PACKER >
typedef FOREST MPI::FaceData::SyncerPtr< FOREST, PACKER >::forest_t
template<class FOREST , class PACKER >
typedef HGeometry<dim-1,dow> MPI::FaceData::SyncerPtr< FOREST, PACKER >::geometry_t

是一个指针类型

template<class FOREST , class PACKER >
typedef PACKER MPI::FaceData::SyncerPtr< FOREST, PACKER >::packer_t
template<class FOREST , class PACKER >
typedef SyncerPtr<forest_t,packer_t> MPI::FaceData::SyncerPtr< FOREST, PACKER >::this_t [private]

成员枚举类型文档

template<class FOREST , class PACKER >
anonymous enum
枚举值:
dim 
dow 

构造及析构函数文档

template<class FOREST , class PACKER >
MPI::FaceData::SyncerPtr< FOREST, PACKER >::SyncerPtr ( ) [inline]
template<class FOREST , class PACKER >
MPI::FaceData::SyncerPtr< FOREST, PACKER >::SyncerPtr ( const forest_t forest) [inline]
template<class FOREST , class PACKER >
MPI::FaceData::SyncerPtr< FOREST, PACKER >::SyncerPtr ( const forest_t forest,
const packer_t packer 
) [inline]
template<class FOREST , class PACKER >
MPI::FaceData::SyncerPtr< FOREST, PACKER >::SyncerPtr ( const this_t syncer) [inline]

成员函数文档

template<class FOREST , class PACKER >
template<class OBJ >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::attach_recv_buffer ( const OBJ obj,
const data_t  data 
) const [inline]

获取依附于对象上的数据接收缓冲区。OBJ 可以是面几何体或者 DGElement。如果缓冲区没有分配,则会进行分配。

template<class FOREST , class PACKER >
template<class OBJ >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::attach_send_buffer ( const OBJ obj,
const data_t  data 
) const [inline]

获取依附于对象上的数据发送缓冲区。OBJ 可以是面几何体或者 DGElement。如果缓冲区没有分配,则会进行分配。

template<class FOREST , class PACKER >
const forest_t& MPI::FaceData::SyncerPtr< FOREST, PACKER >::forest ( ) const [inline]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::free_data_buffer ( ) [inline]

显式释放数据缓冲区。

template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::free_property ( ) [inline, private]
template<class FOREST , class PACKER >
bool MPI::FaceData::SyncerPtr< FOREST, PACKER >::is_pack_data ( geometry_t geo) const [inline]

此处数据应该是由使用方填入,但并不是所有的面几何体均有此数据。 此处判断仅仅对有数据发送的几何体进行操作。

template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::new_property ( ) [inline, private]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::pack_data ( geometry_t geo,
int  remote_rank,
AFEPack::ostream<> &  os 
) [inline]
template<class FOREST , class PACKER >
const packer_t::packer_t* MPI::FaceData::SyncerPtr< FOREST, PACKER >::packer ( ) const [inline]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::set_forest ( const forest_t forest) [inline]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::set_packer ( const packer_t packer) [inline]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::sync ( bool  is_update_transmit_map = true) [inline]

完成数据的交换。在数据交换前,应将发送数据填入数据发送缓冲区, 在交换后可从数据接收缓冲区中获取解收到的数据。在本类的对象自 身析构后,数据缓冲区将自行释放。数据缓冲区是可以重用的,但是 也可以显式调用 free_data_buffer 将所有数据缓冲区释放。

template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::unpack_data ( geometry_t geo,
int  remote_rank,
AFEPack::istream<> &  is 
) [inline]
template<class FOREST , class PACKER >
void MPI::FaceData::SyncerPtr< FOREST, PACKER >::update_transmit_map ( ) [inline]

成员数据文档

template<class FOREST , class PACKER >
const forest_t* MPI::FaceData::SyncerPtr< FOREST, PACKER >::_forest [private]
template<class FOREST , class PACKER >
packer_t MPI::FaceData::SyncerPtr< FOREST, PACKER >::_packer [private]
template<class FOREST , class PACKER >
property_id_t<data_t> MPI::FaceData::SyncerPtr< FOREST, PACKER >::_pid_in [private]
template<class FOREST , class PACKER >
property_id_t<data_t> MPI::FaceData::SyncerPtr< FOREST, PACKER >::_pid_out [private]
template<class FOREST , class PACKER >
Transmit_map<geometry_t> MPI::FaceData::SyncerPtr< FOREST, PACKER >::_transmit_map [private]

该类的文档由以下文件生成: