X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dc744bd76b753a66b1b92f11e22d592f4815d399..922f6e237f2ad76ab469014cbaf995b27cac3ea7:/examples/msg/pmm/msg_pmm.c diff --git a/examples/msg/pmm/msg_pmm.c b/examples/msg/pmm/msg_pmm.c index 4f1522ba16..eda3b83e55 100644 --- a/examples/msg/pmm/msg_pmm.c +++ b/examples/msg/pmm/msg_pmm.c @@ -8,15 +8,27 @@ #include "msg/msg.h" #include "xbt/matrix.h" #include "xbt/log.h" + +// #define BENCH_THIS_CODE /* Will only work from within the source tree as we require xbt/xbt_os_time.h, that is not public yet) */ +#ifdef BENCH_THIS_CODE #include "xbt/xbt_os_time.h" +#endif + +/** @addtogroup MSG_examples + * + * - pmm/msg_pmm.c: Parallel Matrix Multiplication is a little + * application. This is something that most MPI developper have + * written during their class, here implemented using MSG instead + * of MPI. + */ XBT_LOG_NEW_DEFAULT_CATEGORY(msg_pmm, "Messages specific for this msg example"); /* This example should always be executed using a deployment of * GRID_SIZE * GRID_SIZE nodes. */ -#define GRID_SIZE 3 /* Modify to adjust the grid's size */ -#define NODE_MATRIX_SIZE 300 /* Ammount of work done by each node*/ +#define GRID_SIZE 3 /* Modify to adjust the grid's size */ +#define NODE_MATRIX_SIZE 300 /* Ammount of work done by each node*/ #define GRID_NUM_NODES GRID_SIZE * GRID_SIZE #define MATRIX_SIZE NODE_MATRIX_SIZE * GRID_SIZE @@ -35,7 +47,7 @@ typedef struct s_node_job{ xbt_matrix_t B; } s_node_job_t, *node_job_t; -/** +/* * Structure for recovering results */ typedef struct s_result { @@ -148,7 +160,7 @@ int node(int argc, char **argv) /* The rest: return the result to node 0 */ }else{ - m_task_t task; + msg_task_t task; XBT_VERB("Multiplication done. Send the sub-result."); @@ -175,7 +187,7 @@ static void broadcast_jobs(node_job_t *jobs) { int node; char node_mbox[MAILBOX_NAME_SIZE]; - m_task_t task; + msg_task_t task; msg_comm_t comms[GRID_NUM_NODES - 1] = {0}; XBT_VERB("Broadcast Jobs"); @@ -190,11 +202,14 @@ static void broadcast_jobs(node_job_t *jobs) static node_job_t wait_job(int selfid) { - m_task_t task = NULL; + msg_task_t task = NULL; char self_mbox[MAILBOX_NAME_SIZE]; node_job_t job; + msg_error_t err; snprintf(self_mbox, MAILBOX_NAME_SIZE - 1, "%d", selfid); - MSG_task_receive(&task, self_mbox); + err = MSG_task_receive(&task, self_mbox); + if (err != MSG_OK) + xbt_die("Error while receiving from %s (%d)", self_mbox, (int)err); job = (node_job_t)MSG_task_get_data(task); MSG_task_destroy(task); XBT_VERB("Got Job (%d,%d)", job->row, job->col); @@ -206,7 +221,7 @@ static void broadcast_matrix(xbt_matrix_t M, int num_nodes, int *nodes) { int node; char node_mbox[MAILBOX_NAME_SIZE]; - m_task_t task; + msg_task_t task; xbt_matrix_t sM; for(node=0; node < num_nodes; node++){ @@ -221,19 +236,22 @@ static void broadcast_matrix(xbt_matrix_t M, int num_nodes, int *nodes) static void get_sub_matrix(xbt_matrix_t *sM, int selfid) { - m_task_t task = NULL; + msg_task_t task = NULL; char node_mbox[MAILBOX_NAME_SIZE]; + msg_error_t err; XBT_VERB("Get sub-matrix"); snprintf(node_mbox, MAILBOX_NAME_SIZE - 1, "%d", selfid); - MSG_task_receive(&task, node_mbox); + err = MSG_task_receive(&task, node_mbox); + if (err != MSG_OK) + xbt_die("Error while receiving from %s (%d)", node_mbox, (int)err); *sM = (xbt_matrix_t)MSG_task_get_data(task); MSG_task_destroy(task); } static void task_cleanup(void *arg){ - m_task_t task = (m_task_t)arg; + msg_task_t task = (msg_task_t)arg; xbt_matrix_t m = (xbt_matrix_t)MSG_task_get_data(task); xbt_matrix_free(m); MSG_task_destroy(task); @@ -244,9 +262,11 @@ static void task_cleanup(void *arg){ */ int main(int argc, char *argv[]) { +#ifdef BENCH_THIS_CODE xbt_os_timer_t timer = xbt_os_timer_new(); +#endif - MSG_global_init(&argc, argv); + MSG_init(&argc, argv); char **options = &argv[1]; const char* platform_file = options[0]; @@ -257,13 +277,15 @@ int main(int argc, char *argv[]) MSG_function_register("node", node); MSG_launch_application(application_file); +#ifdef BENCH_THIS_CODE xbt_os_timer_start(timer); - MSG_error_t res = MSG_main(); +#endif + msg_error_t res = MSG_main(); +#ifdef BENCH_THIS_CODE xbt_os_timer_stop(timer); +#endif XBT_CRITICAL("Simulated time: %g", MSG_get_clock()); - MSG_clean(); - if (res == MSG_OK) return 0; else @@ -316,7 +338,7 @@ static void create_jobs(xbt_matrix_t A, xbt_matrix_t B, node_job_t *jobs) static void receive_results(result_t *results){ int node; msg_comm_t comms[GRID_NUM_NODES-1] = {0}; - m_task_t tasks[GRID_NUM_NODES-1] = {0}; + msg_task_t tasks[GRID_NUM_NODES-1] = {0}; XBT_VERB("Receive Results.");