Documentation changes. We have barely begun.....
This commit is contained in:
Salvatore Filippone
2011-12-16 16:45:25 +00:00
parent c730f15b58
commit 844a942947
243 changed files with 14860 additions and 15182 deletions
+62 -183
View File
@@ -33,22 +33,55 @@ it is only used for the \verb|psb_sizeof| utility.
All the general matrix informations and elements to be
exchanged among processes are stored within a data structure of the
type \hypertarget{descdata}{{\tt psb\_desc\_type}}.
Every structure of this type is associated to a sparse matrix, it
contains data about general matrix informations and elements to be
exchanged among processes.
Every structure of this type is associated with a discretization
pattern and enables data communications and other operations that are
necessary for implementing the various algorithms of interest to us.
It is not necessary for the user to know the internal structure of
\verb|psb_desc_type|, it is set in a transparent mode by the tools
routines of Sec.~\ref{sec:toolsrout}, and its fields may be accessed
if necessary via the routines of sec.~\ref{sec:dataquery};
nevertheless we include a description for the curious
reader:
The data structure itself \verb|psb_desc_type| can be treated as an
opaque object handled via the tools routines of
Sec.~\ref{sec:toolsrout} and~\ref{sec:dataquery};
nevertheless we include here a description for the curious
reader.
First we describe the \verb|psb_indx_map| type. This is a data
structure that keeps track of a certain number of basic issues such
as:
\begin{itemize}
\item The value of the communication/MPI context;
\item The number of indices in the index space, i.e. global number of
rows and columns of a sparse matrix;
\item The local set of indices, including:
\begin{itemize}
\item The number of local indices (and local rows);
\item The number of halo indices (and therefore local columns);
\item The global indices corresponding to the local ones.
\end{itemize}
\end{itemize}
There are many different schemes for storing these data; therefore
there are a number of types extending the base one, and the descriptor
structure holds a polymorphic object whose dynamic type can be any of
the extended types.
The methods associated with this data type answer the following
queries:
\begin{itemize}
\item For a given set of local indices, find the corresponding indices
in the global numbering;
\item For a given set of global indices, find the corresponding
indices in the local numbering, if any, or return an invalid
\item Add a global index to the set of halo indices;
\item Find the process owner of each member of a set of global
indices.
\end{itemize}
All methods but the last are purely local; the last method potentially
requires communication among processes, and thus is a synchronous
method. The choice of a specific dynamic type for the index map is
made at the time the descriptor is initially allocated, according to
the mode of initialization (see also~\ref{sec:toolsrout}).
The descriptor contents are as follows:
\begin{description}
\item[{\bf matrix\_data}] includes general information about matrix and
process grid, such as the communication context, the size of the
global matrix, the size of the portion of matrix stored on the current
process, and so on.
Specified as: an allocatable integer array of dimension \verb|psb_mdata_size_|.
\item[{\bf indxmap}] A polymorphic variable of a type that is any
extension of the indx\_map type described above. \\
\item[{\bf halo\_index}] A list of the halo and boundary elements for
the current process to be exchanged with other processes; for each
processes with which it is necessary to communicate:
@@ -88,26 +121,23 @@ ecurrent process:
\item Index of a ``master'' process:
\end{enumerate}
Specified as: an allocatable integer array of rank two.
\item[{\bf loc\_to\_glob}] each element $i$ of this array contains
global identifier of the local variable $i$.\\
Specified as: an allocatable integer array of rank one.
\item[{\bf glob\_to\_loc, glb\_lc, hashv}] Contain a mapping from
global to local indices.
\item [{\bf bnd\_elem}] A list of all boundary points, i.e. points
that have a connection with other processes.
\end{description}
The Fortran~95 definition for \verb|psb_desc_type| structures is
The Fortran~2003 declaration for \verb|psb_desc_type| structures is
as follows:
\begin{figure}[h!]
\begin{Sbox}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
type psb_desc_type
integer, allocatable :: matrix_data(:), halo_index(:)
integer, allocatable :: ext_index(:)
integer, allocatable :: ovrlap_elem(:,:)
integer, allocatable :: ovrlap_index(:)
integer, allocatable :: ovr_mst_idx(:)
integer, allocatable :: loc_to_glob(:), glob_to_loc(:)
integer, allocatable :: hashv(:), glb_lc(:,:)
class(psb_indx_map), allocatable :: indxmap
integer, allocatable :: halo_index(:)
integer, allocatable :: ext_index(:)
integer, allocatable :: ovrlap_index(:)
integer, allocatable :: ovrlap_elem(:,:)
integer, allocatable :: ovr_mst_idx(:)
integer, allocatable :: bnd_elem(:)
end type psb_desc_type
\end{verbatim}
\end{minipage}
@@ -130,14 +160,7 @@ state, which can take the following values:
the associated sparse matrix, such as matrix-vector products, are
only possible in this state.
\end{description}
The global to local index mapping may be stored in two different
formats: the first is simpler but more expensive, as it requires on
each process an amount of memory proportional to the global size of
the index space; the second is more complex, but only requires memory
proportional to the local index space size. The choice is made at the
time of the initialization according to a threshold; this threshold
may be queried and set using the functions in
sec.~\ref{sec:dataquery}.
\subsubsection{Named Constants}
\label{sec:cd_constants}
@@ -176,10 +199,12 @@ sec.~\ref{sec:dataquery}.
\subsection{Sparse Matrix data structure}
\label{sec:spmat}
The \hypertarget{spdata}{{\tt psb\_spmat\_type}} data structure
contains all information about local portion of the sparse matrix and
contains all information about the local portion of the sparse matrix and
its storage mode. Most of these fields are set by the tools
routines when inserting a new sparse matrix; the user needs only
choose, if he/she so whishes, a specific matrix storage mode. \\
choose, if he/she so whishes, a specific matrix storage mode.
The
\begin{description}
\item[{\bf aspk}] Contains values of the local distributed sparse
matrix.\\
@@ -335,153 +360,7 @@ contains all information about local portion of the sparse matrix and
its storage mode. Most of these fields are set by the tools
routines when inserting a new sparse matrix; the user needs only
choose, if he/she so whishes, a specific matrix storage mode. \\
\begin{description}
\item[{\bf aspk}] Contains values of the local distributed sparse
matrix.\\
Specified as: an allocatable array of rank one of type corresponding
to matrix entries type.
\item[{\bf ia1}] Holds integer information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an allocatable integer array of rank one.
\item[{\bf ia2}] Holds integer information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an allocatable integer array of rank one.
\item[{\bf infoa}] On entry can hold auxiliary information on distributed sparse
matrix. Actual information will depend on data format used.\\
Specified as: an integer array of length \verb|psb_ifasize_|.
\item[{\bf fida}] Defines the format of the distributed sparse matrix.\\
Specified as: a string of length 5
\item[{\bf descra}] Describe the characteristic of the distributed sparse matrix.\\
Specified as: array of character of length 9.
\item[{\bf pl}] Specifies the local row permutation of distributed sparse
matrix. If pl(1) is equal to 0, then there isn't row permutation.\\
Specified as: an allocatable integer array of dimension equal to number of local row (matrix\_data[psb\_n\_row\_\hbox{]})
\item[{\bf pr}] Specifies the local column permutation of distributed sparse
matrix. If PR(1) is equal to 0, then there isn't columnm permutation.\\
Specified as: an allocatable integer array of dimension equal to number of
local row (matrix\_data[psb\_n\_col\_\hbox{]})
\item[{\bf m}] Number of rows; if row indices are stored explicitly,
as in Coordinate Storage, should be greater than or equal to the
maximum row index actually present in the sparse matrix.
Specified as: integer variable.
\item[{\bf k}] Number of columns; if column indices are stored explicitly,
as in Coordinate Storage or Compressed Sparse Rows, should be greater
than or equal to the maximum column index actually present in the sparse matrix.
Specified as: integer variable.
\end{description}
The Fortran~95 interface for distributed sparse matrices containing
double precision real entries is defined as shown in
figure~\ref{fig:spmattype}. The definitions for single precision and
complex data are identical except for the \verb|real| declaration and
for the kind type parameter.
\begin{figure}[h!]
\begin{Sbox}
\begin{minipage}[tl]{0.85\textwidth}
\begin{verbatim}
type psb_sspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
real(psb_spk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_sspmat_type
type psb_dspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
real(psb_dpk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_dspmat_type
type psb_cspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
complex(psb_spk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_cspmat_type
type psb_zspmat_type
integer :: m, k
character :: fida(5)
character :: descra(10)
integer :: infoa(psb_ifa_size_)
complex(psb_dpk_), allocatable :: aspk(:)
integer, allocatable :: ia1(:), ia2(:)
integer, allocatable :: pr(:), pl(:)
end type psb_zspmat_type
\end{verbatim}
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{8pt}
\begin{center}
\fbox{\TheSbox}
\end{center}
\caption{\label{fig:spmattype}
The PSBLAS defined data type that
contains a sparse matrix.}
\end{figure}
The following two cases are among the most commonly used:
\begin{description}
\item[fida=``CSR''] Compressed storage by rows. In this case the
following should hold:
\begin{enumerate}
\item \verb|ia2(i)| contains the index of the first element of row
\verb|i|; the last element of the sparse matrix is thus stored at
index $ia2(m+1)-1$. It should contain \verb|m+1| entries in
nondecreasing order (strictly increasing, if there are no empty rows).
\item \verb|ia1(j)| contains the column index and \verb|aspk(j)|
contains the corresponding coefficient value, for all $ia2(1) \le j
\le ia2(m+1)-1$.
\end{enumerate}
\item[fida=``COO''] Coordinate storage. In this case the following
should hold:
\begin{enumerate}
\item \verb|infoa(1)| contains the number of nonzero elements in the
matrix;
\item For all $1 \le j \le infoa(1)$, the coefficient, row index and
column index are stored into \verb|apsk(j)|, \verb|ia1(j)| and
\verb|ia2(j)| respectively.
\end{enumerate}
\end{description}
A sparse matrix has an associated state, which can take the following
values:
\begin{description}
\item[Build:] State entered after the first allocation, and before the
first assembly; in this state it is possible to add nonzero entries.
\item[Assembled:] State entered after the assembly; computations using
the sparse matrix, such as matrix-vector products, are only possible
in this state;
\item[Update:] State entered after a reinitalization; this is used to
handle applications in which the same sparsity pattern is used
multiple times with different coefficients. In this state it is only
possible to enter coefficients for already existing nonzero entries.
\end{description}
\subsubsection{Named Constants}
\label{sec:sp_constants}
\begin{description}
%% \item[psb\_nztotreq\_] Request to fetch the total number of nonzeroes
%% stored in a sparse matrix
%% \item[psb\_nzrowreq\_] Request to fetch the number of nonzeroes in a
%% given row in a sparse matrix
\item[psb\_dupl\_ovwrt\_] Duplicate coefficients should be overwritten
(i.e. ignore duplications)
\item[psb\_dupl\_add\_] Duplicate coefficients should be added;
\item[psb\_dupl\_err\_] Duplicate coefficients should trigger an error conditino
\item[psb\_upd\_dflt\_] Default update strategy for matrix coefficients;
\item[psb\_upd\_srch\_] Update strategy based on search into the data structure;
\item[psb\_upd\_perm\_] Update strategy based on additional
permutation data (see tools routine description).
\end{description}
+34 -55
View File
@@ -1,11 +1,12 @@
%!PS-Adobe-2.0 EPSF-2.0
%!PS-Adobe-3.0 EPSF-3.0
%%Title: psblas.fig
%%Creator: fig2dev Version 3.2 Patchlevel 5
%%CreationDate: Thu Jul 31 17:37:06 2008
%%Creator: fig2dev Version 3.2 Patchlevel 5d
%%CreationDate: Thu Dec 15 14:55:15 2011
%%For: sfilippo@donald (Salvatore Filippone)
%%BoundingBox: 0 0 206 283
%%BoundingBox: 0 0 197 215
%Magnification: 0.5000
%%EndComments
%%BeginProlog
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
@@ -44,10 +45,6 @@ $F2psDict /mtrx matrix put
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
newpath 0 283 moveto 0 0 lineto 206 0 lineto 206 283 lineto closepath clip newpath
-5.3 289.5 translate
1 -1 scale
/cp {closepath} bind def
/ef {eofill} bind def
@@ -83,10 +80,22 @@ newpath 0 283 moveto 0 0 lineto 206 0 lineto 206 283 lineto closepath clip newpa
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
/pageheader {
save
newpath 0 215 moveto 0 0 lineto 197 0 lineto 197 215 lineto closepath clip newpath
-5.3 221.5 translate
1 -1 scale
$F2psBegin
10 setmiterlimit
0 slj 0 slc
0.03150 0.03150 sc
} bind def
/pagefooter {
$F2psEnd
restore
} bind def
%%EndProlog
pageheader
%
% Fig objects follow
%
@@ -126,36 +135,12 @@ n 2100 2925 m 1845 2925 1845 4020 255 arcto 4 {pop} repeat
4680 2925 2100 2925 255 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
n 3645 5670 m 3420 5670 3420 6795 225 arcto 4 {pop} repeat
3420 7020 5940 7020 225 arcto 4 {pop} repeat
6165 7020 6165 5895 225 arcto 4 {pop} repeat
6165 5670 3645 5670 225 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
n 405 5670 m 180 5670 180 6750 225 arcto 4 {pop} repeat
180 6975 2655 6975 225 arcto 4 {pop} repeat
2880 6975 2880 5895 225 arcto 4 {pop} repeat
2880 5670 405 5670 225 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
gs clippath
4800 7255 m 4800 7050 l 4740 7050 l 4740 7255 l 4740 7255 l 4770 7105 l 4800 7255 l cp
eoclip
n 4770 7740 m
4770 7065 l gs col0 s gr gr
% arrowhead
15.000 slw
n 4800 7255 m 4770 7105 l 4740 7255 l 4770 7225 l 4800 7255 l
cp gs 0.00 setgray ef gr col0 s
% Polyline
7.500 slw
n 3825 7785 m 3600 7785 3600 8955 225 arcto 4 {pop} repeat
3600 9180 6075 9180 225 arcto 4 {pop} repeat
6300 9180 6300 8010 225 arcto 4 {pop} repeat
6300 7785 3825 7785 225 arcto 4 {pop} repeat
cp gs col0 s gr
% Polyline
n 2880 6300 m
3420 6300 l gs col0 s gr
% Polyline
@@ -168,15 +153,6 @@ n 3150 6300 m
% arrowhead
n 3180 4456 m 3150 4336 l 3120 4456 l 3180 4456 l cp gs 0.00 setgray ef gr col0 s
% Polyline
gs clippath
3180 6436 m 3180 6285 l 3120 6285 l 3120 6436 l 3120 6436 l 3150 6316 l 3180 6436 l cp
eoclip
n 3600 8460 m 3150 8460 l
3150 6300 l gs col0 s gr gr
% arrowhead
n 3180 6436 m 3150 6316 l 3120 6436 l 3180 6436 l cp gs 0.00 setgray ef gr col0 s
% Polyline
15.000 slw
[90] 0 sd
n 900 2295 m
@@ -185,6 +161,13 @@ n 900 2295 m
[90] 0 sd
n 945 4995 m
5490 4995 l gs col0 s gr [] 0 sd
% Polyline
7.500 slw
n 3645 5625 m 3420 5625 3420 6795 225 arcto 4 {pop} repeat
3420 7020 5895 7020 225 arcto 4 {pop} repeat
6120 7020 6120 5850 225 arcto 4 {pop} repeat
6120 5625 3645 5625 225 arcto 4 {pop} repeat
cp gs col0 s gr
/Times-Roman ff 396.88 scf sf
2295 990 m
gs 1 -1 sc (Application) col0 sh gr
@@ -192,18 +175,6 @@ gs 1 -1 sc (Application) col0 sh gr
2250 3735 m
gs 1 -1 sc (PSBLAS ) col0 sh gr
/Times-Roman ff 396.88 scf sf
4140 6390 m
gs 1 -1 sc (BLACS) col0 sh gr
/Times-Roman ff 396.88 scf sf
3690 8280 m
gs 1 -1 sc (Message Passing) col0 sh gr
/Times-Roman ff 396.88 scf sf
4410 8820 m
gs 1 -1 sc (MPI) col0 sh gr
/Times-Roman ff 396.88 scf sf
4050 2160 m
gs 1 -1 sc (Fortran95) col0 sh gr
/Times-Roman ff 396.88 scf sf
4050 2565 m
gs 1 -1 sc (Interface) col0 sh gr
/Times-Roman ff 396.88 scf sf
@@ -212,9 +183,17 @@ gs 1 -1 sc (Inner) col0 sh gr
/Times-Roman ff 396.88 scf sf
4140 5310 m
gs 1 -1 sc (Interface) col0 sh gr
/Times-Roman ff 396.88 scf sf
3420 6120 m
gs 1 -1 sc (Message Passing) col0 sh gr
/Times-Roman ff 396.88 scf sf
4275 6660 m
gs 1 -1 sc (MPI) col0 sh gr
/Times-Roman ff 396.88 scf sf
4050 2160 m
gs 1 -1 sc (Fortran 2003) col0 sh gr
% here ends figure;
$F2psEnd
rs
pagefooter
showpage
%%Trailer
%EOF
+41
View File
@@ -0,0 +1,41 @@
#FIG 3.2 Produced by xfig version 3.2.5b
Landscape
Center
Metric
Letter
50.00
Single
-2
1200 2
6 540 5940 2430 6660
4 0 0 50 -1 0 25 0.0000 4 375 2250 540 6210 Serial Sparse\001
4 0 0 50 -1 0 25 0.0000 4 285 1080 1080 6660 BLAS\001
-6
2 4 0 1 0 7 50 -1 -1 0.000 0 0 15 0 0 5
4500 1575 1800 1575 1800 225 4500 225 4500 1575
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
2 1 2.00 60.00 120.00
3150 2970 3150 1575
2 4 0 1 0 7 50 -1 -1 0.000 0 0 17 0 0 5
4680 4275 1845 4275 1845 2925 4680 2925 4680 4275
2 4 0 1 0 7 50 -1 -1 0.000 0 0 15 0 0 5
2880 6975 180 6975 180 5670 2880 5670 2880 6975
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
2880 6300 3420 6300
2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
1 1 1.00 60.00 120.00
3150 6300 3150 4320
2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2
900 2295 5445 2295
2 1 1 2 0 7 50 -1 -1 6.000 0 0 -1 0 0 2
945 4995 5490 4995
2 4 0 1 0 7 50 -1 -1 0.000 0 0 15 0 0 5
6120 7020 3420 7020 3420 5625 6120 5625 6120 7020
4 0 0 50 -1 0 25 0.0000 4 375 2010 2295 990 Application\001
4 0 0 50 -1 0 25 0.0000 4 285 1665 2250 3735 PSBLAS \001
4 0 0 50 -1 0 25 0.0000 4 285 1515 4050 2565 Interface\001
4 0 0 50 -1 0 25 0.0000 4 285 885 4140 4860 Inner\001
4 0 0 50 -1 0 25 0.0000 4 285 1515 4140 5310 Interface\001
4 0 0 50 -1 0 25 0.0000 4 375 2910 3420 6120 Message Passing\001
4 0 0 50 -1 0 25 0.0000 4 285 750 4275 6660 MPI\001
4 0 0 50 -1 0 25 0.0000 4 285 2190 4050 2160 Fortran 2003\001
Binary file not shown.
+353
View File
@@ -0,0 +1,353 @@
#FIG 3.2
Landscape
Center
Inches
Letter
100.00
Single
-2
1200 2
6 1350 900 1425 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 6300 1350 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 5400 1350 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 4500 1350 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 3600 1350 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 2700 1350 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 1800 1350 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1350 900 1350 1500
-6
6 2250 900 2325 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 6300 2250 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 5400 2250 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 4500 2250 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 3600 2250 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 2700 2250 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 1800 2250 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2250 900 2250 1500
-6
6 3150 900 3225 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 6300 3150 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 5400 3150 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 4500 3150 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 3600 3150 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 2700 3150 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 1800 3150 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3150 900 3150 1500
-6
6 4050 900 4125 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 6300 4050 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 5400 4050 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 4500 4050 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 3600 4050 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 2700 4050 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 1800 4050 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4050 900 4050 1500
-6
6 4950 900 5025 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 6300 4950 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 5400 4950 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 4500 4950 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 3600 4950 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 2700 4950 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 1800 4950 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4950 900 4950 1500
-6
6 5850 900 5925 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 6300 5850 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 5400 5850 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 4500 5850 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 3600 5850 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 2700 5850 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 1800 5850 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5850 900 5850 1500
-6
6 6750 900 6825 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 6300 6750 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 5400 6750 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 4500 6750 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 3600 6750 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 2700 6750 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 1800 6750 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6750 900 6750 1500
-6
6 7650 900 7725 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 6300 7650 6900
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 5400 7650 6000
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 4500 7650 5100
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 3600 7650 4200
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 2700 7650 3300
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 1800 7650 2400
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
7650 900 7650 1500
-6
6 1500 750 7500 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 750 7500 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 750 6600 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 750 5700 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 750 4800 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 750 3900 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 750 3000 750
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 750 2100 750
-6
6 1500 1650 7500 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 1650 7500 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 1650 6600 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 1650 5700 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 1650 4800 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 1650 3900 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 1650 3000 1650
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 1650 2100 1650
-6
6 1500 2550 7500 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 2550 7500 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 2550 6600 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 2550 5700 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 2550 4800 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 2550 3900 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 2550 3000 2550
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 2550 2100 2550
-6
6 1500 3450 7500 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 3450 7500 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 3450 6600 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 3450 5700 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 3450 4800 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 3450 3900 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 3450 3000 3450
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 3450 2100 3450
-6
6 1500 4350 7500 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 4350 7500 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 4350 6600 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 4350 5700 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 4350 4800 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 4350 3900 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 4350 3000 4350
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 4350 2100 4350
-6
6 1500 5250 7500 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 5250 7500 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 5250 6600 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 5250 5700 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 5250 4800 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 5250 3900 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 5250 3000 5250
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 5250 2100 5250
-6
6 1500 6150 7500 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 6150 7500 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 6150 6600 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 6150 5700 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 6150 4800 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 6150 3900 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 6150 3000 6150
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 6150 2100 6150
-6
6 1500 7050 7500 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6900 7050 7500 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
6000 7050 6600 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
5100 7050 5700 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
4200 7050 4800 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
3300 7050 3900 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
2400 7050 3000 7050
2 1 0 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2
1500 7050 2100 7050
-6
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 750 150 150 1350 750 1350 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 1650 150 150 1350 1650 1350 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 2550 150 150 1350 2550 1350 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 3450 150 150 1350 3450 1350 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 4350 150 150 1350 4350 1350 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 5250 150 150 1350 5250 1350 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 6150 150 150 1350 6150 1350 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 1350 7050 150 150 1350 7050 1350 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 750 150 150 2250 750 2250 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 1650 150 150 2250 1650 2250 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 2550 150 150 2250 2550 2250 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 3450 150 150 2250 3450 2250 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 4350 150 150 2250 4350 2250 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 5250 150 150 2250 5250 2250 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 6150 150 150 2250 6150 2250 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 2250 7050 150 150 2250 7050 2250 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 750 150 150 3150 750 3150 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 1650 150 150 3150 1650 3150 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 2550 150 150 3150 2550 3150 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 3450 150 150 3150 3450 3150 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 4350 150 150 3150 4350 3150 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 5250 150 150 3150 5250 3150 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 6150 150 150 3150 6150 3150 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 3150 7050 150 150 3150 7050 3150 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 750 150 150 4050 750 4050 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 1650 150 150 4050 1650 4050 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 2550 150 150 4050 2550 4050 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 3450 150 150 4050 3450 4050 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 4350 150 150 4050 4350 4050 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 5250 150 150 4050 5250 4050 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 6150 150 150 4050 6150 4050 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4050 7050 150 150 4050 7050 4050 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 750 150 150 4950 750 4950 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 1650 150 150 4950 1650 4950 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 2550 150 150 4950 2550 4950 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 3450 150 150 4950 3450 4950 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 4350 150 150 4950 4350 4950 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 5250 150 150 4950 5250 4950 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 6150 150 150 4950 6150 4950 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 4950 7050 150 150 4950 7050 4950 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 750 150 150 5850 750 5850 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 1650 150 150 5850 1650 5850 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 2550 150 150 5850 2550 5850 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 3450 150 150 5850 3450 5850 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 4350 150 150 5850 4350 5850 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 5250 150 150 5850 5250 5850 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 6150 150 150 5850 6150 5850 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 5850 7050 150 150 5850 7050 5850 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 750 150 150 6750 750 6750 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 1650 150 150 6750 1650 6750 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 2550 150 150 6750 2550 6750 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 3450 150 150 6750 3450 6750 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 4350 150 150 6750 4350 6750 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 5250 150 150 6750 5250 6750 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 6150 150 150 6750 6150 6750 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 6750 7050 150 150 6750 7050 6750 7200
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 750 150 150 7650 750 7650 900
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 1650 150 150 7650 1650 7650 1800
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 2550 150 150 7650 2550 7650 2700
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 3450 150 150 7650 3450 7650 3600
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 4350 150 150 7650 4350 7650 4500
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 5250 150 150 7650 5250 7650 5400
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 6150 150 150 7650 6150 7650 6300
1 3 0 1 0 7 50 -1 -1 0.000 1 0.0000 7650 7050 150 150 7650 7050 7650 7200
2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
600 3900 8175 3900
4 0 0 50 -1 0 12 0.0000 4 135 90 1350 7575 1\001
4 1 0 50 -1 0 12 0.0000 4 135 90 2250 7575 2\001
4 1 0 50 -1 0 12 0.0000 4 135 90 3150 7575 3\001
4 1 0 50 -1 0 12 0.0000 4 135 90 4050 7575 4\001
4 1 0 50 -1 0 12 0.0000 4 135 90 4950 7575 5\001
4 1 0 50 -1 0 12 0.0000 4 135 90 5850 7575 6\001
4 1 0 50 -1 0 12 0.0000 4 135 90 6750 7575 7\001
4 1 0 50 -1 0 12 0.0000 4 135 90 7650 7575 8\001
4 1 0 50 -1 0 12 0.0000 4 135 180 7650 450 64\001
4 1 0 50 -1 0 12 0.0000 4 135 180 6750 450 63\001
4 1 0 50 -1 0 12 0.0000 4 135 180 5850 450 62\001
4 1 0 50 -1 0 12 0.0000 4 135 180 4950 450 61\001
4 1 0 50 -1 0 12 0.0000 4 135 180 4050 450 60\001
4 1 0 50 -1 0 12 0.0000 4 135 180 3150 450 59\001
4 1 0 50 -1 0 12 0.0000 4 135 180 2250 450 58\001
4 1 0 50 -1 0 12 0.0000 4 135 180 1350 450 57\001
4 1 0 50 -1 0 12 0.0000 4 135 180 8100 4425 32\001
4 1 0 50 -1 0 12 0.0000 4 135 180 900 4425 25\001
4 1 0 50 -1 0 12 0.0000 4 135 180 975 3525 27\001
4 1 0 50 -1 0 12 0.0000 4 135 180 8100 3525 40\001
4 1 0 50 -1 2 18 0.0000 4 195 300 8700 1950 P1\001
4 1 0 50 -1 2 18 0.0000 4 195 300 8700 5850 P0\001
+19 -22
View File
@@ -21,7 +21,11 @@ mostly in the handling of requirements for evolution and adaptation of
the library to new computing architectures and integration of
new algorithms.
For a detailed discussion of our design see~\cite{Sparse03}; other
works tackling advanced programming in Fortran~2003 include~\cite{DesPat:11,RouXiaXu:11}
works discussing advanced programming in Fortran~2003
include~\cite{DesPat:11,RouXiaXu:11}; sufficient support for
Fortran~2003 is now available from many compilers, including the GNU
Fortran compiler from the Free Software Foundation (as of version 4.6).
Previous approaches have been based on mixing Fortran~95, with its
support for object-based design, with other languages; these have
@@ -32,12 +36,7 @@ usability of the PSBLAS
subroutines. In this way, the library can take care of runtime memory
requirements that are quite difficult or even impossible to predict at
implementation or compilation time.
In the current release we rely on the availability of the so-called
allocatable extensions, specified in TR~15581. Strictly speaking they
are outside the Fortran~95 standard; however they have been included
in the Fortran~2003 language standard, and are available in
practically all Fortran~95 compilers on the market, including the GNU
Fortran compiler from the Free Software Foundation (as of version 4.2).
The presentation of the
PSBLAS library follows the general structure of the proposal for
serial Sparse BLAS~\cite{sblas97,sblas02}, which in its turn is based on the
@@ -84,20 +83,16 @@ influenced by the structure of the ScaLAPACK parallel
library. The layered structure of the PSBLAS library
is shown in figure~\ref{fig:psblas}; lower layers of the library
indicate an encapsulation relationship with upper layers. The ongoing
discussion focuses on the Fortran~95 layer immediately below the
discussion focuses on the Fortran~2003 layer immediately below the
application layer.
The serial parts of the computation on each process are executed through
calls to the serial sparse BLAS subroutines. In a similar way, the
inter-process message exchanges are implemented through the Basic
Linear Algebra Communication Subroutines (BLACS) library~\cite{BLACS}
that guarantees a portable and efficient communication layer. The
Message Passing Interface code is encapsulated within the BLACS
layer. However, in some cases, MPI routines are directly used either
to improve efficiency or to implement communication patterns for which
the BLACS package doesn't provide any method.
In any case we provide wrappers around the BLACS routines so that the
user does not need to delve into their details (see Sec.~\ref{sec:parenv}).
calls to the serial sparse BLAS subroutines.
In a similar way, the inter-process message exchanges are encapsulated
in an applicaiton layer that has been strongly inspired by the Basic
Linear Algebra Communication Subroutines (BLACS) library~\cite{BLACS}.
Usually there is no need to deal directly with MPI; however, in some
cases, MPI routines are used directly to improve efficiency. For
further details on our communication layer see Sec.~\ref{sec:parenv}.
%% We assume that the user program has initialized a BLACS process grid
%% with one column and as many rows as there are processes; the PSBLAS
%% initialization routines will take the communication context for this
@@ -136,10 +131,12 @@ sub-domains}.
Our library supports any distribution that keeps together
the coefficients of each matrix row; there are no other constraints on
the variable assignment.
This choice is consistent with data distributions commonly used in
ScaLAPACK such as \verb|CYCLIC(N)| and \verb|BLOCK|,
This choice is consistent with simple data distributions
%commonly used in ScaLAPACK
such as \verb|CYCLIC(N)| and \verb|BLOCK|,
as well as completely arbitrary assignments of
equation indices to processes. In particular it is consistent with the
equation indices to processes.
In particular it is consistent with the
usage of graph partitioning tools commonly available in the
literature, e.g. METIS~\cite{METIS}.
Dense vectors conform to sparse
+1 -1
View File
@@ -100,7 +100,7 @@
by Salvatore Filippone\\
and Alfredo Buttari}\\
University of Rome ``Tor Vergata''.\\[3ex]
May 15th, 2010.
December 15th, 2011.
\end{minipage}}
%\addtolength{\textwidth}{\centeroffset}
+1 -1
View File
@@ -85,7 +85,7 @@
%\today
Software version: 3.0-beta\\
%\today
May 15th, 2010
December 15th, 2011
\cleardoublepage
\begingroup
\renewcommand*{\thepage}{toc}