X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fb5f062589c377c00ba0de7691da6425ad7ada1c..fe4080b8dd04acb2074ca72d36e3019acddea455:/src/dag/loaders.cpp diff --git a/src/dag/loaders.cpp b/src/dag/loaders.cpp index 676b98b07f..57ec032b56 100644 --- a/src/dag/loaders.cpp +++ b/src/dag/loaders.cpp @@ -21,7 +21,13 @@ #include "dax_dtd.c" #if SIMGRID_HAVE_JSON +// Disable implicit conversions. See https://github.com/nlohmann/json#implicit-conversions +#ifdef JSON_USE_IMPLICIT_CONVERSIONS +#undef JSON_USE_IMPLICIT_CONVERSIONS +#endif +#define JSON_USE_IMPLICIT_CONVERSIONS 0 #include +#include #endif #if HAVE_GRAPHVIZ @@ -94,20 +100,25 @@ std::vector create_DAG_from_json(const std::string& filename) std::ifstream f(filename); auto data = nlohmann::json::parse(f); std::vector dag = {}; - std::map> successors = {}; + std::map, std::less<>> successors = {}; std::map comms_destinations = {}; ActivityPtr current; for (auto const& task: data["workflow"]["tasks"]) { if (task["type"] == "compute") { - current = Exec::init()->set_name(task["name"])->set_flops_amount(task["runtime"]); + current = + Exec::init()->set_name(task["name"].get())->set_flops_amount(task["runtimeInSeconds"].get()); if (task.contains("machine")) - dynamic_cast(current.get())->set_host(simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"])); + dynamic_cast(current.get()) + ->set_host(simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"].get())); } else if (task["type"] == "transfer"){ - current = Comm::sendto_init()->set_name(task["name"])->set_payload_size(task["bytesWritten"]); + current = Comm::sendto_init() + ->set_name(task["name"].get()) + ->set_payload_size(task["writtenBytes"].get()); if (task.contains("machine")) - comms_destinations[current] = simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"]); + comms_destinations[current] = + simgrid::s4u::Engine::get_instance()->host_by_name(task["machine"].get()); if (task["parents"].size() == 1) { ActivityPtr parent_activity; for (auto const& activity: dag) { @@ -121,17 +132,15 @@ std::vector create_DAG_from_json(const std::string& filename) else if (dynamic_cast(parent_activity.get()) != nullptr) dynamic_cast(current.get())->set_source(dynamic_cast(parent_activity.get())->get_destination()); } + } else if (XBT_LOG_ISENABLED(dag_parsing, xbt_log_priority_debug)) { + std::stringstream ss; + ss << task["type"]; + XBT_DEBUG("Task type \"%s\" not supported.", ss.str().c_str()); } - else - XBT_DEBUG("Task type \"%s\" not supported.", task["type"]); dag.push_back(current); - for (auto const& parent: task["parents"]) { - auto it = successors.find(parent); - if (it == successors.end()) - successors[parent] = {}; - successors[parent].push_back(current); - } + for (auto const& parent : task["parents"]) + successors[parent.get()].push_back(current); } // Assign successors for (auto const& [parent, successors_list] : successors) @@ -147,7 +156,7 @@ std::vector create_DAG_from_json(const std::string& filename) // Start only Activities with dependencies solved for (auto const& activity: dag) { - if (dynamic_cast(activity.get()) != nullptr and activity->dependencies_solved()) + if (dynamic_cast(activity.get()) != nullptr && activity->dependencies_solved()) activity->start(); } return dag;