int main(int argc, char *argv[]) { int myrank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); printf("%2d - started\n", myrank); if (myrank == 0) { //Master, i.e. distributor of tasks MPI_Comm_size(MPI_COMM_WORLD, &ITEMS_TO_BE_SENT); int number_of_processes = ITEMS_TO_BE_SENT; ITEMS_TO_BE_SENT--; //number of processes that are supposed to receive a task if(argc == 1) ftw(".", parse, 1); else ftw(argv[1], parse, 1); kill_slaves(); sleep(1); //just to make sure that files are closed properly... merge_files(number_of_processes); fprintf(stderr, "Finished merging\n"); } else { run_slave(myrank); } MPI_Finalize(); return 0; }
/* * Joins slave processes. */ void join_slaves(void) { int i; kill_slaves(); /* Join slaves. */ for (i = 0; i < nclusters; i++) { data_receive(infd[i], &slave[i], sizeof(uint64_t)); mppa_waitpid(pids[i], NULL, 0); } }
int main(int argc, char *argv[]) { int myrank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myrank); printf("%2d - started\n", myrank); if (myrank == 0) { //Master, i.e. distributor of tasks logfile = fopen("logfile.txt", "w"); if (!logfile) {fprintf(stderr, "Can't open logfile, exiting\n"); exit(1);} MPI_Comm_size(MPI_COMM_WORLD, &ITEMS_TO_BE_SEND); ITEMS_TO_BE_SEND--; //number of processes that are supposed to receive a task if(argc == 1) ftw(".", parse, 1); else ftw(argv[1], parse, 1); kill_slaves(); fclose(logfile); } else { run_slave(myrank); } return 0; }