SCIP Doxygen Documentation
 
Loading...
Searching...
No Matches
tpi_openmp.c File Reference

Detailed Description

the interface functions for openmp

Author
Stephen J. Maher
Leona Gottwald
Marc Pfetsch

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)
 
#define SCIPompDestroyLock(lock)
 
#define SCIPompAcquireLock(lock)
 
#define SCIPompReleaseLock(lock)
 
#define SCIPompInitCondition(condition)
 
#define SCIPompDestroyCondition(condition)
 

Functions

static SCIP_RETCODE createJobQueue (int nthreads, int qsize, SCIP_Bool blockwhenfull)
 
static SCIP_RETCODE freeJobQueue (void)
 
static void executeJob (SCIP_JOB *job)
 
SCIP_RETCODE SCIPtpiWaitCondition (SCIP_CONDITION *condition, SCIP_LOCK *lock)
 
static SCIP_RETCODE SCIPompWaitCondition (SCIP_CONDITION *condition, omp_lock_t *lock)
 
static void jobQueueProcessJob (void)
 
static SCIP_RETCODE jobQueueAddJob (SCIP_JOB *newjob)
 
SCIP_RETCODE SCIPtpiSignalCondition (SCIP_CONDITION *condition)
 
SCIP_RETCODE SCIPtpiBroadcastCondition (SCIP_CONDITION *condition)
 
int SCIPtpiGetNumThreads ()
 
int SCIPtpiGetThreadNum ()
 
SCIP_RETCODE SCIPtpiCreateJob (SCIP_JOB **job, int jobid, SCIP_RETCODE(*jobfunc)(void *args), void *jobarg)
 
int SCIPtpiGetNewJobID (void)
 
SCIP_RETCODE SCIPtpiSubmitJob (SCIP_JOB *job, SCIP_SUBMITSTATUS *status)
 
static SCIP_Bool isJobRunning (int jobid)
 
static SCIP_Bool isJobWaiting (int jobid)
 
SCIP_RETCODE SCIPtpiCollectJobs (int jobid)
 
SCIP_RETCODE SCIPtpiInit (int nthreads, int queuesize, SCIP_Bool blockwhenfull)
 
SCIP_RETCODE SCIPtpiExit (void)
 
SCIP_RETCODE SCIPtpiInitLock (SCIP_LOCK **lock)
 
void SCIPtpiDestroyLock (SCIP_LOCK **lock)
 
SCIP_RETCODE SCIPtpiAcquireLock (SCIP_LOCK *lock)
 
SCIP_RETCODE SCIPtpiReleaseLock (SCIP_LOCK *lock)
 
SCIP_RETCODE SCIPtpiInitCondition (SCIP_CONDITION **condition)
 
void SCIPtpiDestroyCondition (SCIP_CONDITION **condition)
 
SCIP_Bool SCIPtpiIsAvailable (void)
 
void SCIPtpiGetLibraryName (char *name, int namesize)
 
void SCIPtpiGetLibraryDesc (char *desc, int descsize)
 

Macro Definition Documentation

◆ SCIPompInitLock

#define SCIPompInitLock ( lock)
Value:
(omp_init_lock(lock), SCIP_OKAY)
return SCIP_OKAY

Definition at line 44 of file tpi_openmp.c.

Referenced by createJobQueue().

◆ SCIPompDestroyLock

#define SCIPompDestroyLock ( lock)
Value:
(omp_destroy_lock(lock))

Definition at line 45 of file tpi_openmp.c.

Referenced by freeJobQueue().

◆ SCIPompAcquireLock

#define SCIPompAcquireLock ( lock)

◆ SCIPompReleaseLock

#define SCIPompReleaseLock ( lock)

◆ SCIPompInitCondition

#define SCIPompInitCondition ( condition)
Value:
( omp_init_lock(&(condition)->_lock), \
(condition)->_waiters = 0, (condition)->_waitnum = 0, (condition)->_signals = 0, SCIP_OKAY )

Definition at line 50 of file tpi_openmp.c.

Referenced by createJobQueue().

◆ SCIPompDestroyCondition

#define SCIPompDestroyCondition ( condition)
Value:
do { assert((condition)->_waiters == 0); assert((condition)->_waitnum == 0); assert((condition)->_signals == 0); omp_destroy_lock(&(condition)->_lock); } while(0)
assert(minobj< SCIPgetCutoffbound(scip))

Definition at line 52 of file tpi_openmp.c.

Referenced by freeJobQueue().

Typedef Documentation

◆ SCIP_JOBQUEUE

