IBM Parallel ESSL subroutines cover the following computational areas: IBM Parallel ESSL uses calls of the IBM ESSL subroutines for computational purposes. For communication, Basic Linear Algebra Communications Subprograms (BLACS) is  included, which is based on MPI. During the development process of your program, the BLACS subroutines must be used. To  include IBM Parallel ESSL calls into the code of the program, complete the following steps: Example 7-7 shows a sample Fortran dgemm implementation that uses the IBM Parallel  ESSL version of the PDGEMM subroutine for a 20000 by 20000 matrix size. PDGEMM works  by using the following formula:  A lpha  and  beta  are real scalar values , and A ,  B , and  C  are matrixes of conforming shape. The algorithm is shown in Example 7-7. 180  IBM High-Performance Computing Insights with IBM Power System AC922 Clustered Solution  Example 7-7 IBM Parallel ESSL Fortran example source code pdgemm_sample program pdgemm_sample implicit none real*8, allocatable, dimension(:) :: a,b,c integer, dimension(9) :: desca,descb,descc integer m,n,k integer np,nr,nc,mr,mc,icontxt,numroc,iam,nnodes integer acol, bcol, ccol real*8, parameter :: alpha = 2.d0 real*8, parameter :: beta = 3.d0 integer, parameter :: ia = 1, ib = 1, ic = 1 integer, parameter :: ja = 1, jb = 1, jc = 1 integer, parameter :: nb = 200 ! Bigger size for CUDA runs !  integer, parameter :: nb = 3000 7.4.1 Program development 1. Start the process grid by using the BLACS subroutines ( BLACS_GET  call and  BLACS_GRIDINIT or  BLACS_GRIDMAP  after it). 2. Distribute data across the process grid. Try to use different block sizes to improve the  performance of the program. For example, some IBM Parallel ESSL subroutines use a  GPU for large sizes of blocks (about 2000 by 2000). 3. Call the IBM Parallel ESSL subroutine on all processes of the BLACS process grid. 4. Aggregate the results of IBM Parallel ESSL runs from all processes. 5. Call the BLACS subroutines to clean the process grid and exit, such as  BLACS_GRIDEXIT  or  BLACS_EXIT . GLYPH<SM590000> Level 2 Parallel Basic Linear Algebra Subprograms (PBLAS) GLYPH<SM590000> Level 3 PBLAS GLYPH<SM590000> Linear algebraic equations GLYPH<SM590000> Eigensystem analysis and singular value analysis GLYPH<SM590000> Fourier transforms GLYPH<SM590000> Random number generation C =  [A] x [B] +  [C}