Skip to content

Commit

Permalink
Merge pull request #550 from DARMA-tasking/521-shared-msg-lambda-elim
Browse files Browse the repository at this point in the history
521 shared msg lambda elim
  • Loading branch information
lifflander authored Nov 30, 2019
2 parents c2aa6a9 + 39ac08e commit a74cd43
Show file tree
Hide file tree
Showing 13 changed files with 232 additions and 302 deletions.
2 changes: 1 addition & 1 deletion src/vt/configs/features/features_defines.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
#define vt_feature_print_term_msgs 0 || vt_feature_cmake_print_term_msgs
#define vt_feature_default_threading 0 || vt_feature_cmake_default_threading
#define vt_feature_no_pool_alloc_env 0 || vt_feature_cmake_no_pool_alloc_env
#define vt_feature_memory_pool 1 || vt_feature_cmake_memory_pool
#define vt_feature_memory_pool 0 || vt_feature_cmake_memory_pool
#define vt_feature_priorities 0 || vt_feature_cmake_priorities
#define vt_feature_cons_multi_idx 0 || vt_feature_cmake_cons_multi_idx
#define vt_feature_fcontext 0 || vt_feature_cmake_fcontext
Expand Down
2 changes: 1 addition & 1 deletion src/vt/messaging/envelope/envelope_ref.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ template <typename Env>
inline void envelopeRef(Env& env);

template <typename Env>
inline void envelopeDeref(Env& env);
inline RefType envelopeDeref(Env& env);

} /* end namespace vt */

