void MyDomain::received(char* str) { static double Tottime=0; static long TotNoEval=0; //printf("\n %s", str); if (strncmp(str, "quit", 4)==0) { l.exit(); return; } if (strncmp(str, "pos ", 4)!=0) return; b.setState(str+4); if (verbose) { printf("\n\n==========================================\n"); printf(str+4); } int state = b.validState(); if ((state != Board::valid1) && (state != Board::valid2)) { printf("%s\n", Board::stateDescription(state)); switch(state) { case Board::timeout1: case Board::timeout2: case Board::win1: case Board::win2: printf("\nTotal run time for player "); printf("%s ", (myColor == Board::color1) ? "O":"X"); printf(" = %lf\n", (Tottime/1000)); printf("Absolute evaluations = %ld\n ", TotNoEval); printf("Evaluations per sec = %lf \n", (TotNoEval*1000/Tottime)); l.exit(); default: break; } return; } if (b.actColor() & myColor) { struct timeval t1, t2; gettimeofday(&t1,0); Move m = b.bestMove(); gettimeofday(&t2,0); int msecsPassed = (1000* t2.tv_sec + t2.tv_usec / 1000) - (1000* t1.tv_sec + t1.tv_usec / 1000); printf("%s ", (myColor == Board::color1) ? "O":"X"); if (m.type == Move::none) { printf(" can not draw any move ?! Sorry.\n"); return; } printf("draws '%s' (after %d.%03d secs)...\n", m.name(), msecsPassed/1000, msecsPassed%1000); Tottime += msecsPassed; b.playMove(m, msecsPassed); sendBoard(); if (changeEval) ev.changeEvaluation(); // Sum up evaluations TotNoEval += ev.getNoEval(); /* stop player at win position */ int state = b.validState(); if ((state != Board::valid1) && (state != Board::valid2)) { printf("%s\n", Board::stateDescription(state)); switch(state) { case Board::timeout1: case Board::timeout2: case Board::win1: case Board::win2: printf("\nTotal run time for player "); printf("%s ", (myColor == Board::color1) ? "O":"X"); printf(" = %lf\n", (Tottime/1000)); printf("Absolute evaluations = %ld\n ", TotNoEval); printf("Evaluations per sec = %lf \n", (TotNoEval*1000/Tottime)); l.exit(); default: break; } } maxMoves--; if (maxMoves == 0) { //printf("\n %s", str); printf("Terminating because given number of moves drawn.\n"); broadcast("quit\n"); l.exit(); } } }
void MyDomain::received(char* str) { static double Tottime=0; long TotNoEval=0; if (strncmp(str, "quit", 4)==0) { l.exit(); return; } if (strncmp(str, "pos ", 4)!=0) return; b.setState(str+4); if (verbose) { printf("\n\n==========================================\n"); printf(str+4); } int state = b.validState(); int len; int NumTask, i; MPI_Status stat; MPI_Comm_size( MPI_COMM_WORLD, &NumTask); // Sum up evaluations TotNoEval = ev.getNoEval(); if ((state != Board::valid1) && (state != Board::valid2)) { printf("%s\n", Board::stateDescription(state)); switch(state) { case Board::timeout1: case Board::timeout2: case Board::win1: case Board::win2: char boardLayout[500]; // Send Exit Signal to slave through EXIT board len = sprintf(boardLayout, "exit%s\n",b.getState()); for( i = 1; i< NumTask; i++) { MPI_Send( boardLayout, 500, MPI_CHAR, i, 10, MPI_COMM_WORLD ); long NoEval; MPI_Recv(&NoEval, 1, MPI_LONG, i, 10, MPI_COMM_WORLD, &stat); printf("\n Evaluations for Rank: %d Evals: %ld", i, NoEval); TotNoEval += NoEval; } printf("\nTotal run time for player "); printf("%s ", (myColor == Board::color1) ? "O":"X"); printf(" = %lf\n", (Tottime/1000)); printf("Evaluations per sec = %lf \n", (TotNoEval*1000/Tottime)); printf("Total Evaluations= %ld\n", TotNoEval); l.exit(); default: break; } return; } if (b.actColor() & myColor) { struct timeval t1, t2; gettimeofday(&t1,0); Move m = b.bestMove(); gettimeofday(&t2,0); int msecsPassed = (1000* t2.tv_sec + t2.tv_usec / 1000) - (1000* t1.tv_sec + t1.tv_usec / 1000); printf("%s ", (myColor == Board::color1) ? "O":"X"); if (m.type == Move::none) { printf(" can not draw any move ?! Sorry.\n"); return; } printf("draws '%s' (after %d.%03d secs)...\n", m.name(), msecsPassed/1000, msecsPassed%1000); Tottime += msecsPassed; printf("\nMoving board for Move:%s \n ", m.name()); b.playMove(m, msecsPassed); sendBoard(); if (changeEval) ev.changeEvaluation(); // Sum up evaluations TotNoEval = ev.getNoEval(); /* stop player at win position */ int state = b.validState(); if ((state != Board::valid1) && (state != Board::valid2)) { printf("%s\n", Board::stateDescription(state)); switch(state) { case Board::timeout1: case Board::timeout2: case Board::win1: case Board::win2: char boardLayout[500]; // Send Exit Signal to slave through EXIT board len = sprintf(boardLayout, "exit%s\n",b.getState()); for( i = 1; i< NumTask; i++) { MPI_Send( boardLayout, 500, MPI_CHAR, i, 10, MPI_COMM_WORLD ); long NoEval; MPI_Recv(&NoEval, 1, MPI_LONG, i, 10, MPI_COMM_WORLD, &stat); printf("\n Evaluations for Rank: %d Evals: %ld", i, NoEval); TotNoEval += NoEval; } printf("\nTotal run time for player "); printf("%s ", (myColor == Board::color1) ? "O":"X"); printf(" = %lf\n", (Tottime/1000)); printf("Evaluations per sec = %lf \n", (TotNoEval*1000/Tottime)); printf("Total Evaluations= %ld\n", TotNoEval); l.exit(); default: break; } } maxMoves--; if (maxMoves == 0) { char boardLayout[500]; // Send Exit Signal to slave through EXIT board len = sprintf(boardLayout, "exit%s\n",b.getState()); for( i = 1; i< NumTask; i++) { MPI_Send( boardLayout, 500, MPI_CHAR, i, 10, MPI_COMM_WORLD ); long NoEval; MPI_Recv(&NoEval, 1, MPI_LONG, i, 10, MPI_COMM_WORLD, &stat); printf("\n Evaluations for Rank: %d Evals: %ld", i, NoEval); TotNoEval += NoEval; } //printf("\n %s", str); printf("Terminating because given number of moves drawn.\n"); broadcast("quit\n"); l.exit(); } } }