Statistiques
| Révision :

root / include / hpl_pgesv.h

Historique | Voir | Annoter | Télécharger (9,96 ko)

1
/* 
2
 * -- High Performance Computing Linpack Benchmark (HPL)                
3
 *    HPL - 2.0 - September 10, 2008                          
4
 *    Antoine P. Petitet                                                
5
 *    University of Tennessee, Knoxville                                
6
 *    Innovative Computing Laboratory                                 
7
 *    (C) Copyright 2000-2008 All Rights Reserved                       
8
 *                                                                      
9
 * -- Copyright notice and Licensing terms:                             
10
 *                                                                      
11
 * Redistribution  and  use in  source and binary forms, with or without
12
 * modification, are  permitted provided  that the following  conditions
13
 * are met:                                                             
14
 *                                                                      
15
 * 1. Redistributions  of  source  code  must retain the above copyright
16
 * notice, this list of conditions and the following disclaimer.        
17
 *                                                                      
18
 * 2. Redistributions in binary form must reproduce  the above copyright
19
 * notice, this list of conditions,  and the following disclaimer in the
20
 * documentation and/or other materials provided with the distribution. 
21
 *                                                                      
22
 * 3. All  advertising  materials  mentioning  features  or  use of this
23
 * software must display the following acknowledgement:                 
24
 * This  product  includes  software  developed  at  the  University  of
25
 * Tennessee, Knoxville, Innovative Computing Laboratory.             
26
 *                                                                      
27
 * 4. The name of the  University,  the name of the  Laboratory,  or the
28
 * names  of  its  contributors  may  not  be used to endorse or promote
29
 * products  derived   from   this  software  without  specific  written
30
 * permission.                                                          
31
 *                                                                      
32
 * -- Disclaimer:                                                       
33
 *                                                                      
34
 * THIS  SOFTWARE  IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
35
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT
36
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
37
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY
38
 * OR  CONTRIBUTORS  BE  LIABLE FOR ANY  DIRECT,  INDIRECT,  INCIDENTAL,
39
 * SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL DAMAGES  (INCLUDING,  BUT NOT
40
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
41
 * DATA OR PROFITS; OR BUSINESS INTERRUPTION)  HOWEVER CAUSED AND ON ANY
42
 * THEORY OF LIABILITY, WHETHER IN CONTRACT,  STRICT LIABILITY,  OR TORT
43
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
44
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
45
 */ 
46
#ifndef HPL_PGESV_H
47
#define HPL_PGESV_H
48
/*
49
 * ---------------------------------------------------------------------
50
 * Include files
51
 * ---------------------------------------------------------------------
52
 */
53
#include "hpl_misc.h"
54
#include "hpl_blas.h"
55
#include "hpl_auxil.h"
56

    
57
#include "hpl_pmisc.h"
58
#include "hpl_grid.h"
59
#include "hpl_comm.h"
60
#include "hpl_pauxil.h"
61
#include "hpl_panel.h"
62
#include "hpl_pfact.h"
63
/*
64
 * ---------------------------------------------------------------------
65
 * #typedefs and data structures
66
 * ---------------------------------------------------------------------
67
 */
68
typedef enum
69
{
70
   HPL_SWAP00        = 451,                      /* Use HPL_pdlaswp00 */
71
   HPL_SWAP01        = 452,                      /* Use HPL_pdlaswp01 */
72
   HPL_SW_MIX        = 453, /* Use HPL_pdlaswp00_ for small number of */
73
                            /* columns, and HPL_pdlaswp01_ otherwise. */
74
   HPL_NO_SWP        = 499
75
} HPL_T_SWAP;
76

    
77
typedef struct HPL_S_palg
78
{
79
   HPL_T_TOP           btopo;               /* row broadcast topology */
80
   int                 depth;                     /* look-ahead depth */
81
   int                 nbdiv;            /* recursive division factor */
82
   int                 nbmin;         /* recursion stopping criterium */
83
   HPL_T_FACT          pfact;                   /* panel fact variant */
84
   HPL_T_FACT          rfact;               /* recursive fact variant */
85
   HPL_T_PFA_FUN       pffun;              /* panel fact function ptr */
86
   HPL_T_RFA_FUN       rffun;          /* recursive fact function ptr */
87
   HPL_T_UPD_FUN       upfun;                      /* update function */
88
   HPL_T_SWAP          fswap;                   /* Swapping algorithm */
89
   int                 fsthr;                   /* Swapping threshold */
90
   int                 equil;                        /* Equilibration */
91
   int                 align;              /* data alignment constant */
92
} HPL_T_palg;
93

    
94
typedef struct HPL_S_pmat
95
{
96
#ifdef HPL_CALL_VSIPL
97
   vsip_block_d        * block;
98
#endif
99
   double              * A;            /* pointer to local piece of A */
100
   double              * X;             /* pointer to solution vector */
101
   int                 n;                      /* global problem size */
102
   int                 nb;                         /* blocking factor */
103
   int                 ld;                 /* local leading dimension */
104
   int                 mp;                    /* local number of rows */
105
   int                 nq;                 /* local number of columns */
106
   int                 info;                    /* computational flag */
107
} HPL_T_pmat;
108
/*
109
 * ---------------------------------------------------------------------
110
 * #define macro constants
111
 * ---------------------------------------------------------------------
112
 */
113
#define    MSGID_BEGIN_PFACT   1001              /* message id ranges */
114
#define    MSGID_END_PFACT     2000
115
#define    MSGID_BEGIN_FACT    2001
116
#define    MSGID_END_FACT      3000
117
#define    MSGID_BEGIN_PTRSV   3001
118
#define    MSGID_END_PTRSV     4000
119
 
