simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(std::string("message"));
+ /* Sleep a while before starting the example */
simgrid::s4u::this_actor::sleep_for(10);
- /* - Send the task to the @ref worker */
- char* payload = bprintf("%f", comm_size);
if (flow_amount == 1) {
+ /* - Send the task to the @ref worker */
+ char* payload = bprintf("%f", comm_size);
mailbox->put(payload, comm_size);
} else {
- // Start all comms in parallel
+ // Start all comms in parallel, and wait for all completions in one shot
std::vector<simgrid::s4u::CommPtr> comms;
for (int i = 0; i < flow_amount; i++)
- comms.push_back(mailbox->put_async(const_cast<char*>("message"), comm_size));
-
- // And now, wait for all comms. Manually since wait_all is not part of this_actor yet
- for (int i = 0; i < flow_amount; i++) {
- simgrid::s4u::CommPtr comm = comms.at(i);
- comm->wait();
- }
- comms.clear();
+ comms.push_back(mailbox->put_async(bprintf("%d", i), comm_size));
+ simgrid::s4u::Comm::wait_all(&comms);
}
XBT_INFO("sender done.");
}
void* res = mailbox->get();
xbt_free(res);
} else {
- void* ignored;
+ void* data[flow_amount];
- // Start all comms in parallel
+ // Start all comms in parallel, and wait for their completion in one shot
std::vector<simgrid::s4u::CommPtr> comms;
for (int i = 0; i < flow_amount; i++)
- comms.push_back(mailbox->get_async(&ignored));
+ comms.push_back(mailbox->get_async(&data[i]));
- // And now, wait for all comms. Manually since wait_all is not part of this_actor yet
+ simgrid::s4u::Comm::wait_all(&comms);
for (int i = 0; i < flow_amount; i++)
- comms.at(i)->wait();
- comms.clear();
+ xbt_free(data[i]);
}
XBT_INFO("receiver done.");
}
simgrid::s4u::Engine e(&argc, argv);
- /* Check if we got --NS3 on the command line, and activate ecofen if so */
- bool NS3 = false;
- for (int i = 0; i < argc; i++) {
- if (strcmp(argv[i], "--NS3") == 0)
- NS3 = true;
- if (NS3) // Found the --NS3 parameter previously; shift the rest of the line
- argv[i] = argv[i + 1];
- }
- if (NS3) {
- xbt_die("No Ecofen in this build");
- // XBT_INFO("Activating the Ecofen energy plugin");
- // ns3_link_energy_plugin_init();
- // xbt_cfg_set_parse("network/model:NS3");
- // argc -= 1; // We removed it from the parameters
- } else {
- XBT_INFO("Activating the SimGrid link energy plugin");
- sg_link_energy_plugin_init();
- }
+ XBT_INFO("Activating the SimGrid link energy plugin");
+ sg_link_energy_plugin_init();
- xbt_assert(argc > 1, "\nUsage: %s platform_file [flowCount [datasize]] [--NS3]\n"
- "\tExample: %s s4uplatform.xml \n"
- "\tIf you add NS3 as last parameter, this will try to activate the ecofen plugin.\n"
- "\tWithout it, it will use the SimGrid link energy plugin.\n",
+ xbt_assert(argc > 1, "\nUsage: %s platform_file [flowCount [datasize]]\n"
+ "\tExample: %s s4uplatform.xml \n",
argv[0], argv[0]);
e.loadPlatform(argv[1]);