mirror of
https://github.com/sfilippone/psblas3.git
synced 2026-10-21 05:12:13 +00:00
Merge branch 'remotebuild' into development
This commit is contained in:
+1
-1
@@ -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
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user