X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b9486fe3a4234dbd140b0a794c84fb2fd425ec3c..693f30b46244c152cd79cdf3ad35d4a79b866c9c:/examples/msg/pmm/msg_pmm.c diff --git a/examples/msg/pmm/msg_pmm.c b/examples/msg/pmm/msg_pmm.c index 26a0b9c4cb..6ff6d1ac7a 100644 --- a/examples/msg/pmm/msg_pmm.c +++ b/examples/msg/pmm/msg_pmm.c @@ -8,19 +8,31 @@ #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 MATRIX_SIZE multiple of - * GRID_SIZE and with GRID_SIZE^2 nodes. */ -#define MATRIX_SIZE 900 -#define GRID_SIZE 3 +/* 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 MAILBOX_NAME_SIZE 10 #define GRID_NUM_NODES GRID_SIZE * GRID_SIZE -#define NODE_MATRIX_SIZE MATRIX_SIZE / GRID_SIZE +#define MATRIX_SIZE NODE_MATRIX_SIZE * GRID_SIZE +#define MAILBOX_NAME_SIZE 10 #define NEIGHBOURS_COUNT GRID_SIZE - 1 /* @@ -58,10 +70,10 @@ int node(int argc, char **argv) int k, myid; char my_mbox[MAILBOX_NAME_SIZE]; node_job_t myjob, jobs[GRID_NUM_NODES]; - xbt_matrix_t A, B, C, sA, sB, sC; + xbt_matrix_t A, B, C = NULL, sA, sB, sC; result_t result; - xbt_assert0(argc != 1, "Wrong number of arguments for this node"); + xbt_assert(argc != 1, "Wrong number of arguments for this node"); /* Initialize the node's data-structures */ myid = atoi(argv[1]); @@ -158,7 +170,7 @@ int node(int argc, char **argv) result->sC = xbt_matrix_new_sub(sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, 0, 0, NULL); task = MSG_task_create("result",100,100,result); - MSG_task_dsend(task, "0", NULL); + MSG_task_dsend(task, "0", (void_f_pvoid_t) MSG_task_destroy); } /* Clean up and finish*/ @@ -244,23 +256,28 @@ 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]; const char* application_file = options[1]; - MSG_set_channel_number(0); MSG_create_environment(platform_file); MSG_function_register("node", node); MSG_launch_application(application_file); +#ifdef BENCH_THIS_CODE xbt_os_timer_start(timer); +#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();