120
#define    MSGID_BEGIN_COLL    9001
121
#define    MSGID_END_COLL     10000
122
/*
123
 * ---------------------------------------------------------------------
124
 * #define macros definitions
125
 * ---------------------------------------------------------------------
126
 */
127
#define    MNxtMgid( id_, beg_, end_ ) \
128
                             (( (id_)+1 > (end_) ?  (beg_) : (id_)+1 ))
129
/*
130
 * ---------------------------------------------------------------------
131
 * Function prototypes
132
 * ---------------------------------------------------------------------
133
 */
134
void                             HPL_pipid
135
STDC_ARGS( (
136
   HPL_T_panel *,
137
   int *,
138
   int *
139
) );
140
void                             HPL_plindx0
141
STDC_ARGS( (
142
   HPL_T_panel *,
143
   const int,
144
   int *,
145
   int *,
146
   int *,
147
   int *
148
) );
149
void                             HPL_pdlaswp00N
150
STDC_ARGS( (
151
   HPL_T_panel *,
152
   int *,
153
   HPL_T_panel *,
154
   const int
155
) );
156
void                             HPL_pdlaswp00T
157
STDC_ARGS( (
158
   HPL_T_panel *,
159
   int *,
160
   HPL_T_panel *,
161
   const int
162
) );
163

    
164
void                             HPL_perm
165
STDC_ARGS( (
166
   const int,
167
   int *,
168
   int *,
169
   int *
170
) );
171
void                             HPL_logsort
172
STDC_ARGS( (
173
   const int,
174
   const int,
175
   int *,
176
   int *,
177
   int *
178
) );
179
void                             HPL_plindx10
180
STDC_ARGS( (
181
   HPL_T_panel *,
182
   const int,
183
   const int *,
184
   int *,
185
   int *,
186
   int *
187
) );
188
void                             HPL_plindx1
189
STDC_ARGS( (
190
   HPL_T_panel *,
191
   const int,
192
   const int *,
193
   int *,
194
   int *,
195
   int *,
196
   int *,
197
   int *,
198
   int *,
199
   int *,
200
   int *
201
) );
202
void                             HPL_spreadN
203
STDC_ARGS( (
204
   HPL_T_panel *,
205
   int *,
206
   HPL_T_panel *,
207
   const enum HPL_SIDE,
208
   const int,
209
   double *,
210
   const int,
211
   const int,
212
   const int *,
213
   const int *,
214
   const int *
215
) );
216
void                             HPL_spreadT
217
STDC_ARGS( (
218
   HPL_T_panel *,
219
   int *,
220
   HPL_T_panel *,
221
   const enum HPL_SIDE,
222
   const int,
223
   double *,
224
   const int,
225
   const int,
226
   const int *,
227
   const int *,
228
   const int *
229
) );
230
void                             HPL_equil
231
STDC_ARGS( (
232
   HPL_T_panel *,
233
   int *,
234
   HPL_T_panel *,
235
   const enum HPL_TRANS,
236
   const int,
237
   double *,
238
   const int,
239
   int *,
240
   const int *,
241
   const int *,
242
   int *
243
) );
244
void                             HPL_rollN
245
STDC_ARGS( (
246
   HPL_T_panel *,
247
   int *,
248
   HPL_T_panel *,
249
   const int,
250
   double *,
251
   const int,
252
   const int *,
253
   const int *,
254
   const int *
255
) );
256
void                             HPL_rollT
257
STDC_ARGS( (
258
   HPL_T_panel *,
259
   int *,
260
   HPL_T_panel *,
261
   const int,
262
   double *,
263
   const int,
264
   const int *,
265
   const int *,
266
   const int *
267
) );
268
void                             HPL_pdlaswp01N
269
STDC_ARGS( (
270
   HPL_T_panel *,
271
   int *,
272
   HPL_T_panel *,
273
   const int
274
) );
275
void                             HPL_pdlaswp01T
276
STDC_ARGS( (
277
   HPL_T_panel *,
278
   int *,
279
   HPL_T_panel *,
280
   const int
281
) );
282

    
283
void                             HPL_pdupdateNN
284
STDC_ARGS( (
285
   HPL_T_panel *,
286
   int *,
287
   HPL_T_panel *,
288
   const int
289
) );
290
void                             HPL_pdupdateNT
291
STDC_ARGS( (
292
   HPL_T_panel *,
293
   int *,
294
   HPL_T_panel *,
295
   const int
296
) );
297
void                             HPL_pdupdateTN
298
STDC_ARGS( (
299
   HPL_T_panel *,
300
   int *,
301
   HPL_T_panel *,
302
   const int
303
) );
304
void                             HPL_pdupdateTT
305
STDC_ARGS( (
306
   HPL_T_panel *,
307
   int *,
308
   HPL_T_panel *,
309
   const int
310
) );
311

    
312
void                             HPL_pdgesv0
313
STDC_ARGS( (
314
   HPL_T_grid *,
315
   HPL_T_palg *,
316
   HPL_T_pmat *
317
) );
318
void                             HPL_pdgesvK1
319
STDC_ARGS( (
320
   HPL_T_grid *,
321
   HPL_T_palg *,
322
   HPL_T_pmat *
323
) );
324
void                             HPL_pdgesvK2
325
STDC_ARGS( (
326
   HPL_T_grid *,
327
   HPL_T_palg *,
328
   HPL_T_pmat *
329
) );
330
void                             HPL_pdgesv
331
STDC_ARGS( (
332
   HPL_T_grid *,
333
   HPL_T_palg *,
334
   HPL_T_pmat *
335
) );
336
 
337
void                             HPL_pdtrsv
338
STDC_ARGS( (
339
   HPL_T_grid *,
340
   HPL_T_pmat *
341
) );
342

    
343
#endif
344
/*
345
 * End of hpl_pgesv.h
346
 */