Zoltan Developer's Guide | Next | Previous

## Parallel Computing Routines

Parallel computing utilities are described in this section.

> Zoltan_Print_Sync_Start / Zoltan_Print_Sync_End: provide synchronization of processors for I/O (with example).
> Zoltan_Print_Stats : print statistics about a parallel variable.

void Zoltan_Print_Sync_Start(MPI_Comm communicator, int do_print_line);

The Zoltan_Print_Sync_Start function is adapted from work of John Shadid for the MPSalsa project at Sandia National Laboratories. With Zoltan_Print_Sync_End, it provides synchronization so that one processor in the Zoltan communicator can complete its I/O before the next processor begins its I/O. This synchronization utility is useful for debugging algorithms, as it allows the output from processors to be produced in an organized manner. It is, however, a serializing process, and thus, does not scale well to large number of processors.

Zoltan_Print_Sync_Start should called by each processor in the MPI communicator before the desired I/O is performed. Zoltan_Print_Sync_End is called by each processor after the I/O is performed. No communication can be performed between calls to Zoltan_Print_Sync_Start and Zoltan_Print_Sync_End. See the example below for usage of Zoltan_Print_Sync_Start.

Arguments: |
communicator | The MPI communicator containing all processors to participate in the synchronization.
do_print_line | A flag indicating whether to print a line of "#" characters before and after the synchronization block. If do_print_line is TRUE, a line is printed; no line is printed otherwise.

void Zoltan_Print_Sync_End(MPI_Comm communicator, int do_print_line);

The Zoltan_Print_Sync_End function is adapted from work of John Shadid for the MPSalsa project at Sandia National Laboratories. With Zoltan_Print_Sync_Start, it provides synchronization so that one processor in the Zoltan communicator can complete its I/O before the next processor begins its I/O. This synchronization utility is useful for debugging algorithms, as it allows the output from processors to be produced in an organized manner. It is, however, a serializing process, and thus, does not scale well to large number of processors.

Zoltan_Print_Sync_Start should called by each processor in the MPI communicator before the desired I/O is performed. Zoltan_Print_Sync_End is called by each processor after the I/O is performed. No communication can be performed between calls to Zoltan_Print_Sync_Start and Zoltan_Print_Sync_End. See the example below for usage of Zoltan_Print_Sync_End.

Arguments: |
communicator | The MPI communicator containing all processors to participate in the synchronization.
do_print_line | A flag indicating whether to print a line of "#" characters before and after the synchronization block. If do_print_line is TRUE, a line is printed; no line is printed otherwise.

void Zoltan_Print_Stats(MPI_Comm comm, int debug_proc, double x, char *msg);

Zoltan_Print_Stats is a very simple routine that computes the maximum and sum of the variable x over all processors associated with the MPI communicator comm. It also computes and prints the imbalance of x, that is, the maximum value divided by the average minus one. If x has the same value on all processors, the imbalance is zero.

Arguments: |
comm | The MPI Communicator to be used in maximum and sum operations.
debug_proc | The processor from which output should be printed.
x | The variable of which one wishes to display statistics.
msg | A string that typically describes the meaning of x.

####

Example Using Zoltan_Print_Sync_Start/Zoltan_Print_Sync_End

`...` `if (zz->Debug_Level >= ZOLTAN_DEBUG_ALL) {` `int i;` `Zoltan_Print_Sync_Start(zz->Communicator, TRUE);` `printf("Zoltan: Objects to be exported from Proc %d\n", zz->Proc);` `for (i = 0; i < *num_export_objs; i++) {` `printf(" Obj: ");` `ZOLTAN_PRINT_GID(zz, &((*export_global_ids)[i*zz->Num_GID])); `printf(" Destination: %4d\n",` `(*export_procs)[i]);` `}` `Zoltan_Print_Sync_End(zz->Communicator, TRUE);` `}``
Example usage of Zoltan_Print_Sync_Start and Zoltan_Print_Sync_End to synchronize output among processors. (Taken from Zoltan_LB_Partition in lb/lb_balance.c.)

[Table of Contents | Next: Object List Function | Previous: Parameter Setting Routines | Privacy and Security]