typedef struct SCIP_JobQueue SCIP_JOBQUEUE

Definition at line 88 of file tpi_openmp.c.

◆ SCIP_JOBQUEUES

Definition at line 100 of file tpi_openmp.c.

Function Documentation

◆ createJobQueue()

static SCIP_RETCODE createJobQueue ( int nthreads,
int qsize,
SCIP_Bool blockwhenfull )
static

create job queue

Parameters
nthreadsthe number of threads
qsizethe queue size
blockwhenfullshould the queue be blocked from new jobs when full

Definition at line 107 of file tpi_openmp.c.

References assert(), BMSallocMemory, BMSallocMemoryArray, i, SCIP_JobQueues::nthreads, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_UNUSED, SCIPompInitCondition, and SCIPompInitLock.

Referenced by SCIPtpiInit().

◆ freeJobQueue()

static SCIP_RETCODE freeJobQueue ( void )
static

free job queue

Definition at line 144 of file tpi_openmp.c.

References assert(), BMSfreeMemory, BMSfreeMemoryArray, NULL, SCIP_OKAY, SCIPompDestroyCondition, and SCIPompDestroyLock.

Referenced by freeThreadPool(), and SCIPtpiExit().

◆ executeJob()

static void executeJob ( SCIP_JOB * job)
static

execute job

Parameters
jobthe job to be executed in parallel

Definition at line 162 of file tpi_openmp.c.

References SCIP_Job::args, SCIP_Job::jobfunc, NULL, SCIP_Job::retcode, SCIP_CALL_ABORT, SCIPompAcquireLock, SCIPompReleaseLock, SCIPtpiBroadcastCondition(), and SCIPtpiGetThreadNum().

Referenced by jobQueueAddJob(), and jobQueueProcessJob().

◆ SCIPtpiWaitCondition()

SCIP_RETCODE SCIPtpiWaitCondition ( SCIP_CONDITION * condition,
SCIP_LOCK * lock )

wait for a condition

Parameters
conditioncondition to wait for
lockcorresponding 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 SCIP_RETCODE SCIPompWaitCondition ( SCIP_CONDITION * condition,
omp_lock_t * lock )
static

wait for a condition (direct access to lock)

Parameters
conditioncondition to wait for
lockcorresponding lock

Definition at line 239 of file tpi_openmp.c.

References SCIP_JobQueues::lock, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.

Referenced by jobQueueProcessJob(), and SCIPtpiCollectJobs().

◆ jobQueueProcessJob()

static void jobQueueProcessJob ( void )
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 executeJob(), SCIP_Job::nextjob, NULL, SCIP_CALL_ABORT, SCIPompAcquireLock, SCIPompReleaseLock, SCIPompWaitCondition(), and SCIPtpiGetNumThreads().

Referenced by jobQueueAddJob().

◆ jobQueueAddJob()

static SCIP_RETCODE jobQueueAddJob ( SCIP_JOB * newjob)
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 assert(), executeJob(), jobQueueProcessJob(), SCIP_Job::nextjob, NULL, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, SCIPompReleaseLock, and SCIPtpiGetNumThreads().

Referenced by SCIPtpiSubmitJob().

◆ SCIPtpiSignalCondition()

SCIP_RETCODE SCIPtpiSignalCondition ( SCIP_CONDITION * condition)

signal a condition

Parameters
conditioncondition to signal

Definition at line 382 of file tpi_openmp.c.

References assert(), NULL, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.

◆ SCIPtpiBroadcastCondition()

SCIP_RETCODE SCIPtpiBroadcastCondition ( SCIP_CONDITION * condition)

broadcase a condition

Parameters
conditionbroadcast a condition

Definition at line 400 of file tpi_openmp.c.

References assert(), NULL, SCIP_CALL, SCIP_OKAY, SCIPompAcquireLock, and SCIPompReleaseLock.

Referenced by executeJob().

◆ SCIPtpiGetNumThreads()

int SCIPtpiGetNumThreads ( void )

returns the number of threads

Definition at line 416 of file tpi_openmp.c.

◆ SCIPtpiGetThreadNum()

int SCIPtpiGetThreadNum ( void )

returns the thread number

Definition at line 423 of file tpi_openmp.c.

Referenced by executeJob().

◆ SCIPtpiCreateJob()

SCIP_RETCODE SCIPtpiCreateJob ( SCIP_JOB ** job,
int jobid,
SCIP_RETCODE(* jobfunc )(void *args),
void * jobarg )

creates a job for parallel processing

Parameters
jobpointer to the job that will be created
jobidthe id for the current job
jobfuncpointer to the job function
jobargthe 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
jobpointer to the job to be submitted
statuspointer to store the submit status

