File: PetscThreadCommGetAffinities.html

package info (click to toggle)
petsc 3.4.2.dfsg1-8.1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 129,104 kB
  • ctags: 516,422
  • sloc: ansic: 395,939; cpp: 47,201; python: 34,788; makefile: 17,193; fortran: 16,251; f90: 1,592; objc: 954; sh: 822; xml: 621; java: 381; lisp: 293; csh: 241
file content (138 lines) | stat: -rw-r--r-- 7,529 bytes parent folder | download
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,&amp;tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
PetscValidIntPointer(affinities,2);
ierr = <A HREF="../Sys/PetscMemcpy.html#PetscMemcpy">PetscMemcpy</A>(affinities,tcomm-&gt;affinities,tcomm-&gt;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 &lt;type&gt;
<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,&amp;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,&amp;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-&gt;type,&amp;tcomm-&gt;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,&amp;tcomm);<A HREF="../Sys/CHKERRQ.html#CHKERRQ">CHKERRQ</A>(ierr);
if (tcomm-&gt;ops-&gt;barrier) {
ierr = (*tcomm-&gt;ops-&gt;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>