- // end assignment
-
- /******************************* multiplication ********************************/
- /* wait for results */
- for( i=0;i< SLAVE_COUNT;i++){
- gras_msg_wait(6000,gras_msgtype_by_name("result"),&from,&result);
- xbt_matrix_copy_values(C,result.C, submatrix_size,submatrix_size,
- submatrix_size*result.linepos,
- submatrix_size*result.rowpos,
- 0,0,NULL);
+
+ /* synchronize slaves */
+ for (i = 0; i < PROC_MATRIX_SIZE; i++) {
+ int j;
+ for (j = 0; j < SLAVE_COUNT; j++)
+ gras_msg_wait(600, "pmm_sync", NULL, NULL);
+ for (j = 0; j < SLAVE_COUNT; j++)
+ gras_msg_send(socket[j], "pmm_sync", NULL);
+ }
+
+ /* Retrieve the results */
+ for (i = 0; i < SLAVE_COUNT; i++) {
+ gras_msg_wait(6000, "result", &from, &result);
+ XBT_VERB("%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,
+ submatrix_size * result.rowpos, 0, 0, NULL);