Detailed Description
the interface functions for openmp
Definition in file tpi_openmp.c.
#include "tpi/tpi.h"
#include "blockmemshell/memory.h"
#include "scip/pub_message.h"
#include <omp.h>
Go to the source code of this file.
Data Structures | |
struct | SCIP_Lock |
struct | SCIP_Condition |
struct | SCIP_Job |
struct | SCIP_JobQueue |
struct | SCIP_JobQueues |
Macros | |
#define | SCIPompInitLock(lock) (omp_init_lock(lock), SCIP_OKAY) |
#define | SCIPompDestroyLock(lock) (omp_destroy_lock(lock)) |
#define | SCIPompAcquireLock(lock) (omp_set_lock(lock), SCIP_OKAY) |
#define | SCIPompReleaseLock(lock) (omp_unset_lock(lock), SCIP_OKAY) |
#define | SCIPompInitCondition(condition) |
#define | SCIPompDestroyCondition(condition) do { assert((condition)->_waiters == 0); assert((condition)->_waitnum == 0); assert((condition)->_signals == 0); omp_destroy_lock(&(condition)->_lock); } while(0) |
Typedefs | |
typedef struct SCIP_JobQueue | SCIP_JOBQUEUE |
typedef struct SCIP_JobQueues | SCIP_JOBQUEUES |
Macro Definition Documentation
◆ SCIPompInitLock
#define SCIPompInitLock | ( | lock | ) | (omp_init_lock(lock), SCIP_OKAY) |
Definition at line 43 of file tpi_openmp.c.
◆ SCIPompDestroyLock
#define SCIPompDestroyLock | ( | lock | ) | (omp_destroy_lock(lock)) |
Definition at line 44 of file tpi_openmp.c.
◆ SCIPompAcquireLock
#define SCIPompAcquireLock | ( | lock | ) | (omp_set_lock(lock), SCIP_OKAY) |
Definition at line 45 of file tpi_openmp.c.
◆ SCIPompReleaseLock
#define SCIPompReleaseLock | ( | lock | ) | (omp_unset_lock(lock), SCIP_OKAY) |
Definition at line 46 of file tpi_openmp.c.
◆ SCIPompInitCondition
#define SCIPompInitCondition | ( | condition | ) |
Definition at line 49 of file tpi_openmp.c.
◆ SCIPompDestroyCondition
#define SCIPompDestroyCondition | ( | condition | ) | do { assert((condition)->_waiters == 0); assert((condition)->_waitnum == 0); assert((condition)->_signals == 0); omp_destroy_lock(&(condition)->_lock); } while(0) |
Definition at line 51 of file tpi_openmp.c.
Typedef Documentation
◆ SCIP_JOBQUEUE
typedef struct SCIP_JobQueue SCIP_JOBQUEUE |
Definition at line 87 of file tpi_openmp.c.
◆ SCIP_JOBQUEUES
typedef struct SCIP_JobQueues SCIP_JOBQUEUES |
Definition at line 99 of file tpi_openmp.c.
Function Documentation
◆ createJobQueue()
|
static |
create job queue
- Parameters
-
nthreads the number of threads qsize the queue size blockwhenfull should the queue be blocked from new jobs when full
Definition at line 106 of file tpi_openmp.c.
References BMSallocMemory, SCIP_JobQueues::nthreads, SCIP_ALLOC, and SCIP_UNUSED.
◆ freeJobQueue()
|
static |
free job queue
Definition at line 143 of file tpi_openmp.c.
◆ executeJob()
|
static |
execute job
- Parameters
-
job the job to be executed in parallel
Definition at line 161 of file tpi_openmp.c.
References SCIP_CALL_ABORT, SCIPompAcquireLock, and SCIPtpiGetThreadNum().
◆ SCIPtpiWaitCondition()
SCIP_RETCODE SCIPtpiWaitCondition | ( | SCIP_CONDITION * | condition, |
SCIP_LOCK * | lock | ||
) |
wait for a condition
- Parameters
-
condition condition to wait for lock corresponding lock
Definition at line 199 of file tpi_openmp.c.
References SCIP_JobQueues::lock, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, SCIPompReleaseLock, SCIPtpiAcquireLock(), and SCIPtpiReleaseLock().
◆ SCIPompWaitCondition()
|
static |
wait for a condition (direct access to lock)
- Parameters
-
condition condition to wait for lock corresponding lock
Definition at line 238 of file tpi_openmp.c.
References SCIP_JobQueues::lock, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.
◆ jobQueueProcessJob()
|
static |
process jobs from job queue
The job will only be added when the number of active jobs is equal to the number of threads. As such, there will always be number of threads + 1 tasks available for the scheduler to run.
Definition at line 282 of file tpi_openmp.c.
References SCIP_CALL_ABORT, and SCIPompAcquireLock.
◆ jobQueueAddJob()
|
static |
adding a job to the job queue
This gives some more flexibility in the handling of new jobs. IMPORTANT: This function MUST be called from within a mutex.
Definition at line 329 of file tpi_openmp.c.
References SCIP_Job::nextjob, NULL, SCIP_CALL, and SCIPompAcquireLock.
◆ SCIPtpiSignalCondition()
SCIP_RETCODE SCIPtpiSignalCondition | ( | SCIP_CONDITION * | condition | ) |
signal a condition
- Parameters
-
condition condition to signal
Definition at line 381 of file tpi_openmp.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.
◆ SCIPtpiBroadcastCondition()
SCIP_RETCODE SCIPtpiBroadcastCondition | ( | SCIP_CONDITION * | condition | ) |
broadcase a condition
- Parameters
-
condition broadcast a condition
Definition at line 399 of file tpi_openmp.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.
◆ SCIPtpiGetNumThreads()
int SCIPtpiGetNumThreads | ( | void | ) |
returns the number of threads
Definition at line 415 of file tpi_openmp.c.
◆ SCIPtpiGetThreadNum()
int SCIPtpiGetThreadNum | ( | 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 429 of file tpi_openmp.c.
References BMSallocMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.
◆ SCIPtpiGetNewJobID()
int SCIPtpiGetNewJobID | ( | void | ) |
get a new job id for the new set of submitted jobs
Definition at line 447 of file tpi_openmp.c.
◆ SCIPtpiSubmitJob()
SCIP_RETCODE SCIPtpiSubmitJob | ( | SCIP_JOB * | job, |
SCIP_SUBMITSTATUS * | status | ||
) |
submit a job for parallel processing; the return value is a globally defined status
- Parameters
-
job pointer to the job to be submitted status pointer to store the submit status
Definition at line 461 of file tpi_openmp.c.
◆ isJobRunning()
|
static |
check whether a job is running
- Parameters
-
jobid job id to check
Definition at line 477 of file tpi_openmp.c.
◆ isJobWaiting()
|
static |
check whether a job is waiting
- Parameters
-
jobid job id to check
Definition at line 498 of file tpi_openmp.c.
◆ 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
- Parameters
-
jobid the jobid of the jobs to wait for
Definition at line 526 of file tpi_openmp.c.
References SCIP_CALL, SCIP_OKAY, and SCIPompAcquireLock.
◆ 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 595 of file tpi_openmp.c.
References SCIP_JobQueues::nthreads.
◆ SCIPtpiExit()
SCIP_RETCODE SCIPtpiExit | ( | void | ) |
deinitializes tpi
Definition at line 610 of file tpi_openmp.c.
◆ SCIPtpiInitLock()
SCIP_RETCODE SCIPtpiInitLock | ( | SCIP_LOCK ** | lock | ) |
initializes the given lock
- Parameters
-
lock the lock
Definition at line 630 of file tpi_openmp.c.
References BMSallocMemory, SCIP_JobQueues::lock, NULL, SCIP_ALLOC, and SCIP_OKAY.
◆ SCIPtpiDestroyLock()
void SCIPtpiDestroyLock | ( | SCIP_LOCK ** | lock | ) |
destroys the given lock
- Parameters
-
lock the lock
Definition at line 642 of file tpi_openmp.c.
References BMSfreeMemory, SCIP_JobQueues::lock, and NULL.
◆ SCIPtpiAcquireLock()
SCIP_RETCODE SCIPtpiAcquireLock | ( | SCIP_LOCK * | lock | ) |
acquires the given lock
- Parameters
-
lock the lock
Definition at line 653 of file tpi_openmp.c.
References SCIP_JobQueues::lock, and SCIP_OKAY.
Referenced by SCIPtpiWaitCondition().
◆ SCIPtpiReleaseLock()
SCIP_RETCODE SCIPtpiReleaseLock | ( | SCIP_LOCK * | lock | ) |
releases the given lock
- Parameters
-
lock the lock
Definition at line 662 of file tpi_openmp.c.
References SCIP_JobQueues::lock, and SCIP_OKAY.
Referenced by SCIPtpiWaitCondition().
◆ SCIPtpiInitCondition()
SCIP_RETCODE SCIPtpiInitCondition | ( | SCIP_CONDITION ** | condition | ) |
initializes the given condition variable
- Parameters
-
condition condition to be created and initialized
Definition at line 676 of file tpi_openmp.c.
References BMSallocMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.
◆ SCIPtpiDestroyCondition()
void SCIPtpiDestroyCondition | ( | SCIP_CONDITION ** | condition | ) |
destroys the given condition variable
- Parameters
-
condition condition to be destroyed and freed
Definition at line 693 of file tpi_openmp.c.
References BMSfreeMemory.