x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
mpi_datatype_primitive.hpp - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\GameFactory\GameFactoryDemo\references\boost_1_35_0\boost\mpi\detail\mpi_datatype_primitive.hpp
旋转
特效
属性
历史版本
// (C) Copyright 2005 Matthias Troyer // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // Authors: Matthias Troyer #ifndef BOOST_MPI_DETAIL_MPI_DATATYPE_OPRIMITIVE_HPP #define BOOST_MPI_DETAIL_MPI_DATATYPE_OPRIMITIVE_HPP #include
#include
// size_t #include
#if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::size_t; } // namespace std #endif #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace mpi { namespace detail { ///////////////////////////////////////////////////////////////////////// // class mpi_data_type_oprimitive - creation of custom MPI data types class mpi_datatype_primitive { public: // trivial default constructor mpi_datatype_primitive() : is_committed(false), origin(0) {} mpi_datatype_primitive(void const* orig) : is_committed(false), origin() { BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast
(orig), &origin)); } void save_binary(void const *address, std::size_t count) { save_impl(address,MPI_BYTE,count); } // fast saving of arrays of MPI types template
void save_array(serialization::array
const& x, unsigned int /* version */) { if (x.count()) save_impl(x.address(), boost::mpi::get_mpi_datatype(*x.address()), x.count()); } typedef is_mpi_datatype
use_array_optimization; // create and return the custom MPI data type MPI_Datatype get_mpi_datatype() { if (!is_committed) { BOOST_MPI_CHECK_RESULT(MPI_Type_struct, ( addresses.size(), boost::serialization::detail::get_data(lengths), boost::serialization::detail::get_data(addresses), boost::serialization::detail::get_data(types), &datatype_ )); BOOST_MPI_CHECK_RESULT(MPI_Type_commit,(&datatype_)); is_committed = true; } return datatype_; } // default saving of primitives. template
void save(const T & t) { save_impl(&t, boost::mpi::get_mpi_datatype(t), 1); } private: void save_impl(void const * p, MPI_Datatype t, int l) { BOOST_ASSERT ( !is_committed ); // store address, type and length MPI_Aint a; BOOST_MPI_CHECK_RESULT(MPI_Address,(const_cast
(p), &a)); addresses.push_back(a-origin); types.push_back(t); lengths.push_back(l); } std::vector
addresses; std::vector
types; std::vector
lengths; bool is_committed; MPI_Datatype datatype_; MPI_Aint origin; }; } } } // end namespace boost::mpi::detail #endif // BOOST_MPI_DETAIL_MPI_DATATYPE_OPRIMITIVE_HPP
mpi_datatype_primitive.hpp
网页地址
文件地址
上一页
14/18
下一页
下载
( 3 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.