int main(int argc, char* argv[]) { parseArgs(argc, argv); b.setVerbose(verbose); MyDomain d(lport); if (host) d.addConnection(host, rport); l.install(&d); if (start) { if (file) { char tmp[500]; int len = 0, c; while( len<499 && (c=fgetc(file)) != EOF) tmp[len++] = (char) c; tmp[len++]=0; if (!b.setState(tmp)) { printf("%s: WARNING - Can not parse given position; using start position\n", argv[0]); b.begin(Board::color1); } } else b.begin(Board::color1); if (secsToPlay >= 0) { b.setMSecsToPlay(Board::color1, 1000 * secsToPlay); b.setMSecsToPlay(Board::color2, 1000 * secsToPlay); } d.sendBoard(); } return l.run(); }
int main(int argc, char* argv[]) { parseArgs(argc, argv); int NumTask, rank; MPI_Init( &argc, &argv ); MPI_Comm_size( MPI_COMM_WORLD, &NumTask); MPI_Comm_rank( MPI_COMM_WORLD, &rank); SearchStrategy* ss = SearchStrategy::create(strategyNo); if (verbose) printf("Using strategy '%s' ...\n", ss->name()); ss->setMaxDepth(maxDepth); b.setSearchStrategy( ss ); ss->setEvaluator(&ev); if( verbose ) printf("\nIn main, rank = %d\n", rank); ss->registerCallbacks(new SearchCallbacks(verbose, NumTask, rank)); // Only rank 0 opens port & communicates if( rank == 0 ) { printf("\nStarting, rank = %d\n", rank); MyDomain d(lport); l.install(&d); if (host) d.addConnection(host, rport); //l.install(&d); l.run(); } else // others wait for signal from Master - rank 0 { printf("\nRank %d executing wait\n", rank); ss->setBoard( &b ); ss->wait(); } MPI_Finalize(); printf("\n Rank %d exiting from Main \n", rank ); }
int main(int argc, char* argv[]) { parseArgs(argc, argv); SearchStrategy* ss = SearchStrategy::create(strategyNo); if (verbose) printf("Using strategy '%s' ...\n", ss->name()); ss->setMaxDepth(maxDepth); b.setSearchStrategy( ss ); ss->setEvaluator(&ev); ss->registerCallbacks(new SearchCallbacks(verbose)); MyDomain d(lport); if (host) d.addConnection(host, rport); // const char * host = gethostbyname("localhost"); // d.addConnection("localhost", rport); l.install(&d); l.run(); }
int main(int argc, char* argv[]) { MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &num_threads); MPI_Comm_rank(MPI_COMM_WORLD, &thread_rank); parseArgs(argc, argv); #if 0 if(thread_rank < 4) myColor = Board::color1; else { myColor = Board::color2; thread_rank = thread_rank - 4; } #endif SearchStrategy* ss = SearchStrategy::create(strategyNo); if (verbose) printf("Using strategy '%s' ...\n", ss->name()); ss->setMaxDepth(maxDepth); b.setSearchStrategy( ss ); ss->setEvaluator(&ev); ss->registerCallbacks(new SearchCallbacks(verbose)); if(thread_rank == 0) { MyDomain d(lport); if (host) d.addConnection(host, rport); l.install(&d); l.run(); } else { while (1) { MPI_Status mpi_st; Slave_Input slave_input; Slave_Output slave_output; MPI_Recv (&slave_input, sizeof(Slave_Input), MPI_BYTE, 0, 10, MPI_COMM_WORLD, &mpi_st); // depth= -1 is a signal for the slave to quit if (slave_input.depth == -1) break; ss->_board = &b; ss->_board->setState(slave_input.boardstate); ss->_board->playMove(slave_input.move); ((ABIDStrategy*)ss)->_currentMaxDepth = slave_input.currentMaxDepth; ss->_sc->_leavesVisited = 0; ss->_sc->_nodesVisited = 0; /* check for a win position first */ if (!ss->_board->isValid()) { slave_output.eval = (14999-(slave_input.depth-1)); } else { if ((slave_input.depth == slave_input.currentMaxDepth) && (slave_input.move.type > Move::maxPushType )) slave_output.eval = ss->evaluate(); else slave_output.eval = -((ABIDStrategy*)ss)->alphabeta(slave_input.depth, slave_input.alpha, slave_input.beta); } ((ABIDStrategy*)ss)->_pv.update(slave_input.depth-1, slave_input.move); slave_output.pv = ((ABIDStrategy*)ss)->_pv; slave_output.num_leaves = ss->_sc->_leavesVisited; slave_output.num_nodes = ss->_sc->_nodesVisited; MPI_Send(&slave_output, sizeof(Slave_Output), MPI_BYTE, 0, 10, MPI_COMM_WORLD); } } MPI_Finalize(); }