Expand Down
6 changes: 3 additions & 3 deletions src/vt/messaging/envelope/envelope_ref.impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ namespace vt {

template <typename Env>
inline void envelopeRef(Env& env) {
reinterpret_cast<Envelope*>(&env)->ref++;
(reinterpret_cast<Envelope*>(&env))->ref++;
}

template <typename Env>
inline void envelopeDeref(Env& env) {
reinterpret_cast<Envelope*>(&env)->ref--;
inline RefType envelopeDeref(Env& env) {
return --(reinterpret_cast<Envelope*>(&env))->ref;
}

} /* end namespace vt */
Expand Down
18 changes: 6 additions & 12 deletions src/vt/messaging/message/refs.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,14 @@

namespace vt {

template <template <typename> class MsgPtrT, typename MsgT>
void messageRef(MsgPtrT<MsgT> msg);
template <typename MsgT>
void messageRef(MsgT* msg);

template <typename MessageT>
void messageRef(MessageT* msg);
template <typename MsgT>
void messageDeref(MsgT* msg);

template <template <typename> class MsgPtrT, typename MsgT>
void messageDeref(MsgPtrT<MsgT> msg);

template <typename MessageT>
void messageDeref(MessageT* msg);

template <typename MessageT>
bool isSharedMessage(MessageT* msg);
template <typename MsgT>
bool isSharedMessage(MsgT* msg);

} /* end namespace vt */

Expand Down
28 changes: 9 additions & 19 deletions src/vt/messaging/message/refs.impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@

namespace vt {

template <typename MessageT>
void messageRef(MessageT* msg) {
template <typename MsgT>
void messageRef(MsgT* msg) {
envelopeRef(msg->env);

debug_print(
Expand All @@ -62,22 +62,17 @@ void messageRef(MessageT* msg) {
);
}

template <template <typename> class MsgPtrT, typename MsgT>
void messageRef(MsgPtrT<MsgT> msg) {
return messageRef(msg.get());
}

template <typename MessageT>
void messageDeref(MessageT* msg) {
envelopeDeref(msg->env);
template <typename MsgT>
void messageDeref(MsgT* msg) {
RefType refcount = envelopeDeref(msg->env);

debug_print(
pool, node,
"messageDeref msg={}, refs={}\n",
print_ptr(msg), envelopeGetRef(msg->env)
print_ptr(msg), refcount
);

if (envelopeGetRef(msg->env) == 0) {
if (refcount == 0) {
/* @todo: what is the correct strategy here? invoking dealloc does not
* invoke the destructor
*
Expand All @@ -93,13 +88,8 @@ void messageDeref(MessageT* msg) {
}
}

template <template <typename> class MsgPtrT, typename MsgT>
void messageDeref(MsgPtrT<MsgT> msg) {
return messageDeref(msg.get());
}

template <typename MessageT>
bool isSharedMessage(MessageT* msg) {
template <typename MsgT>
bool isSharedMessage(MsgT* msg) {
return envelopeGetRef(msg->env) != not_shared_message;
}

Expand Down
27 changes: 14 additions & 13 deletions src/vt/messaging/message/shared_message.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,29 +52,30 @@

namespace vt {

template <typename MessageT, typename... Args>
MessageT* makeSharedMessage(Args&&... args);

template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMessage(Args&&... args);
MsgT* makeSharedMessage(Args&&... args);

template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMsg(Args&&... args);
MsgT* makeSharedMessageSz(std::size_t size, Args&&... args);

template <typename MessageT, typename... Args>
MessageT* makeSharedMessageSz(std::size_t size, Args&&... args);
template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMessage(Args&&... args);

template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMessageSz(std::size_t size, Args&&... args);

template <typename MessageT>
void messageConvertToShared(MessageT* msg);
///[obsolete] Use makeMessage instead.
template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMsg(Args&&... args);

template <typename MsgT>
void messageConvertToShared(MsgT* msg);

template <typename MessageT>
void messageSetUnmanaged(MessageT* msg);
template <typename MsgT>
void messageSetUnmanaged(MsgT* msg);

template <typename MsgPtrT>
void messageResetDeserdes(MsgPtrT const& msg);
template <typename MsgT>
void messageResetDeserdes(MsgSharedPtr<MsgT> const& msg);

} //end namespace vt

Expand Down
43 changes: 22 additions & 21 deletions src/vt/messaging/message/shared_message.impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,15 @@ void messageTypeChecks() {
template <typename MsgT, typename... Args>
MsgT* makeSharedMessage(Args&&... args) {
messageTypeChecks<MsgT>();
auto msg = new MsgT{std::forward<Args>(args)...};
MsgT* msg = new MsgT{std::forward<Args>(args)...};
envelopeSetRef(msg->env, 1);
msg->has_owner_ = false;
return msg;
}

template <typename MsgT, typename... Args>
MsgT* makeSharedMessageSz(std::size_t size, Args&&... args) {
MsgT* msg = new (size) MsgT{std::forward<Args>(args)...};
envelopeSetRef(msg->env, 1);
msg->has_owner_ = false;
return msg;
Expand All @@ -78,41 +86,34 @@ MsgT* makeSharedMessage(Args&&... args) {
template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMessage(Args&&... args) {
messageTypeChecks<MsgT>();
auto msg = makeSharedMessage<MsgT>(std::forward<Args>(args)...);
MsgT* msg = makeSharedMessage<MsgT>(std::forward<Args>(args)...);
return promoteMsgOwner<MsgT>(msg);
}

template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMsg(Args&&... args) {
return makeMessage<MsgT>(std::forward<Args>(args)...);
}

template <typename MessageT, typename... Args>
MessageT* makeSharedMessageSz(std::size_t size, Args&&... args) {
MessageT* msg = new (size) MessageT{std::forward<Args>(args)...};
envelopeSetRef(msg->env, 1);
msg->has_owner_ = false;
return msg;
MsgSharedPtr<MsgT> makeMessageSz(std::size_t size, Args&&... args) {
MsgT* msg = makeSharedMessageSz<MsgT>(size,std::forward<Args>(args)...);
return promoteMsgOwner<MsgT>(msg);
}

///[obsolete] Use makeMessage instead.
template <typename MsgT, typename... Args>
MsgSharedPtr<MsgT> makeMessageSz(std::size_t size, Args&&... args) {
auto msg = makeSharedMessageSz<MsgT>(size,std::forward<Args>(args)...);
return promoteMsgOwner<MsgT>(msg);
MsgSharedPtr<MsgT> makeMsg(Args&&... args) {
return makeMessage<MsgT>(std::forward<Args>(args)...);
}

template <typename MessageT>
void messageConvertToShared(MessageT* msg) {
template <typename MsgT>
void messageConvertToShared(MsgT* msg) {
envelopeSetRef(msg->env, 1);
}

template <typename MessageT>
void messageSetUnmanaged(MessageT* msg) {
template <typename MsgT>
void messageSetUnmanaged(MsgT* msg) {
envelopeSetRef(msg->env, not_shared_message);
}

template <typename MsgPtrT>
void messageResetDeserdes(MsgPtrT const& msg) {
template <typename MsgT>
void messageResetDeserdes(MsgSharedPtr<MsgT> const& msg) {
envelopeSetRef(msg->env, 1);
msg->has_owner_ = true;
}
Expand Down
Loading

0 comments on commit a74cd43

Please sign in to comment.