void initialize_comunicadors (int n_ptasks) { int ii; unsigned jj; /* Init intra-communicator */ INIT_QUEUE (&comunicadors); #if defined(DEBUG_COMMUNICATORS) fprintf (stderr, "DEBUG: Initializing communicators\n"); #endif alies_comunicadors = (CommAliasInfo_t **) malloc (n_ptasks * sizeof (CommAliasInfo_t *)); ASSERT(alies_comunicadors!=NULL, "Not enough memory for intra-communicators alias"); for (ii = 0; ii < n_ptasks; ii++) { ptask_t *ptask_info = GET_PTASK_INFO(ii+1); alies_comunicadors[ii] = (CommAliasInfo_t *) malloc (ptask_info->ntasks * sizeof (CommAliasInfo_t)); ASSERT(alies_comunicadors[ii]!=NULL, "Not enough memory for intra-communicators alias"); } /* Init inter-communicator */ Intercomm_ptask_task = (InterCommInfoAlias_t ***) malloc (n_ptasks * sizeof (InterCommInfoAlias_t **)); ASSERT(Intercomm_ptask_task!=NULL, "Not enough memory for inter-communicators alias"); num_InterCommunicatorAlias = (unsigned **) malloc (n_ptasks * sizeof (unsigned *)); ASSERT(num_InterCommunicatorAlias!=NULL, "Not enough memory for inter-communicators alias"); for (ii = 0; ii < n_ptasks; ii++) { ptask_t *ptask_info = GET_PTASK_INFO(ii+1); Intercomm_ptask_task[ii] = (InterCommInfoAlias_t**) malloc (ptask_info->ntasks * sizeof (InterCommInfoAlias_t *)); ASSERT(Intercomm_ptask_task[ii]!=NULL, "Not enough memory for inter-communicators alias"); memset (Intercomm_ptask_task[ii], 0, ptask_info->ntasks*sizeof(InterCommInfoAlias_t*)); num_InterCommunicatorAlias[ii] = (unsigned*) malloc (ptask_info->ntasks * sizeof(unsigned)); ASSERT(num_InterCommunicatorAlias[ii]!=NULL, "Not enough memory for inter-communicators alias"); memset (num_InterCommunicatorAlias[ii], 0, ptask_info->ntasks*sizeof(unsigned)); } for (ii = 0; ii < n_ptasks; ii++) { ptask_t *ptask_info = GET_PTASK_INFO(ii+1); for (jj = 0; jj < ptask_info->ntasks; jj++) INIT_QUEUE (&(alies_comunicadors[ii][jj])); } }
/****************************************************************************** *** Paraver_WriteHeader ******************************************************************************/ static int Paraver_WriteHeader (FileSet_t *fset, int numtasks, int taskid, unsigned num_appl, unsigned long long Ftime, struct fdz_fitxer prv_fd, struct Pair_NodeCPU *info) { int NumNodes; char Header[1024]; unsigned threads, task, ptask, node; TipusComunicador com; int final; UNREFERENCED_PARAMETER(numtasks); #if !defined(PARALLEL_MERGE) UNREFERENCED_PARAMETER(fset); #endif if (taskid == 0) { char Date[80]; time_t h; time (&h); strftime (Date, 80, "%d/%m/%Y at %H:%M", localtime (&h)); /* Write the Paraver header */ #if SIZEOF_LONG == 8 sprintf (Header, "#Paraver (%s):%lu_ns:", Date, Ftime); #elif SIZEOF_LONG == 4 sprintf (Header, "#Paraver (%s):%llu_ns:", Date, Ftime); #endif PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); NumNodes = 0; while (info[NumNodes].files != NULL) NumNodes++; sprintf (Header, "%d(", NumNodes); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); if (NumNodes > 0) { sprintf (Header, "%d", info[0].CPUs); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); NumNodes = 1; while (info[NumNodes].CPUs > 0) { sprintf (Header,",%d", info[NumNodes].CPUs); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); NumNodes++; } } sprintf (Header, "):%d:", num_appl); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); } /* For every application, write down its resources */ for (ptask = 0; ptask < num_appl; ptask++) { #if defined(PARALLEL_MERGE) unsigned *vthreads_count = Gather_Paraver_VirtualThreads (taskid, ptask, fset); #endif if (taskid == 0) { ptask_t *ptask_info = GET_PTASK_INFO(ptask+1); task_t *last_task_info = GET_TASK_INFO(ptask+1,ptask_info->ntasks); sprintf (Header, "%d(", ptask_info->ntasks); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); for (task = 0; task < ptask_info->ntasks-1; task++) { task_t *task_info = GET_TASK_INFO(ptask+1,task+1); #if defined(PARALLEL_MERGE) threads = vthreads_count[task]; #else threads = task_info->num_virtual_threads; /*nthreads;*/ #endif node = task_info->nodeid; sprintf (Header, "%d:%d,", threads, node); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); } #if defined(PARALLEL_MERGE) threads = vthreads_count[ptask_info->ntasks-1]; #else threads = last_task_info->num_virtual_threads; /* nthreads */ #endif node = last_task_info->nodeid; /* Add the communicators info at the last application / ptask */ if (ptask == num_appl-1) sprintf (Header, "%d:%d),%d", threads, node, numero_comunicadors()); else sprintf (Header, "%d:%d),", threads, node); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); #if defined(PARALLEL_MERGE) free (vthreads_count); #endif } } if (taskid == 0) { sprintf (Header, "\n"); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); /* Write the communicator definition for every application */ for (ptask = 1; ptask <= num_appl; ptask++) { /* Write the communicators created manually by the application */ final = (primer_comunicador (&com) < 0); while (!final) { unsigned u; /* Write this communicator */ sprintf (Header, "c:%d:%lu:%d", ptask, com.id, com.num_tasks); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); for (u = 0; u < com.num_tasks; u++) { sprintf (Header, ":%d", com.tasks[u] + 1); PRVWRITECNTL (FDZ_WRITE (prv_fd, Header)); } PRVWRITECNTL (FDZ_WRITE (prv_fd, "\n")); /* Get the next communicator */ final = (seguent_comunicador (&com) < 0); }