+ step=PROC_MATRIX_SIZE+1; // just intilization for loop
+
+ TRY {
+ gras_msg_wait(200,gras_msgtype_by_name("step"),&from,&step);
+ } CATCH(e) {
+ RETHROW0("I Can't get a Next Step message from master : %s");
+ }
+ INFO1("Recive a step message from master: step = %d ",step);
+
+ if (step < PROC_MATRIX_SIZE ){
+ /* a row brodcast */
+ gras_os_sleep(3); // IL FAUT EXPRIMER LE TEMPS D'ATTENTE EN FONCTION DE "SLAVE_COUNT"
+ if(myrow==step){
+ INFO2("step(%d) = Myrow(%d)",step,myrow);
+ for (l=1;l < PROC_MATRIX_SIZE ;l++){
+ gras_msg_send(socket_column[l-1], gras_msgtype_by_name("dataB"), &mydataB);
+ bB=mydataB;
+ INFO1("send my data B (%.3g) to my (vertical) neighbors",bB);
+ }
+ }
+ if(myrow != step){
+ INFO2("step(%d) <> Myrow(%d)",step,myrow);
+ TRY {
+ gras_msg_wait(600,gras_msgtype_by_name("dataB"),
+ &from,&bB);
+ } CATCH(e) {
+ RETHROW0("I Can't get a data message from row : %s");
+ }
+ INFO2("Recive data B (%.3g) from my neighbor: %s",bB,gras_socket_peer_name(from));
+ }
+ /* a column brodcast */
+ if(mycol==step){
+ for (l=1;l < PROC_MATRIX_SIZE ;l++){
+ gras_msg_send(socket_row[l-1],gras_msgtype_by_name("dataA"), &mydataA);
+ bA=mydataA;
+ INFO1("send my data A (%.3g) to my (horizontal) neighbors",bA);
+ }
+ }
+
+ if(mycol != step){
+ TRY {
+ gras_msg_wait(1200,gras_msgtype_by_name("dataA"),
+ &from,&bA);
+ } CATCH(e) {
+ RETHROW0("I Can't get a data message from column : %s");
+ }
+ INFO2("Recive data A (%.3g) from my neighbor : %s ",bA,gras_socket_peer_name(from));
+ }
+ bC+=bA*bB;
+ INFO1(">>>>>>>> My BC = %.3g",bC);