正在加载图片...
MPI COMM WORLD &status); solution count + int num solutions =0 num solutions int chessboard[ queenS] MPI Send(&ready, I f(sed/还有新的初始棋盘* REPLY TAG MPI COMM WORLD 向子进程发送一个合法的新棋 while(! finished) MPI Send(&new task, 1 MPI INT /*从主进程接收消息* child MPI Recv(&request, I REQUEST TAG, MPI INT MPI COMM WORLD) MPI Send(&seed, I REQUEST TAG MPI INT MPI COMM WORLD &status) SEED TAG MPI COMM WORLD) if (request ==NEW_TASK) else/已求出所有解 从主进程接收初始棋盘 /向子进程发送终止信号 MPI INT MPI COMM WORLD MPI COMM WORLD) active slaves-- ∧*在初始棋盘基础上求解 chessboard[0]=seed/ QUEENS 1/* while*/ hessboard[]= seed QUEENS print solutions(solution count, solutions) solution count =0 }/ eight queens master’ void eight queens slave( int my rank) /*将解发送给主进程 MPI Status status. MPI INT int accomplished ACCOMPLISHED; REPLY TAG MPI COMM WORLD)15 MPI_COMM_WORLD, &status); solution_count += num_solutions; } } seed = generate_seed(); if (seed) /* 还有新的初始棋盘 */ { /* 向子进程发送一个合法的新棋 盘 */ MPI_Send(&new_task, 1, MPI_INT, child, REQUEST_TAG, MPI_COMM_WORLD); MPI_Send(&seed, 1, MPI_INT, child, SEED_TAG, MPI_COMM_WORLD); } else /* 已求出所有解 */ { /* 向子进程发送终止信号 */ MPI_Send(&terminate, 1, MPI_INT, child, REQUEST_TAG, MPI_COMM_WORLD); active_slaves--; } } /* while */ print_solutions(solution_count, solutions); } /* eight_queens_master */ void eight_queens_slave(int my_rank) { MPI_Status status; int ready = READY; int accomplished = ACCOMPLISHED; bool finished = false; int request; int seed; int num_solutions = 0; int chessboard[QUEENS]; MPI_Send(&ready, 1, MPI_INT, 0, REPLY_TAG, MPI_COMM_WORLD); while (! finished) { /* 从主进程接收消息 */ MPI_Recv(&request, 1, MPI_INT, 0, REQUEST_TAG, MPI_COMM_WORLD, &status); if (request == NEW_TASK) { /* 从主进程接收初始棋盘 */ MPI_Recv(&seed, 1, MPI_INT, 0, SEED_TAG, MPI_COMM_WORLD, &status); /* 在初始棋盘基础上求解 */ chessboard[0] = seed / QUEENS; chessboard[1] = seed % QUEENS; solution_count = 0; place_queens(chessboard, 2); /* 将解发送给主进程 */ MPI_Send(&accomplished, 1, MPI_INT, 0, REPLY_TAG, MPI_COMM_WORLD);
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有