1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML3.2 EN">
<HTML>
<HEAD> <link rel="canonical" href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PetscThreadComm/PetscThreadCommGetAffinities.html" />
<META NAME="GENERATOR" CONTENT="DOCTEXT">
<TITLE>PetscThreadCommGetAffinities</TITLE>
</HEAD>
<BODY BGCOLOR="FFFFFF">
<div id="version" align=right><b>petsc-3.4.2 2013-07-02</b></div>
<A NAME="PetscThreadCommGetAffinities"><H1>PetscThreadCommGetAffinities</H1></A>
Returns the core affinities set for the thread communicator associated with the <A HREF="../Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A>
<H3><FONT COLOR="#CC3333">Synopsis</FONT></H3>
<PRE>
#include "petscthreadcomm.h"
PetscErrorCode PetscThreadCommRegister(const char sname[],PetscErrorCode (*function)(PetscThreadComm))
</PRE>
Not collective
<P>
<H3><FONT COLOR="#CC3333">Input Parameters</FONT></H3>
<DT><B>comm </B> -MPI communicator
<br>
<P>
<H3><FONT COLOR="#CC3333">Output Parameters</FONT></H3>
<DT><B>affinities </B> -thread affinities
<br>
<P>
<P>
<H3><FONT COLOR="#CC3333">Notes</FONT></H3>
The user must allocate space (nthreads PetscInts) for the
affinities. Must call PetscThreadCommSetAffinities before.
<P>
*/
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> <A HREF="../PetscThreadComm/PetscThreadCommGetAffinities.html#PetscThreadCommGetAffinities">PetscThreadCommGetAffinities</A>(<A HREF="../Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> comm,<A HREF="../Sys/PetscInt.html#PetscInt">PetscInt</A> affinities[])
{
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> ierr;
PetscThreadComm tcomm=0;
<P>
<A HREF="../Sys/PetscFunctionBegin.html#PetscFunctionBegin">PetscFunctionBegin</A>;
ierr = <A HREF="../PetscThreadComm/PetscCommGetThreadComm.html#PetscCommGetThreadComm">PetscCommGetThreadComm</A>(comm,&tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
PetscValidIntPointer(affinities,2);
ierr = <A HREF="../Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(affinities,tcomm->affinities,tcomm->nworkThreads*sizeof(<A HREF="../Sys/PetscInt.html#PetscInt">PetscInt</A>));<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
<A HREF="../Sys/PetscFunctionReturn.html#PetscFunctionReturn">PetscFunctionReturn</A>(0);
}
<P>
#undef __FUNCT__
#define __FUNCT__ "PetscThreadCommSetType"
/*
PetscThreadCommSetType - Sets the threading model for the thread communicator
<P>
Logically collective
<P>
<H3><FONT COLOR="#CC3333">Input Parameters</FONT></H3>
<TABLE border="0" cellpadding="0" cellspacing="0">
<TR><TD WIDTH=40></TD><TD ALIGN=LEFT VALIGN=TOP><B>tcomm </B></TD><TD>- the thread communicator
</TD></TR>
<TR><TD WIDTH=40></TD><TD ALIGN=LEFT VALIGN=TOP><B>type </B></TD><TD>- the type of thread model needed
</TD></TR></TABLE>
<P>
<P>
<H3><FONT COLOR="#CC3333">Options Database keys</FONT></H3>
-threadcomm_type <type>
<P>
Available types
See "petsc/include/petscthreadcomm.h" for available types
<P>
*/
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> PetscThreadCommSetType(PetscThreadComm tcomm,PetscThreadCommType type)
{
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> ierr,(*r)(PetscThreadComm);
char ttype[256];
<A HREF="../Sys/PetscBool.html#PetscBool">PetscBool</A> flg;
<P>
<A HREF="../Sys/PetscFunctionBegin.html#PetscFunctionBegin">PetscFunctionBegin</A>;
PetscValidCharPointer(type,2);
if (!PetscThreadCommRegisterAllCalled) { ierr = <A HREF="../PetscThreadComm/PetscThreadCommRegisterAll.html#PetscThreadCommRegisterAll">PetscThreadCommRegisterAll</A>();<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);}
<P>
ierr = <A HREF="../Sys/PetscOptionsBegin.html#PetscOptionsBegin">PetscOptionsBegin</A>(<A HREF="../Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD">PETSC_COMM_WORLD</A>,NULL,"Thread comm - setting threading model",NULL);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
ierr = <A HREF="../Sys/PetscOptionsList.html#PetscOptionsList">PetscOptionsList</A>("-threadcomm_type","Thread communicator model","PetscThreadCommSetType",PetscThreadCommList,type,ttype,256,&flg);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
ierr = <A HREF="../Sys/PetscOptionsEnd.html#PetscOptionsEnd">PetscOptionsEnd</A>();<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
if (!flg) {
ierr = <A HREF="../Sys/PetscStrcpy.html#PetscStrcpy">PetscStrcpy</A>(ttype,type);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
}
ierr = <A HREF="../Sys/PetscFunctionListFind.html#PetscFunctionListFind">PetscFunctionListFind</A>(PetscThreadCommList,ttype,&r);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
if (!r) <A HREF="../Sys/SETERRQ1.html#SETERRQ1">SETERRQ1</A>(<A HREF="../Sys/PETSC_COMM_SELF.html#PETSC_COMM_SELF">PETSC_COMM_SELF</A>,PETSC_ERR_ARG_UNKNOWN_TYPE,"Unable to find requested PetscThreadComm type %s",ttype);
ierr = (*r)(tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
ierr = <A HREF="../Sys/PetscStrcmp.html#PetscStrcmp">PetscStrcmp</A>(NOTHREAD,tcomm->type,&tcomm->isnothread);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
<A HREF="../Sys/PetscFunctionReturn.html#PetscFunctionReturn">PetscFunctionReturn</A>(0);
}
<P>
#undef __FUNCT__
#define __FUNCT__ "PetscThreadCommBarrier"
/* PetscThreadCommBarrier - Apply a barrier on the thread communicator
associated with the MPI communicator
<P>
Not collective
<P>
<H3><FONT COLOR="#CC3333">Input Parameters</FONT></H3>
<DT><B>comm </B> -the MPI communicator
<br>
<P>
<P>
<H3><FONT COLOR="#CC3333">Notes</FONT></H3>
This routine provides an interface to put an explicit barrier between
successive kernel calls to ensure that the first kernel is executed
by all the threads before calling the next one.
<P>
Called by the main thread only.
<P>
May not be applicable to all types.
*/
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> PetscThreadCommBarrier(<A HREF="../Sys/MPI_Comm.html#MPI_Comm">MPI_Comm</A> comm)
{
<A HREF="../Sys/PetscErrorCode.html#PetscErrorCode">PetscErrorCode</A> ierr;
PetscThreadComm tcomm=0;
<P>
<A HREF="../Sys/PetscFunctionBegin.html#PetscFunctionBegin">PetscFunctionBegin</A>;
ierr = <A HREF="../Profiling/PetscLogEventBegin.html#PetscLogEventBegin">PetscLogEventBegin</A>(ThreadComm_Barrier,0,0,0,0);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
ierr = <A HREF="../PetscThreadComm/PetscCommGetThreadComm.html#PetscCommGetThreadComm">PetscCommGetThreadComm</A>(comm,&tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
if (tcomm->ops->barrier) {
ierr = (*tcomm->ops->barrier)(tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
}
ierr = <A HREF="../Profiling/PetscLogEventEnd.html#PetscLogEventEnd">PetscLogEventEnd</A>(ThreadComm_Barrier,0,0,0,0);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
<A HREF="../Sys/PetscFunctionReturn.html#PetscFunctionReturn">PetscFunctionReturn</A>(0);
}
<P>
#undef __FUNCT__
#define __FUNCT__ "PetscThreadCommRegister"
/*@C
PetscThreadCommRegister -
<P>
<P><B><P><B><FONT COLOR="#CC3333">Level:</FONT></B>developer
<BR><FONT COLOR="#CC3333">Location:</FONT></B><A HREF="../../../src/sys/threadcomm/interface/threadcomm.c.html#PetscThreadCommGetAffinities">src/sys/threadcomm/interface/threadcomm.c</A>
<BR><A HREF="./index.html">Index of all PetscThreadComm routines</A>
<BR><A HREF="../../index.html">Table of Contents for all manual pages</A>
<BR><A HREF="../singleindex.html">Index of all manual pages</A>
</BODY></HTML>
|