Merge branch 'remotebuild' into development

This commit is contained in:
Salvatore Filippone
2022-05-24 12:32:55 +02:00
129 changed files with 10079 additions and 5132 deletions
+1 -1
View File
@@ -139,7 +139,7 @@ PDF = $(join $(BASEFILE),.pdf)
PS = $(join $(BASEFILE),.ps)
GXS = $(join $(BASEFILE),.gxs)
GLX = $(join $(BASEFILE),.glx)
TARGETPDF= ../psblas-3.7.pdf
TARGETPDF= ../psblas-3.8.pdf
BASEHTML = $(patsubst %.tex,%,$(HTMLFILE))
HTML = $(join $(BASEHTML),.html)
HTMLDIR = ../html
+75 -23
View File
@@ -547,7 +547,7 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection{psb\_spall --- Allocates a sparse matrix}
\begin{verbatim}
call psb_spall(a, desc_a, info, nnz)
call psb_spall(a, desc_a, info [, nnz, dupl, bldmode])
\end{verbatim}
\begin{description}
@@ -564,6 +564,19 @@ Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: an integer value.
\item[dupl] How to handle duplicate coefficients.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: integer, possible values: \verb|psb_dupl_ovwrt_|,
\verb|psb_dupl_add_|, \verb|psb_dupl_err_|.
\item[bldmode] Whether to keep track of matrix entries that do not
belong to the current process.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: an integer value \verb|psb_matbld_noremote_|,
\verb|psb_matbld_remote_|. Default: \verb|psb_matbld_noremote_|.
\end{description}
\begin{description}
@@ -587,7 +600,9 @@ An integer value; 0 means no error has been detected.
\item Providing a good estimate for the number of nonzeroes $nnz$ in
the assembled matrix may substantially improve performance in the
matrix build phase, as it will reduce or eliminate the need for
(potentially multiple) data reallocations.
(potentially multiple) data reallocations;
\item Using \verb|psb_matbld_remote_| is likely to cause a runtime overhead at
assembly time;
\end{enumerate}
@@ -697,8 +712,7 @@ An integer value; 0 means no error has been detected.
\item The input data can be passed in either COO or CSR formats;
\item In COO format the coefficients to be inserted are represented by
the ordered triples $ia(i),ja(i),val(i)$, for $i=1,\dots,nz$;
these triples should belong to the current process, i.e. $ia(i)$
should be one of the local indices, but are otherwise arbitrary;
these triples are arbitrary;
\item In CSR format the coefficients to be inserted for each input row $i=1,nr$
are represented by the ordered triples $(i+irw-1),ja(j),val(j)$, for
$j=irp(i),\dots,irp(i+1)-1$;
@@ -709,8 +723,11 @@ An integer value; 0 means no error has been detected.
may be split into as many calls as desired (even in the CSR format);
\item Coefficients from different rows may also be mixed up freely
in a single call, according to the application needs;
\item Any coefficients from matrix rows not owned by the calling
process are silently ignored;
\item Coefficients from matrix rows not owned by the calling
process are treated according to the value of \verb|bldmode|
specified at allocation time; if
\verb|bldmode| was chosen as \verb|psb_matbld_remote_| the library
will keep track of them, otherwise they are silently ignored;
\item If the descriptor is in the assembled state, then any entries in
the sparse matrix that would generate additional communication
requirements are ignored;
@@ -724,7 +741,7 @@ An integer value; 0 means no error has been detected.
\clearpage\subsection{psb\_spasb --- Sparse matrix assembly routine}
\begin{verbatim}
call psb_spasb(a, desc_a, info, afmt, upd, dupl, mold)
call psb_spasb(a, desc_a, info [, afmt, upd, mold])
\end{verbatim}
\begin{description}
@@ -733,7 +750,7 @@ call psb_spasb(a, desc_a, info, afmt, upd, dupl, mold)
\item[desc\_a] the communication descriptor.\\
Scope:{\bf local}.\\
Type:{\bf required}.\\
Intent: {\bf in}.\\
Intent: {\bf in/out}.\\
Specified as: a structured data of type \descdata.
\item[afmt] the storage format for the sparse matrix.\\
Scope: {\bf local}.\\
@@ -745,12 +762,6 @@ Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: integer, possible values: \verb|psb_upd_srch_|, \verb|psb_upd_perm_|
\item[dupl] How to handle duplicate coefficients.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: integer, possible values: \verb|psb_dupl_ovwrt_|,
\verb|psb_dupl_add_|, \verb|psb_dupl_err_|.
\item[mold] The desired dynamic type for the internal matrix storage.\\
Scope: {\bf local}.\\
Type: {\bf optional}.\\
@@ -765,6 +776,13 @@ Scope:{\bf local}\\
Type:{\bf required}\\
Intent: {\bf inout}.\\
Specified as: a structured data of type \spdata.
\item[desc\_a] the communication descriptor.\\
Scope:{\bf local}.\\
Type:{\bf required}.\\
Intent: {\bf in/out}.\\
Specified as: a structured data of type \descdata. If the matrix was
allocated with \verb|bldmode=psb_matbld_remote_|, then the
descriptor will be reassembled.
\item[info] Error code.\\
Scope: {\bf local} \\
Type: {\bf required} \\
@@ -787,7 +805,14 @@ An integer value; 0 means no error has been detected.
\item The output storage format need not be the same on all
processes;
\item On exit from this routine the matrix is in the assembled state,
and thus is suitable for the computational routines.
and thus is suitable for the computational routines;
\item If the \verb|bldmode=psb_matbld_remote_| value was specified
at allocation time, contributions defined on the current process but
belonging to a remote process will be handled accordingly. This is
most likely to occur in finite element applications, with
\verb|dupl=psb_dupl_add_|; it is necessary to check for possible
updates needed in the descriptor, hence there will be a runtime
overhead.
\end{enumerate}
@@ -957,7 +982,7 @@ An integer value; 0 means no error has been detected.
%\addcontentsline{toc}{subsection}{psb\_geall}
\begin{verbatim}
call psb_geall(x, desc_a, info, n, lb)
call psb_geall(x, desc_a, info[, dupl, bldmode, n, lb])
\end{verbatim}
\begin{description}
@@ -980,6 +1005,19 @@ Type: {\bf optional}\\
Intent: {\bf in}.\\
Specified as: Integer scalar, default $1$. It is not a valid argument if $x$ is a
rank-1 array.
\item[dupl] How to handle duplicate coefficients.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: integer, possible values: \verb|psb_dupl_ovwrt_|,
\verb|psb_dupl_add_|; \verb|psb_dupl_err_| has no effect.
\item[bldmode] Whether to keep track of matrix entries that do not
belong to the current process.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: an integer value \verb|psb_matbld_noremote_|,
\verb|psb_matbld_remote_|. Default: \verb|psb_matbld_noremote_|.
\end{description}
\begin{description}
@@ -997,6 +1035,11 @@ Intent: {\bf out}.\\
An integer value; 0 means no error has been detected.
\end{description}
{\par\noindent\large\bfseries Notes}
\begin{enumerate}
\item Using \verb|psb_matbld_remote_| is likely to cause a runtime overhead at
assembly time;
\end{enumerate}
%
%% psb_ins %%
@@ -1005,7 +1048,7 @@ An integer value; 0 means no error has been detected.
%\addcontentsline{toc}{subsection}{psb\_geins}
\begin{verbatim}
call psb_geins(m, irw, val, x, desc_a, info [,dupl,local])
call psb_geins(m, irw, val, x, desc_a, info [,local])
\end{verbatim}
\begin{description}
@@ -1034,12 +1077,6 @@ Scope:{\bf local}.\\
Type:{\bf required}.\\
Intent: {\bf in}.\\
Specified as: a structured data of type \descdata.
\item[dupl] How to handle duplicate coefficients.\\
Scope: {\bf global}.\\
Type: {\bf optional}.\\
Intent: {\bf in}.\\
Specified as: integer, possible values: \verb|psb_dupl_ovwrt_|,
\verb|psb_dupl_add_|.
\item[local] Whether the entries in the index vector \verb|irw|,
are already in local numbering. \\
Scope:{\bf local}.\\
@@ -1111,7 +1148,22 @@ Type: {\bf required} \\
Intent: {\bf out}.\\
An integer value; 0 means no error has been detected.
\end{description}
{\par\noindent\large\bfseries Notes}
\begin{enumerate}
\item On entry to this routine the descriptor must be in the
assembled state, i.e. \verb|psb_cdasb| must already have been called.
\item If the \verb|bldmode=psb_matbld_remote_| value was specified
at allocation time, contributions defined on the current process but
belonging to a remote process will be handled accordingly. This is
most likely to occur in finite element applications, with
\verb|dupl=psb_dupl_add_|.
\end{enumerate}
%
%% psb_free %%
%
\clearpage\subsection{psb\_gefree --- Frees a dense matrix}
+4 -4
View File
@@ -36,7 +36,7 @@
\relax
\pdfcompresslevel=0 %-- 0 = none, 9 = best
\pdfinfo{ %-- Info dictionary of PDF output /Author (Alfredo Buttari)
/Title (Parallel Sparse BLAS V. 3.7.0)
/Title (Parallel Sparse BLAS V. 3.8.0)
/Subject (Parallel Sparse Basic Linear Algebra Subroutines)
/Keywords (Computer Science Linear Algebra Fluid Dynamics Parallel Linux MPI PSBLAS Iterative Solvers Preconditioners)
/Creator (pdfLaTeX)
@@ -99,7 +99,7 @@
\begin{document}
{
\pdfbookmark{PSBLAS-v3.7.0 User's Guide}{title}
\pdfbookmark{PSBLAS-v3.8.0 User's Guide}{title}
\lstset{language=Fortran}
\newlength{\centeroffset}
\setlength{\centeroffset}{-0.5\oddsidemargin}
@@ -109,7 +109,7 @@
\vspace*{\stretch{1}}
\noindent\hspace*{\centeroffset}\makebox[0pt][l]{\begin{minipage}{\textwidth}
\flushright
{\Huge\bfseries PSBLAS 3.7.0.1 User's guide
{\Huge\bfseries PSBLAS 3.8.0 User's guide
}
\noindent\rule[-1ex]{\textwidth}{5pt}\\[2.5ex]
\hfill\emph{\Large A reference guide for the Parallel Sparse BLAS library}
@@ -130,7 +130,7 @@
{\bfseries
by Salvatore Filippone\\
and Alfredo Buttari}\\
May 11th, 2021
May 1st, 2022
\end{minipage}}
}
%\addtolength{\textwidth}{\centeroffset}
+2 -2
View File
@@ -94,9 +94,9 @@
Alfredo Buttari } \\
%\\[10ex]
%\today
Software version: 3.7.0.1\\
Software version: 3.8.0\\
%\today
May 11th, 2021
May 1st, 2022
\cleardoublepage
\begingroup
\renewcommand*{\thepage}{toc}
+94
View File
@@ -206,6 +206,54 @@ Type: {\bf required} \\
An integer value; 0 means no error has been detected.
\end{description}
{\par\noindent\large\bfseries Notes}
If this function is called on a matrix \lstinline|a| on a distributed communicator
only the local part is written in output. To get a single MatrixMarket file with
the whole matrix when appropriate, e.g. for debugging purposes, one could \emph{gather}
the whole matrix on a single rank and then write it. Consider the following example
for a \emph{double} precision matrix\vspace{-0.5em}
\ifpdf
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran}
type(psb_ldspmat_type) :: aglobal
call psb_gather(aglobal,a,desc_a,info)
if (iam == psb_root_) then
call mm_mat_write(aglobal,mtitle,info,filename)
end if
call psb_spfree(aglobal, desc_a, info)
\end{minted}
\else
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
type(psb_ldspmat_type) :: aglobal
call psb_gather(aglobal,a,desc_a,info)
if (iam == psb_root_) then
call mm_mat_write(aglobal,mtitle,info,filename)
end if
call psb_spfree(aglobal, desc_a, info)
\end{verbatim}
\end{minipage}
\end{center}
\fi
To simplify this procedure in \verb|C|, there is a utility function\vspace{-0.5em}
\ifpdf
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{c}
psb_i_t psb_c_<s,d,c,z>global_mat_write(ah,cdh);
\end{minted}
\else
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
psb_i_t psb_c_<s,d,c,z>global_mat_write(ah,cdh);
\end{verbatim}
\end{minipage}
\end{center}
\fi
that produces exactly this result.
\clearpage\subsection{mm\_array\_write --- Write a dense array from a
file in the MatrixMarket format}
@@ -243,7 +291,53 @@ Type: {\bf required} \\
An integer value; 0 means no error has been detected.
\end{description}
{\par\noindent\large\bfseries Notes}
If this function is called on a vector \lstinline|v| on a distributed communicator
only the local part is written in output. To get a single MatrixMarket file with
the whole vector when appropriate, e.g. for debugging purposes, one could \emph{gather}
the whole vector on a single rank and then write it. Consider the following example
for a \emph{double} precision vector
\ifpdf
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{fortran}
real(psb_dpk_), allocatable :: vglobal(:)
call psb_gather(vglobal,v,desc,info)
if (iam == psb_root_) then
call mm_array_write(vglobal,vtitle,info,filename)
end if
call deallocate(vglobal, stat=info)
\end{minted}
\else
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
real(psb_dpk_), allocatable :: vglobal(:)
call psb_gather(vglobal,v,desc,info)
if (iam == psb_root_) then
call mm_array_write(vglobal,vtitle,info,filename)
end if
call deallocate(vglobal, stat=info)
\end{verbatim}
\end{minipage}
\end{center}
\fi
To simplify this procedure in \verb|C|, there is a utility function
\ifpdf
\begin{minted}[breaklines=true,bgcolor=bg,fontsize=\small]{c}
psb_i_t psb_c_<s,d,c,z>global_vec_write(vh,cdh);
\end{minted}
\else
\begin{center}
\begin{minipage}[tl]{0.9\textwidth}
\begin{verbatim}
psb_i_t psb_c_<s,d,c,z>global_vec_write(vh,cdh);
\end{verbatim}
\end{minipage}
\end{center}
\fi
that produces exactly this result.
%%% Local Variables:
%%% mode: latex