Definition at line 462 of file tpi_openmp.c.

References assert(), jobQueueAddJob(), NULL, SCIP_CALL, SCIP_OKAY, and SCIP_SUBMIT_SUCCESS.

◆ isJobRunning()

static SCIP_Bool isJobRunning ( int jobid)
static

check whether a job is running

Parameters
jobidjob id to check

Definition at line 478 of file tpi_openmp.c.

References FALSE, i, NULL, SCIP_Bool, and TRUE.

Referenced by SCIPtpiCollectJobs().

◆ isJobWaiting()

static SCIP_Bool isJobWaiting ( int jobid)
static

check whether a job is waiting

Parameters
jobidjob id to check

Definition at line 499 of file tpi_openmp.c.

References FALSE, SCIP_Job::jobid, SCIP_Job::nextjob, SCIP_Bool, and TRUE.

Referenced by SCIPtpiCollectJobs().

◆ 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
jobidthe jobid of the jobs to wait for

Definition at line 527 of file tpi_openmp.c.

References BMSfreeMemory, isJobRunning(), isJobWaiting(), SCIP_Job::jobid, MIN, SCIP_Job::nextjob, NULL, SCIP_Job::retcode, SCIP_CALL, SCIP_CALL_ABORT, SCIP_ERROR, SCIP_OKAY, SCIPompAcquireLock, SCIPompReleaseLock, and SCIPompWaitCondition().

◆ SCIPtpiInit()

SCIP_RETCODE SCIPtpiInit ( int nthreads,
int queuesize,
SCIP_Bool blockwhenfull )

initializes tpi

Parameters
nthreadsthe number of threads to be used
queuesizethe size of the queue
blockwhenfullshould the queue block when full

Definition at line 596 of file tpi_openmp.c.

References assert(), createJobQueue(), SCIP_JobQueues::nthreads, NULL, SCIP_Bool, SCIP_CALL, and SCIP_OKAY.

◆ SCIPtpiExit()

SCIP_RETCODE SCIPtpiExit ( void )

deinitializes tpi

Definition at line 611 of file tpi_openmp.c.

References assert(), freeJobQueue(), NULL, SCIP_CALL, and SCIP_OKAY.

◆ SCIPtpiInitLock()

SCIP_RETCODE SCIPtpiInitLock ( SCIP_LOCK ** lock)

initializes the given lock

Parameters
lockthe lock

Definition at line 631 of file tpi_openmp.c.

References assert(), BMSallocMemory, SCIP_JobQueues::lock, NULL, SCIP_ALLOC, and SCIP_OKAY.

◆ SCIPtpiDestroyLock()

void SCIPtpiDestroyLock ( SCIP_LOCK ** lock)

destroys the given lock

Parameters
lockthe lock

Definition at line 643 of file tpi_openmp.c.

References assert(), BMSfreeMemory, SCIP_JobQueues::lock, and NULL.

◆ SCIPtpiAcquireLock()

SCIP_RETCODE SCIPtpiAcquireLock ( SCIP_LOCK * lock)

acquires the given lock

Parameters
lockthe 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
lockthe 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
conditioncondition to be created and initialized

Definition at line 677 of file tpi_openmp.c.

References assert(), BMSallocMemory, NULL, SCIP_ALLOC, and SCIP_OKAY.

◆ SCIPtpiDestroyCondition()

void SCIPtpiDestroyCondition ( SCIP_CONDITION ** condition)

destroys the given condition variable

Parameters
conditioncondition to be destroyed and freed

Definition at line 694 of file tpi_openmp.c.

References assert(), and BMSfreeMemory.

◆ SCIPtpiIsAvailable()

SCIP_Bool SCIPtpiIsAvailable ( void )

indicate whether a working TPI is available

Definition at line 708 of file tpi_openmp.c.

References SCIP_Bool, and TRUE.

◆ SCIPtpiGetLibraryName()

void SCIPtpiGetLibraryName ( char * name,
int namesize )

get name of library that the TPI interfaces to

Parameters
namebuffer to store name
namesizelength of name buffer

Definition at line 714 of file tpi_openmp.c.

References assert(), NULL, and SCIPsnprintf().

◆ SCIPtpiGetLibraryDesc()

void SCIPtpiGetLibraryDesc ( char * desc,
int descsize )

get description of library that the TPI interfaces to

Parameters
descbuffer to store description
descsizelength of description

Definition at line 725 of file tpi_openmp.c.

References assert(), NULL, and SCIPsnprintf().