Skip to content

Commit

Permalink
Merge pull request #2125 from STEllAR-GROUP/fixing_parcel_coalescing
Browse files Browse the repository at this point in the history
Making parcel coalescing test actually test something
  • Loading branch information
hkaiser committed May 1, 2016
2 parents 4090e2c + e9e8b9f commit f073a40
Show file tree
Hide file tree
Showing 8 changed files with 164 additions and 34 deletions.
11 changes: 5 additions & 6 deletions CMakeLists.txt
Expand Up @@ -1433,12 +1433,6 @@ if(HPX_WITH_EXAMPLES)
add_subdirectory(examples)
endif()

###############################################################################
# Activate plugins
###############################################################################
add_plugin_modules()
###############################################################################

###############################################################################
# Tests
###############################################################################
Expand Down Expand Up @@ -1472,6 +1466,11 @@ if(HPX_WITH_DOCUMENTATION)
add_subdirectory(docs)
endif()

###############################################################################
# Activate plugins
###############################################################################
add_plugin_modules()

################################################################################
# Configure the header to include all compile definitions
################################################################################
Expand Down
10 changes: 10 additions & 0 deletions hpx/lcos/base_lco.hpp
Expand Up @@ -13,6 +13,8 @@
#include <hpx/runtime/actions/component_action.hpp>
#include <hpx/util/ini.hpp>

#include <hpx/plugins/parcel/coalescing_message_handler_registration.hpp>

#include <boost/exception_ptr.hpp>

