/* * -- High Performance Computing Linpack Benchmark (HPL) * HPL - 2.0 - September 10, 2008 * Antoine P. Petitet * University of Tennessee, Knoxville * Innovative Computing Laboratory * (C) Copyright 2000-2008 All Rights Reserved * * -- Copyright notice and Licensing terms: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions, and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgement: * This product includes software developed at the University of * Tennessee, Knoxville, Innovative Computing Laboratory. * * 4. The name of the University, the name of the Laboratory, or the * names of its contributors may not be used to endorse or promote * products derived from this software without specific written * permission. * * -- Disclaimer: * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef HPL_PANEL_H #define HPL_PANEL_H /* * --------------------------------------------------------------------- * Include files * --------------------------------------------------------------------- */ #include "hpl_pmisc.h" #include "hpl_grid.h" /* * --------------------------------------------------------------------- * Data Structures * --------------------------------------------------------------------- */ typedef struct HPL_S_panel { struct HPL_S_grid * grid; /* ptr to the process grid */ struct HPL_S_palg * algo; /* ptr to the algo parameters */ struct HPL_S_pmat * pmat; /* ptr to the local array info */ double * A; /* ptr to trailing part of A */ double * WORK; /* work space */ double * L2; /* ptr to L */ double * L1; /* ptr to jb x jb upper block of A */ double * DPIV; /* ptr to replicated jb pivot array */ double * DINFO; /* ptr to replicated scalar info */ double * U; /* ptr to U */ int * IWORK; /* integer workspace for swapping */ void * * * buffers[2]; /* buffers for panel bcast */ int counts [2]; /* counts for panel bcast */ MPI_Datatype dtypes [2]; /* data types for panel bcast */ MPI_Request request[1]; /* requests for panel bcast */ MPI_Status status [1]; /* status for panel bcast */ int nb; /* distribution blocking factor */ int jb; /* panel width */ int m; /* global # of rows of trailing part of A */ int n; /* global # of cols of trailing part of A */ int ia; /* global row index of trailing part of A */ int ja; /* global col index of trailing part of A */ int mp; /* local # of rows of trailing part of A */ int nq; /* local # of cols of trailing part of A */ int ii; /* local row index of trailing part of A */ int jj; /* local col index of trailing part of A */ int lda; /* local leading dim of array A */ int prow; /* proc. row owning 1st row of trail. A */ int pcol; /* proc. col owning 1st col of trail. A */ int msgid; /* message id for panel bcast */ int ldl2; /* local leading dim of array L2 */ int len; /* length of the buffer to broadcast */ #ifdef HPL_CALL_VSIPL vsip_block_d * Ablock; /* A block */ vsip_block_d * L1block; /* L1 block */ vsip_block_d * L2block; /* L2 block */ vsip_block_d * Ublock; /* U block */ #endif } HPL_T_panel; /* * --------------------------------------------------------------------- * panel function prototypes * --------------------------------------------------------------------- */ #include "hpl_pgesv.h" void HPL_pdpanel_new STDC_ARGS( ( HPL_T_grid *, HPL_T_palg *, const int, const int, const int, HPL_T_pmat *, const int, const int, const int, HPL_T_panel * * ) ); void HPL_pdpanel_init STDC_ARGS( ( HPL_T_grid *, HPL_T_palg *, const int, const int, const int, HPL_T_pmat *, const int, const int, const int, HPL_T_panel * ) ); int HPL_pdpanel_disp STDC_ARGS( ( HPL_T_panel * * ) ); int HPL_pdpanel_free STDC_ARGS( ( HPL_T_panel * ) ); #endif /* * End of hpl_panel.h */