Skip to content
Snippets Groups Projects
Commit fe45e651 authored by Thomas Jahns's avatar Thomas Jahns :cartwheel:
Browse files

Add function to select first N ranks as I/O servers.

parent f7848266
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,26 @@
This appendix provide a brief listing of the C language bindings of the
CDI library routines:
\section*{\tt \htmlref{cdiPioCSRFirstN}{cdiPioCSRFirstN}}
\begin{verbatim}
int cdiPioCSRFirstN (MPI_Comm commSuper, int IOMode, int nProcsIO);
\end{verbatim}
return role codes appropriate to use the first
\textit{nProcsIO} tasks as I/O servers.
\section*{\tt \htmlref{cdiPioCSRLastN}{cdiPioCSRLastN}}
\begin{verbatim}
int cdiPioCSRLastN (MPI_Comm commSuper, int IOMode, int nProcsIO);
\end{verbatim}
return role codes appropriate to use the last
\textit{nProcsIO} tasks as I/O servers.
\section*{\tt \htmlref{cdiPioInit}{cdiPioInit}}
\begin{verbatim}
......
......@@ -4,6 +4,28 @@
This appendix provide a brief listing of the Fortran language bindings of the
CDI library routines:
\section*{\tt \htmlref{cdiPioCSRFirstN}{cdiPioCSRFirstN}}
\begin{verbatim}
INTEGER FUNCTION cdiPioCSRFirstN (INTEGER commSuper, INTEGER IOMode,
INTEGER nProcsIO)
\end{verbatim}
return role codes appropriate to use the first
\textit{nProcsIO} tasks as I/O servers.
\section*{\tt \htmlref{cdiPioCSRLastN}{cdiPioCSRLastN}}
\begin{verbatim}
INTEGER FUNCTION cdiPioCSRLastN (INTEGER commSuper, INTEGER IOMode,
INTEGER nProcsIO)
\end{verbatim}
return role codes appropriate to use the last
\textit{nProcsIO} tasks as I/O servers.
\section*{\tt \htmlref{cdiPioInit}{cdiPioInit}}
\begin{verbatim}
......
......@@ -54,7 +54,12 @@ void streamWriteScatteredVarPart(int streamID, int varID, const void *data,
int numBlocks, const int blocklengths[],
const int displacements[],
int nmiss, Xt_idxlist partDesc);
/* cdiPioCSRLastN: return role codes appropriate to use the last
\textit{nProcsIO} tasks as I/O servers */
int cdiPioCSRLastN(MPI_Comm commSuper, int IOMode, int nProcsIO);
/* cdiPioCSRFirstN: return role codes appropriate to use the first
\textit{nProcsIO} tasks as I/O servers */
int cdiPioCSRFirstN(MPI_Comm commSuper, int IOMode, int nProcsIO);
#endif
......@@ -94,3 +94,9 @@
! INTEGER nProcsIO)
EXTERNAL cdiPioCSRLastN
INTEGER cdiPioCSRFirstN
! (INTEGER commSuper,
! INTEGER IOMode,
! INTEGER nProcsIO)
EXTERNAL cdiPioCSRFirstN
......@@ -63,5 +63,12 @@ static int cdiPioCSRLastN_fwrap(int commSuper, int IOMode, int nProcsIO)
return v;
}
FCALLSCFUN3 (INT, cdiPioCSRLastN_fwrap, CDIPIOCSRLASTN, cdipiocsrlastn, INT, INT, INT)
static int cdiPioCSRFirstN_fwrap(int commSuper, int IOMode, int nProcsIO)
{
int v;
v = cdiPioCSRFirstN(MPI_Comm_f2c(commSuper), IOMode, nProcsIO);
return v;
}
FCALLSCFUN3 (INT, cdiPioCSRFirstN_fwrap, CDIPIOCSRFIRSTN, cdipiocsrfirstn, INT, INT, INT)
#endif
......@@ -7,8 +7,33 @@
#include "pio_util.h"
static int
cdiPioCSRSelectRange(MPI_Comm commSuper, int IOMode,
int clientRangeStart, int clientRangeEnd,
int specialRank);
int
cdiPioCSRLastN(MPI_Comm commSuper, int IOMode, int nProcsIO)
{
int commSize;
xmpi(MPI_Comm_size(commSuper, &commSize));
return cdiPioCSRSelectRange(commSuper, IOMode, 0, commSize - nProcsIO - 1,
commSize - 1);
}
int
cdiPioCSRFirstN(MPI_Comm commSuper, int IOMode, int nProcsIO)
{
int commSize;
xmpi(MPI_Comm_size(commSuper, &commSize));
return cdiPioCSRSelectRange(commSuper, IOMode, nProcsIO, commSize - 1,
nProcsIO - 1);
}
static int
cdiPioCSRSelectRange(MPI_Comm commSuper, int IOMode,
int clientRangeStart, int clientRangeEnd,
int specialRank)
{
int commRank, commSize;
xmpi(MPI_Comm_size(commSuper, &commSize));
......@@ -21,19 +46,19 @@ cdiPioCSRLastN(MPI_Comm commSuper, int IOMode, int nProcsIO)
role = PIO_NONE;
break;
case PIO_MPI:
role = (commRank < commSize - nProcsIO)
role = (commRank >= clientRangeStart && commRank <= clientRangeEnd)
? PIO_ROLE_CLIENT : PIO_ROLE_WRITER_COLLECTOR;
break;
case PIO_WRITER:
case PIO_ASYNCH:
role = (commRank < commSize - nProcsIO)
? PIO_ROLE_CLIENT : ((commRank == commSize - 1)
role = (commRank >= clientRangeStart && commRank <= clientRangeEnd)
? PIO_ROLE_CLIENT : ((commRank == specialRank)
? PIO_ROLE_WRITER
: PIO_ROLE_COLLECTOR);
break;
case PIO_FPGUARD:
role = (commRank < commSize - nProcsIO)
? PIO_ROLE_CLIENT : ((commRank == commSize - 1)
role = (commRank >= clientRangeStart && commRank <= clientRangeEnd)
? PIO_ROLE_CLIENT : ((commRank == specialRank)
? PIO_ROLE_FPGUARD
: PIO_ROLE_WRITER_COLLECTOR);
break;
......@@ -42,4 +67,3 @@ cdiPioCSRLastN(MPI_Comm commSuper, int IOMode, int nProcsIO)
}
return role;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment