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 "scip/pub_misc.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 44 of file tpi_openmp.c.
◆ SCIPompDestroyLock
#define SCIPompDestroyLock | ( | lock | ) | (omp_destroy_lock(lock)) |
Definition at line 45 of file tpi_openmp.c.
◆ SCIPompAcquireLock
#define SCIPompAcquireLock | ( | lock | ) | (omp_set_lock(lock), SCIP_OKAY) |
Definition at line 46 of file tpi_openmp.c.
◆ SCIPompReleaseLock
#define SCIPompReleaseLock | ( | lock | ) | (omp_unset_lock(lock), SCIP_OKAY) |
Definition at line 47 of file tpi_openmp.c.
◆ SCIPompInitCondition
#define SCIPompInitCondition | ( | condition | ) |
Definition at line 50 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 52 of file tpi_openmp.c.
Typedef Documentation
◆ SCIP_JOBQUEUE
typedef struct SCIP_JobQueue SCIP_JOBQUEUE |
Definition at line 88 of file tpi_openmp.c.
◆ SCIP_JOBQUEUES
typedef struct SCIP_JobQueues SCIP_JOBQUEUES |
Definition at line 100 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 107 of file tpi_openmp.c.
References BMSallocMemory, SCIP_JobQueues::nthreads, SCIP_ALLOC, and SCIP_UNUSED.
◆ freeJobQueue()
|
static |
free job queue
Definition at line 144 of file tpi_openmp.c.
◆ executeJob()
|
static |
execute job
- Parameters
-
job the job to be executed in parallel
Definition at line 162 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 200 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 239 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 283 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 330 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 382 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 400 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 416 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 430 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 448 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 462 of file tpi_openmp.c.
◆ isJobRunning()
|
static |
check whether a job is running
- Parameters
-
jobid job id to check
Definition at line 478 of file tpi_openmp.c.
◆ isJobWaiting()
|
static |
check whether a job is waiting
- Parameters
-
jobid job id to check
Definition at line 499 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 527 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 596 of file tpi_openmp.c.
References SCIP_JobQueues::nthreads.
◆ SCIPtpiExit()
SCIP_RETCODE SCIPtpiExit | ( | void | ) |
deinitializes tpi
Definition at line 611 of file tpi_openmp.c.
◆ SCIPtpiInitLock()
SCIP_RETCODE SCIPtpiInitLock | ( | SCIP_LOCK ** | lock | ) |
initializes the given lock
- Parameters
-
lock the lock
Definition at line 631 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 643 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 654 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 663 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 677 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 694 of file tpi_openmp.c.
References BMSfreeMemory.
◆ SCIPtpiIsAvailable()
SCIP_Bool SCIPtpiIsAvailable | ( | void | ) |
indicate whether a working TPI is available
Definition at line 708 of file tpi_openmp.c.
References TRUE.
◆ SCIPtpiGetLibraryName()
void SCIPtpiGetLibraryName | ( | char * | name, |
int | namesize | ||
) |
get name of library that the TPI interfaces to
- Parameters
-
name buffer to store name namesize length of name buffer
Definition at line 714 of file tpi_openmp.c.
References NULL, and SCIPsnprintf().
◆ SCIPtpiGetLibraryDesc()
void SCIPtpiGetLibraryDesc | ( | char * | desc, |
int | descsize | ||
) |
get description of library that the TPI interfaces to
- Parameters
-
desc buffer to store description descsize length of description
Definition at line 725 of file tpi_openmp.c.
References NULL, and SCIPsnprintf().