Specifications for A Team of AD Threads
Keywords: specifications team ad threads syntax purpose restrictions team_create team_work team_destroy team_name ok example use implementation speed test source

| Prev | Next |  |  |  |  |  |  |

Specifications for A Team of AD Threads
Syntax
`include "team_thread.hpp"
ok = team_create(num_threads)
ok = team_work(worker)
ok = team_destroy()
name = 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 | OpenMP Implementation of a Team of AD Threads
team_bthread.cpp | Boost Thread Implementation of a Team of AD Threads
team_pthread.cpp | Pthread Implementation of a Team of AD Threads

Speed Test of Implementation
Speed tests of using CppAD with the team implementations above can be found in:

harmonic.cpp | Multi-Threaded Implementation of Summation of 1/i
multi_newton.cpp | A Multi-Threaded Newton's Method

Source `

    # include <cstddef> // for size_t

    extern bool team_create(size_t num_threads);
    extern bool team_work(void worker(void));
    extern bool team_destroy(void);
    extern const char* team_name(void);

`

Input File: multi_thread/team_thread.hpp