- xbt_host_t grid[SLAVE_COUNT]; /* The slaves */
- gras_socket_t socket[SLAVE_COUNT]; /* sockets for brodcast to slaves */
-
- /* Initialize Matrixs */
-
- A.lines=A.rows=DATA_MATRIX_SIZE;
- B.lines=B.rows=DATA_MATRIX_SIZE;
- C.lines=C.rows=DATA_MATRIX_SIZE;
-
- A.data=xbt_malloc0(sizeof(double)*DATA_MATRIX_SIZE*DATA_MATRIX_SIZE);
- B.data=xbt_malloc0(sizeof(double)*DATA_MATRIX_SIZE*DATA_MATRIX_SIZE);
- C.data=xbt_malloc0(sizeof(double)*DATA_MATRIX_SIZE*DATA_MATRIX_SIZE);
-
- initmatrix(&A);
- initmatrix(&B);
-
- /* Get arguments and create sockets */
- port=atoi(argv[1]);
- //scatter();
- //scatter_parl();
- //multiplication();
- //gather();
- //display(A);
- /************************* Init Data Send *********************************/
- int step_ack;
- gras_os_sleep(5);
-
- for( i=1;i< argc;i++){
- grid[i-1]=xbt_host_from_string(argv[i]);
- socket[i-1]=gras_socket_client(grid[i-1]->name,grid[i-1]->port);
-
- INFO2("Connected to %s:%d.",grid[i-1]->name,grid[i-1]->port);
+ /* Initialize data matrices */
+ A = xbt_matrix_double_new_id(DATA_MATRIX_SIZE, DATA_MATRIX_SIZE);
+ B = xbt_matrix_double_new_seq(DATA_MATRIX_SIZE, DATA_MATRIX_SIZE);
+ C = xbt_matrix_double_new_zeros(DATA_MATRIX_SIZE, DATA_MATRIX_SIZE);
+
+ /* Create the connexions */
+ xbt_assert0(argc > 1, "Usage: master <port>");
+ gras_socket_server(atoi(argv[1]));
+ peers = amok_pm_group_new("pmm");
+
+ /* friends, we're ready. Come and play */
+ INFO0("Wait for peers for 2 sec");
+ gras_msg_handleall(2);
+ while (xbt_dynar_length(peers) < 9) {
+ INFO1("Got only %ld pals. Wait 2 more seconds",
+ xbt_dynar_length(peers));
+ gras_msg_handleall(2);
+ }
+ INFO1("Good. Got %ld pals", xbt_dynar_length(peers));
+
+ for (i = 0; i < xbt_dynar_length(peers) && i < SLAVE_COUNT; i++) {
+ xbt_dynar_get_cpy(peers, i, &grid[i]);
+ socket[i] = gras_socket_client(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",
+ i, SLAVE_COUNT);
+
+ /* Kill surnumerous slaves */
+ for (i = SLAVE_COUNT; i < xbt_dynar_length(peers);) {
+ xbt_peer_t h;
+
+ xbt_dynar_remove_at(peers, i, &h);
+ INFO2("Too much slaves. Killing %s:%d", h->name, h->port);
+ amok_pm_kill_hp(h->name, h->port);
+ free(h);