namespace hpx { namespace lcos
Expand Down Expand Up @@ -121,4 +123,12 @@ HPX_REGISTER_ACTION_DECLARATION(
HPX_REGISTER_ACTION_DECLARATION(
hpx::lcos::base_lco::disconnect_action, base_disconnect_action)

///////////////////////////////////////////////////////////////////////////////
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION(
hpx::lcos::base_lco::set_event_action, "lco_set_value_action",
std::size_t(-1), std::size_t(-1))
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION(
hpx::lcos::base_lco::set_exception_action, "lco_set_value_action",
std::size_t(-1), std::size_t(-1))

#endif
11 changes: 10 additions & 1 deletion hpx/lcos/base_lco_with_value.hpp
Expand Up @@ -165,6 +165,9 @@ namespace hpx { namespace traits
HPX_REGISTER_TYPED_CONTINUATION_DECLARATION( \
Value \
, BOOST_PP_CAT(typed_continuation_, Name)) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION( \
hpx::lcos::base_lco_with_value<Value>::set_value_action, \
"lco_set_value_action", std::size_t(-1), std::size_t(-1)) \
/**/

#define HPX_REGISTER_BASE_LCO_WITH_VALUE(Value, Name) \
Expand All @@ -177,7 +180,7 @@ namespace hpx { namespace traits
HPX_REGISTER_TYPED_CONTINUATION( \
Value \
, BOOST_PP_CAT(typed_continuation_, Name)) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW( \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION( \
hpx::lcos::base_lco_with_value<Value>::set_value_action, \
"lco_set_value_action", std::size_t(-1), std::size_t(-1)) \
/**/
Expand All @@ -193,6 +196,9 @@ namespace hpx { namespace traits
HPX_REGISTER_TYPED_CONTINUATION( \
Value \
, BOOST_PP_CAT(typed_continuation_, Name)) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION( \
hpx::lcos::base_lco_with_value<Value>::set_value_action, \
"lco_set_value_action", std::size_t(-1), std::size_t(-1)) \
/**/
#define HPX_REGISTER_BASE_LCO_WITH_VALUE_ID2( \
Value, RemoteValue, Name, ActionIdGet, ActionIdSet) \
Expand All @@ -207,6 +213,9 @@ namespace hpx { namespace traits
HPX_REGISTER_TYPED_CONTINUATION( \
Value \
, BOOST_PP_CAT(typed_continuation_, Name)) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION( \
hpx::lcos::base_lco_with_value<Value>::set_value_action, \
"lco_set_value_action", std::size_t(-1), std::size_t(-1)) \
/**/


Expand Down
78 changes: 66 additions & 12 deletions hpx/plugins/parcel/coalescing_message_handler_registration.hpp
Expand Up @@ -58,32 +58,34 @@ namespace hpx { namespace parcelset
/**/

///////////////////////////////////////////////////////////////////////////////
#define HPX_ACTION_USES_MESSAGE_COALESCING(...) \
HPX_ACTION_USES_MESSAGE_COALESCING_(__VA_ARGS__) \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION(...) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_(__VA_ARGS__) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_(...) \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_(...) \
HPX_UTIL_EXPAND_(BOOST_PP_CAT( \
HPX_ACTION_USES_MESSAGE_COALESCING_, HPX_UTIL_PP_NARG(__VA_ARGS__) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_, \
HPX_UTIL_PP_NARG(__VA_ARGS__) \
)(__VA_ARGS__)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_1(action_type) \
HPX_ACTION_USES_MESSAGE_COALESCING_4(action_type, \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_1(action_type) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_4(action_type, \
BOOST_PP_STRINGIZE(action_type), std::size_t(-1), std::size_t(-1)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_2(action_type, num) \
HPX_ACTION_USES_MESSAGE_COALESCING_3(action_type, \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_2(action_type, num) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_3(action_type, \
BOOST_PP_STRINGIZE(action_type), num, std::size_t(-1)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_3(action_type, num, interval) \
HPX_ACTION_USES_MESSAGE_COALESCING_3(action_type, \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_3( \
action_type, num, interval) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_3(action_type, \
BOOST_PP_STRINGIZE(action_type), num, interval) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_4( \
#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION_4( \
action_type, action_name, num, interval) \
namespace hpx { namespace traits \
{ \
Expand All @@ -99,10 +101,49 @@ namespace hpx { namespace parcelset
} \
}; \
}} \
/**/

///////////////////////////////////////////////////////////////////////////////
#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION(...) \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_(__VA_ARGS__) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_(...) \
HPX_UTIL_EXPAND_(BOOST_PP_CAT( \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_, \
HPX_UTIL_PP_NARG(__VA_ARGS__) \
)(__VA_ARGS__)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_1(action_type) \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_4(action_type, \
BOOST_PP_STRINGIZE(action_type), std::size_t(-1), std::size_t(-1)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_2(action_type, num) \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_3(action_type, \
BOOST_PP_STRINGIZE(action_type), num, std::size_t(-1)) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_3( \
action_type, num, interval) \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_3(action_type, \
BOOST_PP_STRINGIZE(action_type), num, interval) \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION_4( \
action_type, action_name, num, interval) \
HPX_REGISTER_COALESCING_COUNTERS(action_type, action_name); \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW( \
///////////////////////////////////////////////////////////////////////////////
#define HPX_ACTION_USES_MESSAGE_COALESCING(...) \
HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION(__VA_ARGS__) \
HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION(__VA_ARGS__) \
/**/

///////////////////////////////////////////////////////////////////////////////
#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION( \
action_type, action_name, num, interval) \
namespace hpx { namespace traits \
{ \
Expand All @@ -119,12 +160,25 @@ namespace hpx { namespace parcelset
} \
}; \
}} \
/**/

#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION( \
action_type, action_name, num, interval) \
HPX_REGISTER_COALESCING_COUNTERS(action_type, action_name); \

#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW(...) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION(__VA_ARGS__) \
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION(__VA_ARGS__) \
/**/

#else

#define HPX_ACTION_USES_MESSAGE_COALESCING_DECLARATION(...)
#define HPX_ACTION_USES_MESSAGE_COALESCING_DEFINITION(...)
#define HPX_ACTION_USES_MESSAGE_COALESCING(...)

#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DECLARATION(...)
#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION(...)
#define HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW(...)

#endif
Expand Down
35 changes: 35 additions & 0 deletions hpx/runtime/actions/plain_action.hpp
Expand Up @@ -169,6 +169,41 @@ namespace hpx { namespace traits

/// \endcond

///////////////////////////////////////////////////////////////////////////////
/// \def HPX_DECLARE_PLAIN_ACTION(func, name)
/// \brief Declares a plain action type
///
#define HPX_DECLARE_PLAIN_ACTION(...) \
HPX_DECLARE_PLAIN_ACTION_(__VA_ARGS__) \
/**/

/// \cond NOINTERNAL

#define HPX_DECLARE_PLAIN_DIRECT_ACTION(...) \
HPX_DECLARE_PLAIN_DIRECT_ACTION_(__VA_ARGS__) \
/**/

#define HPX_DECLARE_PLAIN_ACTION_(...) \
HPX_UTIL_EXPAND_(BOOST_PP_CAT( \
HPX_DECLARE_PLAIN_ACTION_, HPX_UTIL_PP_NARG(__VA_ARGS__) \
)(__VA_ARGS__)) \
/**/

#define HPX_DECLARE_PLAIN_DIRECT_ACTION_(...) \
HPX_UTIL_EXPAND_(BOOST_PP_CAT( \
HPX_DECLARE_PLAIN_DIRECT_ACTION_, HPX_UTIL_PP_NARG(__VA_ARGS__) \
)(__VA_ARGS__)) \
/**/

#define HPX_DECLARE_PLAIN_ACTION_1(func) \
HPX_DECLARE_PLAIN_ACTION_2(func, BOOST_PP_CAT(func, _action)) \
/**/

#define HPX_DECLARE_PLAIN_ACTION_2(func, name) struct name; \
/**/

/// \endcond

/// \def HPX_PLAIN_ACTION(func, name)
///
/// \brief Defines a plain action type based on the given function
Expand Down
2 changes: 1 addition & 1 deletion hpx/runtime/components/client.hpp
Expand Up @@ -37,7 +37,7 @@ namespace hpx { namespace components
explicit client(future_type && f)
: base_type(std::move(f))
{}
explicit client(future<naming::id_type> && f)
client(future<naming::id_type> && f)
: base_type(std::move(f))
{}

Expand Down
6 changes: 2 additions & 4 deletions src/lcos/base_lco.cpp
Expand Up @@ -13,8 +13,6 @@
#include <hpx/util/ini.hpp>
#include <hpx/util/serialize_exception.hpp>

#include <hpx/plugins/parcel/coalescing_message_handler_registration.hpp>

#include <boost/exception_ptr.hpp>

namespace hpx { namespace lcos
Expand Down Expand Up @@ -78,10 +76,10 @@ HPX_REGISTER_ACTION_ID(hpx::lcos::base_lco::disconnect_action,
base_disconnect_action, hpx::actions::base_disconnect_action_id)

///////////////////////////////////////////////////////////////////////////////
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW(
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION(
hpx::lcos::base_lco::set_event_action, "lco_set_value_action",
std::size_t(-1), std::size_t(-1))
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW(
HPX_ACTION_USES_MESSAGE_COALESCING_NOTHROW_DEFINITION(
hpx::lcos::base_lco::set_exception_action, "lco_set_value_action",
std::size_t(-1), std::size_t(-1))

Expand Down
45 changes: 35 additions & 10 deletions tests/unit/parcelset/put_parcels_with_coalescing.cpp
Expand Up @@ -11,6 +11,7 @@
#include <hpx/util/lightweight_test.hpp>

#include <string>
#include <utility>
#include <vector>

///////////////////////////////////////////////////////////////////////////////
Expand All @@ -35,13 +36,28 @@ generate_parcel(hpx::id_type const& dest, hpx::id_type const& cont, T && data)
}

///////////////////////////////////////////////////////////////////////////////
hpx::id_type test1(std::vector<double> const& data)
struct test_server : hpx::components::component_base<test_server>
{
return hpx::find_here();
}
HPX_PLAIN_ACTION(test1);
typedef hpx::components::component_base<test_server> base_type;

hpx::id_type test1(std::vector<double> const& data)
{
return hpx::find_here();
}

HPX_DEFINE_COMPONENT_ACTION(test_server, test1, test1_action);
};

typedef hpx::components::component<test_server> server_type;
HPX_REGISTER_COMPONENT(server_type, test_server);

typedef test_server::test1_action test1_action;

HPX_REGISTER_ACTION_DECLARATION(test1_action);
HPX_ACTION_USES_MESSAGE_COALESCING(test1_action);
HPX_REGISTER_ACTION(test1_action);

///////////////////////////////////////////////////////////////////////////////
void test_plain_argument(hpx::id_type const& id)
{
std::vector<double> data(vsize_default);
Expand All @@ -50,13 +66,15 @@ void test_plain_argument(hpx::id_type const& id)
std::vector<hpx::future<hpx::id_type> > results;
results.reserve(numparcels_default);

hpx::components::client<test_server> c = hpx::new_<test_server>(id);

// create parcels
std::vector<hpx::parcelset::parcel> parcels;
for (std::size_t i = 0; i != numparcels_default; ++i)
{
hpx::lcos::promise<hpx::id_type> p;
parcels.push_back(
generate_parcel<test1_action>(id, p.get_id(), data)
generate_parcel<test1_action>(c.get_id(), p.get_id(), data)
);
results.push_back(p.get_future());
}
Expand All @@ -78,8 +96,9 @@ hpx::id_type test2(hpx::future<double> const& data)
{
return hpx::find_here();
}
HPX_PLAIN_ACTION(test2);
HPX_DECLARE_PLAIN_ACTION(test2, test2_action);
HPX_ACTION_USES_MESSAGE_COALESCING(test2_action);
HPX_PLAIN_ACTION(test2, test2_action);

void test_future_argument(hpx::id_type const& id)
{
Expand Down Expand Up @@ -134,6 +153,8 @@ void test_mixed_arguments(hpx::id_type const& id)
std::vector<hpx::future<hpx::id_type> > results;
results.reserve(numparcels_default);

hpx::components::client<test_server> c = hpx::new_<test_server>(id);

// create parcels
std::vector<hpx::parcelset::parcel> parcels;
for (std::size_t i = 0; i != numparcels_default; ++i)
Expand All @@ -143,7 +164,7 @@ void test_mixed_arguments(hpx::id_type const& id)
if (std::rand() % 2)
{
parcels.push_back(
generate_parcel<test1_action>(id, p_cont.get_id(), data)
generate_parcel<test1_action>(c.get_id(), p_cont.get_id(), data)
);
}
else
Expand Down Expand Up @@ -189,6 +210,8 @@ void print_counters(char const* name)
for (performance_counter const& c : counters)
{
counter_value value = c.get_counter_value_sync();
HPX_TEST_NEQ(value.get_value<double>(), 0.0);

hpx::cout
<< "counter: " << c.get_name_sync()
<< ", value: " << value.get_value<double>()
Expand All @@ -213,9 +236,11 @@ int hpx_main(boost::program_options::variables_map& vm)
test_mixed_arguments(id);
}

// compare number of parcels with number of messages generated
print_counters("/parcels/count/*/sent");
print_counters("/messages/count/*/sent");
// make sure coalescing was actually invoked
print_counters("/coalescing{locality#0/total}/count/parcels@test1_action");
print_counters("/coalescing{locality#0/total}/count/parcels@test2_action");
print_counters("/coalescing{locality#0/total}/count/messages@test1_action");
print_counters("/coalescing{locality#0/total}/count/messages@test2_action");

return hpx::finalize();
}
Expand Down

0 comments on commit f073a40

Please sign in to comment.