next up previous contents index
Next: A Brief History Up: DSDP5 User Guide - Previous: Iteration Monitor   Contents   Index

PDSDP

The DSDP package can also be run in parallel using multiple processors. In the parallel version, the Schur complement matrix is computed and solved in parallel. The parallel Cholesky factorization in PDSDP is performed using PLAPACK[9]. The parallel Cholesky factorization in PLAPACK uses a two-dimensional block cyclic structure to distribute the data. The blocking parameter in PLAPACK determines how many rows and columns are in each block. Larger block sizes can be faster and reduce the overhead of passing messages, but smaller block sizes balance the work among the processors more equitably. PDSDP used a blocking parameter of 32 after experimenting with several choices. Since PLAPACK uses a dense matrix structure, this version is not appropriate when the Schur complement matrix is sparse.

The following steps should be used to run an application in parallel using PDSDP.

  1. Install DSDP. Edit DSDPROOT/make.include to set the appropriate compiler flags.

  2. Install PLAPACK. This package contains parallel linear solvers and is freely available to the public.

  3. Go to the directory DSDPROOT/src/pdsdp/plapack/ and edit Makefile to identify the location of the DSDP and PLAPACK libraries.

  4. Compile the PDSDP file pdsdpplapack.c, which implements the additional operations. Then compile the executable readsdpa.c, which will read an SDPA file.

A PDSDP executable can be used much like serial version of DSDP that reads SDPA files. Given a SDPA file such as truss1.dat-s, the command

mpirun -np 2 dsdp5  truss1.dat-s -log_summary
will solve the problem using two processors. Additional processors may also be used. This implementation is best suited for very large problems.

Use of PDSDP as a subroutine library is also very similar to the use of the serial version of the solver. The application must create the solver and conic object on each processor and provide each processor with a copy of the data matrices, objective vector, and options. At the end of the algorithm, each solver has a copy of the solution. The routines to set the data and retrieve the solution are the same.

The few differences between the serial and parallel version are listed below.

  1. All PDSDP programs must include the header file:
    #include pdsdp5plapack.h
    

  2. Parallel applications should link to the DSDP library, the PLAPACK library, and the compiled source code in dsdpplapack.c. Linking to the BLAS and LAPACK libraries are usually included while linking to PLAPACK.

  3. The application should initialize and finalize MPI.

  4. After creating the DSDP solver object, the application should call
    int PDSDPUsePLAPACKLinearSolver(DSDP dsdp,MPI_Comm comm);
    
    Most applications can set the variable comm to MPI_COMM_WORLD.
  5. The monitor should be set on only one processor. For example:
    MPI_Comm_rank(MPI_COMM_WORLD,&rank);
    if (rank==0){ info = DSDPSetStandardMonitor(dsdp); }
    

An example of the usage is provided in DSDPROOT/pdsdp/plapack/readsdpa.c. Scalability of medium and large-scale problems has been achieved on up to 64 processors. See [1] for more details.

Source code that uses the parallel conjugate gradient method in PETSc to solve the linear systems is also included in the distribution.


next up previous contents index
Next: A Brief History Up: DSDP5 User Guide - Previous: Iteration Monitor   Contents   Index
Steven Benson 2005-02-11