--- /dev/null
+/* Copyright (c) 2007-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. */
+
+#include "simgrid/actor.h"
+#include "simgrid/comm.h"
+#include "simgrid/engine.h"
+#include "simgrid/forward.h"
+#include "simgrid/mailbox.h"
+#include "xbt/asserts.h"
+#include "xbt/log.h"
+#include "xbt/str.h"
+
+#include <stdio.h> /* snprintf */
+
+XBT_LOG_NEW_DEFAULT_CATEGORY(app_pingpong, "Messages specific for this example");
+
+static void pinger(int argc, char* argv[])
+{
+ sg_mailbox_t mailbox_in = sg_mailbox_by_name("Mailbox 1");
+ sg_mailbox_t mailbox_out = sg_mailbox_by_name("Mailbox 2");
+
+ XBT_INFO("Ping from mailbox %s to mailbox %s", sg_mailbox_get_name(mailbox_in), sg_mailbox_get_name(mailbox_out));
+
+ /* - Do the ping with a 1-Byte task (latency bound) ... */
+ double* now = (double*)xbt_malloc(sizeof(double));
+ *now = simgrid_get_clock();
+ sg_mailbox_put(mailbox_out, now, 1);
+
+ /* - ... then wait for the (large) pong */
+ double* sender_time = (double*)sg_mailbox_get(mailbox_in);
+
+ double communication_time = simgrid_get_clock() - *sender_time;
+ XBT_INFO("Task received : large communication (bandwidth bound)");
+ XBT_INFO("Pong time (bandwidth bound): %.3f", communication_time);
+ xbt_free(sender_time);
+}
+
+static void ponger(int argc, char* argv[])
+{
+ sg_mailbox_t mailbox_in = sg_mailbox_by_name("Mailbox 2");
+ sg_mailbox_t mailbox_out = sg_mailbox_by_name("Mailbox 1");
+
+ XBT_INFO("Pong from mailbox %s to mailbox %s", sg_mailbox_get_name(mailbox_in), sg_mailbox_get_name(mailbox_out));
+
+ /* - Receive the (small) ping first ....*/
+ double* sender_time = (double*)sg_mailbox_get(mailbox_in);
+ double communication_time = simgrid_get_clock() - *sender_time;
+ XBT_INFO("Task received : small communication (latency bound)");
+ XBT_INFO(" Ping time (latency bound) %f", communication_time);
+ xbt_free(sender_time);
+
+ /* - ... Then send a 1GB pong back (bandwidth bound) */
+ double* payload = (double*)xbt_malloc(sizeof(double));
+ *payload = simgrid_get_clock();
+ XBT_INFO("task_bw->data = %.3f", *payload);
+ sg_mailbox_put(mailbox_out, payload, 1e9);
+}
+
+int main(int argc, char* argv[])
+{
+ simgrid_init(&argc, argv);
+ xbt_assert(argc > 2,
+ "Usage: %s platform_file deployment_file\n"
+ "\tExample: %s ../../platforms/small_platform.xml app-pingpong_d.xml\n",
+ argv[0], argv[0]);
+
+ simgrid_load_platform(argv[1]);
+
+ simgrid_register_function("pinger", pinger);
+ simgrid_register_function("ponger", ponger);
+ simgrid_load_deployment(argv[2]);
+
+ simgrid_run();
+
+ XBT_INFO("Total simulation time: %.3f", simgrid_get_clock());
+
+ return 0;
+}