Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mv examples/s4u examples/cpp
[simgrid.git] / examples / cpp / trace-categories / s4u-trace-categories.cpp
diff --git a/examples/cpp/trace-categories/s4u-trace-categories.cpp b/examples/cpp/trace-categories/s4u-trace-categories.cpp
new file mode 100644 (file)
index 0000000..62de2b4
--- /dev/null
@@ -0,0 +1,72 @@
+/* Copyright (c) 2010-2021. The SimGrid Team. All rights reserved.          */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+/* This source code simply loads the platform. This is only useful to play
+ * with the tracing module. See the tesh file to see how to generate the
+ * traces.
+ */
+
+#include "simgrid/instr.h"
+#include "simgrid/s4u.hpp"
+
+struct Task {
+  std::string name;
+  std::string category;
+  double flops;
+  uint64_t bytes;
+};
+
+static void master()
+{
+  auto mbox = simgrid::s4u::Mailbox::by_name("master_mailbox");
+  for (int i = 0; i < 10; i++) {
+    Task task;
+    if (i % 2)
+      task = {"task_compute", "compute", 10000000, 0};
+    else if (i % 3)
+      task = {"task_request", "request", 10, 10};
+    else
+      task = {"task_data", "data", 10, 10000000};
+    mbox->put(new Task(task), task.bytes);
+  }
+  Task finalize = {"finalize", "finalize", 0, 1000};
+  mbox->put(new Task(finalize), finalize.bytes);
+}
+
+static void worker()
+{
+  auto mbox = simgrid::s4u::Mailbox::by_name("master_mailbox");
+  while (true) {
+    auto task = mbox->get_unique<Task>();
+    if (task->name == "finalize") {
+      break;
+    }
+    // creating task and setting its category
+    simgrid::s4u::this_actor::exec_init(task->flops)
+        ->set_name(task->name)
+        ->set_tracing_category(task->category)
+        ->wait();
+  }
+}
+
+int main(int argc, char* argv[])
+{
+  simgrid::s4u::Engine e(&argc, argv);
+  xbt_assert(argc > 1, "Usage: %s platform_file\n \tExample: %s small_platform.xml\n", argv[0], argv[0]);
+
+  e.load_platform(argv[1]);
+
+  // declaring user categories with RGB colors
+  TRACE_category_with_color("compute", "1 0 0");  // red
+  TRACE_category_with_color("request", "0 1 0");  // green
+  TRACE_category_with_color("data", "0 0 1");     // blue
+  TRACE_category_with_color("finalize", "0 0 0"); // black
+
+  simgrid::s4u::Actor::create("master", simgrid::s4u::Host::by_name("Tremblay"), master);
+  simgrid::s4u::Actor::create("worker", simgrid::s4u::Host::by_name("Fafard"), worker);
+
+  e.run();
+  return 0;
+}