DARMA-tasking / vt

DARMA/vt => Virtual Transport
Other
35 stars 8 forks source link

2094: Allow ObjGroup broadcast to selected nodes #2210

Closed JacobDomagala closed 10 months ago

JacobDomagala commented 10 months ago

Fixes #2094


#include "common/test_harness.h"
#include <vt/transport.h>

#include <fmt-vt/core.h>

using namespace vt;
using namespace vt::tests::perf::common;

struct MyTest : PerfTestHarness { };

struct NodeObj {
  void handler(int, int b) {
  }
};

VT_PERF_TEST(MyTest, test_objgroup_send) {
  using namespace ::vt::group::region;

  const auto num_nodes = vt::theContext()->getNumNodes();

  auto proxy = vt::theObjGroup()->makeCollective<NodeObj>(
    "test_objgroup_local_send");

  List::ListType range;
  for(NodeType n = 0; n < num_nodes - 1; ++n){
    range.push_back(n);
  }

  if (theContext()->getNode() == 0) {

    for(auto& node : range){
      proxy[node].send<&NodeObj::handler>(10, 20);
    }

    for(auto& node : range){
      proxy[node].send<&NodeObj::handler>(10, 20);
    }
  }

  vt::theCollective()->barrier();
}

VT_PERF_TEST(MyTest, test_objgroup_multicast) {
  using namespace ::vt::group::region;

  const auto num_nodes = vt::theContext()->getNumNodes();

  auto proxy = vt::theObjGroup()->makeCollective<NodeObj>(
    "test_objgroup_local_send");

  List::ListType range;
  for(NodeType n = 0; n < num_nodes - 1; ++n){
    range.push_back(n);
  }

  if (theContext()->getNode() == 0) {
    proxy.multicast<&NodeObj::handler>(
      std::make_unique<List>(range), 10, 20);

    proxy.multicast<&NodeObj::handler>(
      std::make_unique<List>(range), 10, 20);
  }

  vt::theCollective()->barrier();
}

VT_PERF_TEST_MAIN()

SEND

image


MULTICAST

image

github-actions[bot] commented 10 months ago

Pipelines results

PR tests (gcc-12, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-9, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (gcc-9, ubuntu, mpich, zoltan, json schema test)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-13, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-12, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (gcc-10, ubuntu, openmpi, no LB)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-11, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-14, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (gcc-8, ubuntu, mpich, address sanitizer)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (clang-10, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (gcc-11, ubuntu, mpich, trace runtime, coverage)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (intel icpc, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

Compilation - successful

Testing - passed

Build log


PR tests (nvidia cuda 11.2, gcc-9, ubuntu, mpich)

Build for 7fb28eba5f162fda61b7c02d7e10e03a23647bd9 (2023-11-08 16:05:39 UTC)

/vt/src/vt/pipe/pipe_manager.impl.h(133): warning: missing return statement at end of non-void function "vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&vt::vrt::collection::lb::GreedyLB::collectHandler, Target=vt::objgroup::proxy::ProxyElm<vt::vrt::collection::lb::GreedyLB>]"
          detected during:
            instantiation of "auto vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&vt::vrt::collection::lb::GreedyLB::collectHandler, Target=vt::objgroup::proxy::ProxyElm<vt::vrt::collection::lb::GreedyLB>]" 
/vt/src/vt/objgroup/proxy/proxy_objgroup.impl.h(200): here
            instantiation of "vt::objgroup::proxy::Proxy<ObjT>::PendingSendType vt::objgroup::proxy::Proxy<ObjT>::reduce<f,Op,Target,Args...>(Target, Args &&...) const [with ObjT=vt::vrt::collection::lb::GreedyLB, f=&vt::vrt::collection::lb::GreedyLB::collectHandler, Op=vt::collective::PlusOp, Target=vt::objgroup::proxy::ProxyElm<vt::vrt::collection::lb::GreedyLB>, Args=<vt::vrt::collection::lb::GreedyPayload>]" 
/vt/src/vt/vrt/collection/balance/greedylb/greedylb.cc(222): here

/vt/src/vt/pipe/pipe_manager.impl.h(133): warning: missing return statement at end of non-void function "vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&MyObj::handler, Target=vt::objgroup::proxy::ProxyElm<MyObj>]"
          detected during instantiation of "auto vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&MyObj::handler, Target=vt::objgroup::proxy::ProxyElm<MyObj>]" 
/vt/examples/callback/callback.cc(147): here

/vt/src/vt/pipe/pipe_manager.impl.h(133): warning: missing return statement at end of non-void function "vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&colHan, Target=vt::vrt::collection::VrtElmProxy<MyCol, vt::Index1D>]"
          detected during instantiation of "auto vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&colHan, Target=vt::vrt::collection::VrtElmProxy<MyCol, vt::Index1D>]" 
/vt/examples/callback/callback.cc(153): here

/vt/src/vt/pipe/pipe_manager.impl.h(133): warning: missing return statement at end of non-void function "vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&MyObj::handler, Target=vt::objgroup::proxy::ProxyElm<MyObj>]"
          detected during instantiation of "auto vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&MyObj::handler, Target=vt::objgroup::proxy::ProxyElm<MyObj>]" 
/vt/examples/callback/callback.cc(147): here

/vt/src/vt/pipe/pipe_manager.impl.h(133): warning: missing return statement at end of non-void function "vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&colHan, Target=vt::vrt::collection::VrtElmProxy<MyCol, vt::Index1D>]"
          detected during instantiation of "auto vt::pipe::PipeManager::makeSend<f,Target>(Target) [with f=&colHan, Target=vt::vrt::collection::VrtElmProxy<MyCol, vt::Index1D>]" 
/vt/examples/callback/callback.cc(153%0D%0A%0D%0A%0D%0A ==> And there is more. Read log. <==

Build log