Detailed Description
a TPI implementation using tinycthreads
Definition in file tpi_tnycthrd.c.
Go to the source code of this file.
Data Structures | |
struct | SCIP_Job |
struct | SCIP_JobQueue |
struct | SCIP_ThreadPool |
Typedefs | |
typedef struct SCIP_ThreadPool | SCIP_THREADPOOL |
typedef struct SCIP_JobQueue | SCIP_JOBQUEUE |
Typedef Documentation
◆ SCIP_THREADPOOL
typedef struct SCIP_ThreadPool SCIP_THREADPOOL |
Definition at line 28 of file tpi_tnycthrd.c.
◆ SCIP_JOBQUEUE
typedef struct SCIP_JobQueue SCIP_JOBQUEUE |
Definition at line 49 of file tpi_tnycthrd.c.
Function Documentation
◆ threadPoolThreadRetcode()
|
static |
this function controls the execution of each of the threads
- Parameters
-
threadnum thread number is passed in as argument stored inside a void pointer
Definition at line 82 of file tpi_tnycthrd.c.
Referenced by threadPoolThread().
◆ threadPoolThread()
|
static |
this function controls the execution of each of the threads
- Parameters
-
threadnum thread number is passed in as argument stored inside a void pointer
Definition at line 209 of file tpi_tnycthrd.c.
References threadPoolThreadRetcode().
Referenced by createThreadPool().
◆ createThreadPool()
|
static |
creates a threadpool
- Parameters
-
thrdpool pointer to store threadpool nthreads number of threads in the threadpool qsize maximum size of the jobqueue blockwhenfull should the jobqueue block if it is full
Definition at line 218 of file tpi_tnycthrd.c.
References BMSallocMemory, BMSallocMemoryArray, FALSE, NULL, SCIP_ALLOC, SCIP_CALL, SCIP_ERROR, SCIPtpiInitCondition(), SCIPtpiInitLock(), threadPoolThread(), and TRUE.
◆ jobQueueAddJob()
|
static |
adding a job to the job queue. This gives some more flexibility in the handling of new jobs. This function needs to be called from within a mutex.
Definition at line 292 of file tpi_tnycthrd.c.
References SCIP_JobQueue::firstjob, SCIP_ThreadPool::jobqueue, SCIP_JobQueue::lastjob, SCIP_Job::nextjob, SCIP_JobQueue::njobs, NULL, SCIP_ThreadPool::queuenotempty, SCIP_ThreadPool::queuesize, SCIP_CALL_ABORT, and SCIPtpiSignalCondition().
◆ threadPoolAddWork()
|
static |
adds a job to the threadpool
- Parameters
-
newjob job to add to threadpool status pointer to store the job's submit status
Definition at line 324 of file tpi_tnycthrd.c.
References NULL.
◆ freeJobQueue()
|
static |
frees the jobqueue of the threadpool
Definition at line 381 of file tpi_tnycthrd.c.
References BMSfreeMemory, SCIP_JobQueue::firstjob, SCIP_ThreadPool::jobqueue, SCIP_JobQueue::lastjob, SCIP_Job::nextjob, NULL, SCIP_ThreadPool::queueopen, and SCIP_ThreadPool::shutdown.
Referenced by freeThreadPool().
◆ freeThreadPool()
|
static |
Definition at line 408 of file tpi_tnycthrd.c.
References BMSfreeMemory, BMSfreeMemoryArray, FALSE, freeJobQueue(), MIN, SCIP_Job::retcode, SCIP_CALL, SCIP_ERROR, SCIP_OKAY, SCIP_UNUSED, SCIPtpiAcquireLock(), SCIPtpiBroadcastCondition(), SCIPtpiDestroyCondition(), SCIPtpiDestroyLock(), SCIPtpiReleaseLock(), SCIPtpiWaitCondition(), and TRUE.
◆ checkJobQueue()
|
static |
Definition at line 494 of file tpi_tnycthrd.c.
References SCIP_JobQueue::firstjob, SCIP_Job::jobid, SCIP_JobQueue::lastjob, SCIP_Job::nextjob, NULL, SCIP_JOB_DOESNOTEXIST, and SCIP_JOB_INQUEUE.
Referenced by isJobRunning().
◆ isJobRunning()
|
static |
Definition at line 523 of file tpi_tnycthrd.c.
References checkJobQueue(), FALSE, SCIP_JOB_INQUEUE, and TRUE.
◆ SCIPtpiGetNumThreads()
int SCIPtpiGetNumThreads | ( | void | ) |
returns the number of threads
Definition at line 535 of file tpi_tnycthrd.c.
◆ SCIPtpiInit()
SCIP_RETCODE SCIPtpiInit | ( | int | nthreads, |
int | queuesize, | ||
SCIP_Bool | blockwhenfull | ||
) |
initializes tpi
- Parameters
-
nthreads the number of threads to be used queuesize the size of the queue blockwhenfull should the queue block when full
Definition at line 543 of file tpi_tnycthrd.c.
Referenced by SCIPsyncstoreInit().
◆ SCIPtpiExit()
SCIP_RETCODE SCIPtpiExit | ( | void | ) |
◆ SCIPtpiCreateJob()
SCIP_RETCODE SCIPtpiCreateJob | ( | SCIP_JOB ** | job, |
int | jobid, | ||
SCIP_RETCODE(*)(void *args) | jobfunc, | ||
void * | jobarg | ||
) |
creates a job for parallel processing
- Parameters
-
job pointer to the job that will be created jobid the id for the current job jobfunc pointer to the job function jobarg the job's argument
Definition at line 568 of file tpi_tnycthrd.c.
References BMSallocMemory, SCIP_Job::jobfunc, SCIP_Job::jobid, NULL, SCIP_ALLOC, and SCIP_OKAY.
Referenced by SCIPconcurrentSolve().
◆ SCIPtpiGetNewJobID()
int SCIPtpiGetNewJobID | ( | void | ) |
get a new job id for the new set of submitted jobs
Definition at line 586 of file tpi_tnycthrd.c.
Referenced by SCIPconcurrentSolve().
◆ SCIPtpiSumbitJob()
SCIP_RETCODE SCIPtpiSumbitJob | ( | SCIP_JOB * | job, |
SCIP_SUBMITSTATUS * | status | ||
) |
submit a job for parallel processing the return is a globally defined status
- Parameters
-
job pointer to the job to be submitted status pointer to store the job's submit status
Definition at line 602 of file tpi_tnycthrd.c.
References SCIP_Job::jobid, and NULL.
Referenced by SCIPconcurrentSolve().
◆ SCIPtpiCollectJobs()
SCIP_RETCODE SCIPtpiCollectJobs | ( | int | jobid | ) |
blocks until all jobs of the given jobid have finished and then returns the smallest SCIP_RETCODE of all the jobs
if the job has the right jobid collect its retcode, remove it from the finished job list, and free it
- Parameters
-
jobid the jobid of the jobs to wait for
Definition at line 621 of file tpi_tnycthrd.c.
References SCIP_Job::retcode, SCIP_CALL, and SCIPtpiAcquireLock().
Referenced by SCIPconcurrentSolve().