X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/73a5704e54a0b421ab9e4a5dbba01218e099d661..4feef0a31a4bfb0b073402109bfbb016cb9bc60d:/examples/gras/pmm/pmm.c diff --git a/examples/gras/pmm/pmm.c b/examples/gras/pmm/pmm.c index 7d20b7c8d2..408b70da47 100755 --- a/examples/gras/pmm/pmm.c +++ b/examples/gras/pmm/pmm.c @@ -1,9 +1,7 @@ /* $Id$ */ /* pmm - parallel matrix multiplication "double diffusion" */ -/* Copyright (c) 2006 Ahmed Harbaoui. */ -/* Copyright (c) 2006 Martin Quinson. */ -/* All rights reserved. */ +/* Copyright (c) 2006-2008 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. */ @@ -115,9 +113,7 @@ int master (int argc,char *argv[]) { i++) { xbt_dynar_get_cpy(peers,i,&grid[i]); - INFO2("Connecting to %s:%d.",grid[i]->name,grid[i]->port); socket[i]=gras_socket_client(grid[i]->name,grid[i]->port); - INFO2("Connected to %s:%d.",grid[i]->name,grid[i]->port); } xbt_assert2(i==SLAVE_COUNT, "Not enough slaves for this setting (got %d of %d). Change the deployment file", @@ -172,7 +168,7 @@ int master (int argc,char *argv[]) { line++; } - gras_msg_send(socket[i],gras_msgtype_by_name("pmm_slave"),&assignment); + gras_msg_send(socket[i],"pmm_slave",&assignment); xbt_matrix_free(assignment.A); xbt_matrix_free(assignment.B); } @@ -181,7 +177,7 @@ int master (int argc,char *argv[]) { /* Retrieve the results */ for( i=0;i< SLAVE_COUNT;i++){ - gras_msg_wait(6000,gras_msgtype_by_name("result"),&from,&result); + gras_msg_wait(6000,"result",&from,&result); VERB2("%d slaves are done already. Waiting for %d",i+1, SLAVE_COUNT); xbt_matrix_copy_values(C,result.C, submatrix_size,submatrix_size, submatrix_size*result.linepos, @@ -269,15 +265,12 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { /* a line brodcast */ if(myline==step){ - INFO3("LINE: step(%d) = Myline(%d). Broadcast my data (myport=%d).", - step,myline,gras_os_myport()); + INFO2("LINE: step(%d) = Myline(%d). Broadcast my data.", + step,myline); for (l=0;l < PROC_MATRIX_SIZE-1 ;l++) { - INFO2("LINE: Send to %s:%d", - gras_socket_peer_name(socket_row[l]), - gras_socket_peer_port(socket_row[l])); - gras_msg_send(socket_row[l], - gras_msgtype_by_name("dataB"), - &mydataB); + INFO1("LINE: Send to %s", + gras_socket_peer_name(socket_row[l])); + gras_msg_send(socket_row[l], "dataB", &mydataB); } @@ -288,22 +281,21 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { } else { TRY { xbt_matrix_free(bB); - gras_msg_wait(600,gras_msgtype_by_name("dataB"),&from,&bB); + gras_msg_wait(600,"dataB",&from,&bB); } CATCH(e) { RETHROW0("Can't get a data message from line : %s"); } - INFO4("LINE: step(%d) <> Myline(%d). Receive data from %s:%d",step,myline, - gras_socket_peer_name(from), gras_socket_peer_port(from)); + INFO3("LINE: step(%d) <> Myline(%d). Receive data from %s",step,myline, + gras_socket_peer_name(from)); } /* a row brodcast */ if (myrow==step) { - INFO2("ROW: step(%d)=myrow(%d). Broadcast my data",step,myrow); + INFO2("ROW: step(%d)=myrow(%d). Broadcast my data.",step,myrow); for (l=1;l < PROC_MATRIX_SIZE ; l++) { - INFO2("ROW: Send to %s:%d", - gras_socket_peer_name(socket_line[l-1]), - gras_socket_peer_port(socket_line[l-1])); - gras_msg_send(socket_line[l-1],gras_msgtype_by_name("dataA"), &mydataA); + INFO1("ROW: Send to %s", + gras_socket_peer_name(socket_line[l-1])); + gras_msg_send(socket_line[l-1],"dataA", &mydataA); } xbt_matrix_free(bA); bA = xbt_matrix_new_sub(mydataA, @@ -312,7 +304,7 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { } else { TRY { xbt_matrix_free(bA); - gras_msg_wait(1200,gras_msgtype_by_name("dataA"), &from,&bA); + gras_msg_wait(1200,"dataA", &from,&bA); } CATCH(e) { RETHROW0("Can't get a data message from row : %s"); } @@ -329,7 +321,7 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { result.rowpos=myrow; TRY { - gras_msg_send(master, gras_msgtype_by_name("result"),&result); + gras_msg_send(master, "result",&result); } CATCH(e) { RETHROW0("Failed to send answer to server: %s"); } @@ -343,9 +335,9 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { xbt_matrix_free(mydataA); xbt_matrix_free(mydataB); + /* FIXME: some are said to be unknown gras_socket_close(master); gras_socket_close(from); - /* FIXME: some are said to be unknown for (l=0; l < PROC_MATRIX_SIZE-1; l++) { if (socket_line[l]) gras_socket_close(socket_line[l]); @@ -353,29 +345,47 @@ static int pmm_worker_cb(gras_msg_cb_ctx_t ctx, void *payload) { gras_socket_close(socket_row[l]); }*/ - return 1; + return 0; } int slave(int argc,char *argv[]) { gras_socket_t mysock; - gras_socket_t master; + gras_socket_t master = NULL; + int connected = 0; + int rank; /* Init the GRAS's infrastructure */ gras_init(&argc, argv); amok_pm_init(); + if (argc != 3 && argc !=2) + xbt_die("Usage: slave masterhost:masterport [rank]"); + if (argc == 2) + rank = -1; + else + rank = atoi(argv[2]); /* Register the known messages and my callback */ register_messages(); - gras_cb_register(gras_msgtype_by_name("pmm_slave"),pmm_worker_cb); + gras_cb_register("pmm_slave",pmm_worker_cb); /* Create the connexions */ mysock = gras_socket_server_range(3000,9999,0,0); - gras_os_sleep(1); /* let the master get ready */ - INFO1("Sensor starting (on port %d)",gras_os_myport()); - master = gras_socket_client_from_string(argv[1]); + INFO1("Sensor %d starting",rank); + while (!connected) { + xbt_ex_t e; + TRY { + master = gras_socket_client_from_string(argv[1]); + connected = 1; + } CATCH(e) { + if (e.category != system_error) + RETHROW; + xbt_ex_free(e); + gras_os_sleep(0.5); + } + } /* Join and run the group */ - amok_pm_group_join(master,"pmm"); + amok_pm_group_join(master,"pmm",rank); amok_pm_mainloop(600); /* housekeeping */