#include #include #include #include #include #include #include #include "malleabilityZombies.h" #define PIDS_QTY 320 void zombies_suspend(); int offset_pids, *pids = NULL; void gestor_usr2() {} void zombies_collect_suspended(MPI_Comm comm) { int pid = getpid(); int *pids_counts = malloc(mall->numP * sizeof(int)); int *pids_displs = malloc(mall->numP * sizeof(int)); int i, count=1; #if USE_MAL_DEBUG > 2 if(mall->myId == mall->root){ DEBUG_FUNC("Collecting zombies", mall->myId, mall->numP); } fflush(stdout); #endif if(mall->myId < mall->numC) { count = 0; if(mall->myId == mall->root) { for(i=0; i < mall->numC; i++) { pids_counts[i] = 0; } for(i=mall->numC; inumP; i++) { pids_counts[i] = 1; pids_displs[i] = (i - mall->numC) + offset_pids; } offset_pids += mall->numP - mall->numC; } } MPI_Gatherv(&pid, count, MPI_INT, pids, pids_counts, pids_displs, MPI_INT, mall->root, comm); free(pids_counts); free(pids_displs); if(mall->myId >= mall->numC) { zombies_suspend(); } } void zombies_service_init() { offset_pids = 0; pids = malloc(PIDS_QTY * sizeof(int)); for(int i=0; i