コード例 #1
0
ファイル: player.cpp プロジェクト: Aryabhatta/SuperMuc
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();
}
コード例 #2
0
ファイル: player.cpp プロジェクト: Aryabhatta/SuperMuc
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 );
}
コード例 #3
0
ファイル: player.cpp プロジェクト: gkernel/supercomputer_lab
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();

}