1HPL_plindx1(3) HPL Library Functions HPL_plindx1(3)
2
3
4
6 HPL_plindx1 - Compute local swapping index arrays.
7
9 #include "hpl.h"
10
11 void HPL_plindx1( HPL_T_panel * PANEL, const int K, const int * IPID,
12 int * IPA, int * LINDXA, int * LINDXAU, int * IPLEN, int * IPMAP, int *
13 IPMAPM1, int * PERMU, int * IWORK );
14
16 HPL_plindx1 computes two local arrays LINDXA and LINDXAU containing
17 the local source and final destination position resulting from the
18 application of row interchanges. In addition, this function computes
19 three arrays IPLEN, IPMAP and IPMAPM1 that contain the logarithmic
20 mapping information for the spreading phase.
21
23 PANEL (local input/output) HPL_T_panel *
24 On entry, PANEL points to the data structure containing the
25 panel information.
26
27 K (global input) const int
28 On entry, K specifies the number of entries in IPID. K is at
29 least 2*N, and at most 4*N.
30
31 IPID (global input) const int *
32 On entry, IPID is an array of length K. The first K entries
33 of that array contain the src and final destination resulting
34 from the application of the interchanges.
35
36 IPA (global output) int *
37 On exit, IPA specifies the number of rows that the current
38 process row has that either belong to U or should be swapped
39 with remote rows of A.
40
41 LINDXA (global output) int *
42 On entry, LINDXA is an array of dimension 2*N. On exit, this
43 array contains the local indexes of the rows of A I have that
44 should be copied into U.
45
46 LINDXAU (global output) int *
47 On exit, LINDXAU is an array of dimension 2*N. On exit, this
48 array contains the local destination information encoded as
49 follows. If LINDXAU(k) >= 0, row LINDXA(k) of A is to be
50 copied in U at position LINDXAU(k). Otherwise, row LINDXA(k)
51 of A should be locally copied into A(-LINDXAU(k),:).
52
53 IPLEN (global output) int *
54 On entry, IPLEN is an array of dimension NPROW + 1. On exit,
55 this array is such that IPLEN[i] is the number of rows of A
56 in the processes before process IPMAP[i] after the sort
57 with the convention that IPLEN[nprow] is the total number of
58 rows of the panel. In other words IPLEN[i+1]-IPLEN[i] is the
59 local number of rows of A that should be moved to the process
60 IPMAP[i]. IPLEN is such that the number of rows of the source
61 process row can be computed as IPLEN[1] - IPLEN[0], and the
62 remaining entries of this array are sorted so that the
63 quantities IPLEN[i+1] - IPLEN[i] are logarithmically sorted.
64
65 IPMAP (global output) int *
66 On entry, IPMAP is an array of dimension NPROW. On exit, this
67 array contains the logarithmic mapping of the processes. In
68 other words, IPMAP[myrow] is the corresponding sorted process
69 coordinate.
70
71 IPMAPM1 (global output) int *
72 On entry, IPMAPM1 is an array of dimension NPROW. On exit,
73 this array contains the inverse of the logarithmic mapping
74 contained in IPMAP: IPMAPM1[ IPMAP[i] ] = i, for all i in
75 [0.. NPROCS)
76
77 PERMU (global output) int *
78 On entry, PERMU is an array of dimension JB. On exit, PERMU
79 contains a sequence of permutations, that should be applied
80 in increasing order to permute in place the row panel U.
81
82 IWORK (workspace) int *
83 On entry, IWORK is a workarray of dimension 2*JB.
84
86 HPL_pdlaswp00N (3), HPL_pdlaswp00T (3), HPL_pdlaswp01N (3),
87 HPL_pdlaswp01T (3).
88
89
90
91HPL 2.2 February 24, 2016 HPL_plindx1(3)