\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
team_thread.hpp¶
Specifications for A Team of AD Threads¶
Syntax¶
include "team_thread.hpp"team_create ( num_threads )team_work ( worker )team_destroy ()team_name ()Purpose¶
These routines start, use, and stop a team of threads that can
be used with the CppAD type AD<double> .
For example,
these could be OpenMP threads, pthreads, or Boost threads to name a few.
Restrictions¶
Calls to the routines
team_create ,
team_work , and
team_destroy , must all be done by the master thread; i.e.,
thread_num must be zero.
In addition, they must all be done in sequential execution mode; i.e.,
when the master thread is the only thread that is running
(in_parallel must be false).
team_create¶
The argument
num_threads > 0 has type size_t
and specifies the number of threads in this team.
This initializes both AD<double> and team_work
to be used with num_threads .
If num_threads > 1 ,
num_threads - 1 new threads are created
and put in a waiting state until team_work is called.
team_work¶
This routine may be called one or more times
between the call to team_create and team_destroy .
The argument worker has type
bool worker ( void ) .
Each call to team_work runs num_threads versions
of worker with the corresponding value of
thread_num
between zero and num_threads - 1 and
different for each thread,
team_destroy¶
This routine terminates all the other threads except for thread number zero; i.e., it terminates the threads corresponding to
thread_num = 1 , … , num_threads
-1
team_name¶
This routines returns a name that identifies this thread_team. The return value has prototype
const char* name
and is a statically allocated '\0' terminated C string.
ok¶
The return value ok has type bool .
It is false if an error is detected during the
corresponding call.
Otherwise it is true .
Example Use¶
Example use of these specifications can be found in the file team_example.cpp .
Example Implementation¶
Example implementations of these specifications can be found in the files:
team_openmp.cpp |
|
team_bthread.cpp |
|
team_pthread.cpp |
Speed Test of Implementation¶
Speed tests of using CppAD with the team implementations above can be found in:
harmonic.cpp |
|
multi_newton.cpp |