2 * (maxnsyncdelay + 1);
71assert(syncstore !=
NULL);
78(*syncstore)->initialized =
FALSE;
79(*syncstore)->syncdata =
NULL;
80(*syncstore)->stopped =
FALSE;
81(*syncstore)->nuses = 1;
95assert(syncstore !=
NULL);
96 if( *syncstore ==
NULL)
100(*syncstore)->nuses -= 1;
101references = (*syncstore)->nuses;
104 if( references == 0 )
106 if( (*syncstore)->initialized )
111assert(!(*syncstore)->initialized);
130++(syncstore->
nuses);
149assert(syncstore !=
NULL);
165 for( i = 0; i < syncstore->
nsyncdata; ++i )
167syncstore->
syncdata[i].syncnum = -1;
173 for( j = 0; j < syncstore->
maxnsols; ++j )
211assert(syncstore !=
NULL);
216 for( i = 0; i < syncstore->
nsyncdata; ++i )
224 for( j = 0; j < syncstore->
maxnsols; ++j )
249stopped = syncstore->
stopped;
276assert(syncstore !=
NULL);
287assert(syncstore !=
NULL);
298assert(syncstore !=
NULL);
309assert(syncstore !=
NULL);
320assert(syncstore !=
NULL);
331assert(syncstore !=
NULL);
348assert(syncstore !=
NULL);
351j = (int) syncnum % syncstore->
nsyncdata;
354assert(syncstore->
syncdata[j].syncnum == syncnum);
372assert(syncstore !=
NULL);
374assert(delay !=
NULL);
376 if( syncdata ==
NULL)
385nextsyncnum = syncdata->syncnum + 1;
388 if( nextsyncnum == writenum )
391newdelay = *delay - syncfreq;
398 if( newdelay < syncstore->minsyncdelay && nextsyncnum >= writenum - syncstore->
maxnsyncdelay)
402assert(syncstore->
syncdata[nextsyncnum % syncstore->
nsyncdata].syncnum == nextsyncnum);
414assert(syncdata !=
NULL);
415assert(syncstore !=
NULL);
421 while( syncdata->syncedcount < syncstore->
nsolvers)
447assert(syncdata !=
NULL);
448assert(syncstore !=
NULL);
458*syncdata = &syncstore->
syncdata[i];
459assert(*syncdata !=
NULL);
463 if( (*syncdata)->syncnum != syncnum )
466(*syncdata)->nsols = 0;
468(*syncdata)->syncedcount = 0;
470(*syncdata)->bestlowerbound = -(*syncdata)->bestupperbound;
472(*syncdata)->winner = 0;
473(*syncdata)->syncnum = syncnum;
474(*syncdata)->syncfreq = 0.0;
488assert(syncdata !=
NULL);
489assert((*syncdata) !=
NULL);
490assert(syncstore !=
NULL);
493++(*syncdata)->syncedcount;
495 if( (*syncdata)->syncedcount == syncstore->
nsolvers)
525assert(syncdata !=
NULL);
527 returnsyncdata->status;
535assert(syncstore !=
NULL);
541 returnsyncstore->
lastsync->winner;
549assert(syncdata !=
NULL);
551 returnsyncdata->syncedcount;
559assert(syncstore !=
NULL);
570assert(syncdata !=
NULL);
572 returnsyncdata->memtotal;
580assert(syncdata !=
NULL);
582 returnsyncdata->syncfreq;
590assert(syncdata !=
NULL);
592 returnsyncdata->bestupperbound;
600assert(syncdata !=
NULL);
602 returnsyncdata->bestlowerbound;
613assert(syncdata !=
NULL);
614assert(solvalues !=
NULL);
615assert(solowner !=
NULL);
616assert(nsols !=
NULL);
618*solvalues = syncdata->sols;
619*solowner = syncdata->solsource;
620*nsols = syncdata->nsols;
628assert(syncdata !=
NULL);
630 returnsyncdata->boundstore;
640assert(syncstore !=
NULL);
642assert(syncdata !=
NULL);
654assert(syncdata !=
NULL);
662 if( status > syncdata->status || (status == syncdata->status && solverid < syncdata->winner) )
664syncdata->status = status;
665syncdata->winner = solverid;
670 if( status < syncdata->status || (status == syncdata->status && solverid < syncdata->winner) )
672syncdata->status = status;
673syncdata->winner = solverid;
676 else if( syncdata->winner < 0 )
678syncdata->status = status;
679syncdata->winner = solverid;
689assert(syncdata !=
NULL);
691syncdata->memtotal += memtotal;
700assert(syncdata !=
NULL);
702syncdata->bestupperbound =
MIN(syncdata->bestupperbound, upperbound);
711assert(syncdata !=
NULL);
713syncdata->bestlowerbound =
MAX(syncdata->bestlowerbound, lowerbound);
731assert(syncstore !=
NULL);
733assert(syncdata !=
NULL);
734assert(buffer !=
NULL);
736 for( pos = 0; pos < syncdata->nsols; ++pos )
738 if( syncdata->solobj[pos] < solobj || (syncdata->solobj[pos] == solobj && ownerid < syncdata->solsource[pos]) )
742 if( syncdata->nsols < syncstore->
maxnsols)
744 for( i = syncdata->nsols; i > pos; --i )
746syncdata->solobj[i] = syncdata->solobj[i - 1];
747syncdata->solsource[i] = syncdata->solsource[i - 1];
748 SCIPswapPointers((
void**) &syncdata->sols[i], (
void**) &syncdata->sols[i - 1]);
757 for( i = 0; i < pos; ++i )
759syncdata->solobj[i] = syncdata->solobj[i + 1];
760syncdata->solsource[i] = syncdata->solsource[i + 1];
761 SCIPswapPointers((
void**) &syncdata->sols[i], (
void**) &syncdata->sols[i + 1]);
767syncdata->solobj[pos] = solobj;
768syncdata->solsource[pos] = ownerid;
769*buffer = syncdata->sols[pos];
784assert(syncstore !=
NULL);
786assert(syncdata !=
NULL);
787assert(boundstore !=
NULL);
799assert(syncstore !=
NULL);
809assert(syncstore !=
NULL);
811 returnsyncstore->
mode;
SCIP_RETCODE SCIPboundstoreMerge(SCIP *scip, SCIP_BOUNDSTORE *target, SCIP_BOUNDSTORE *source)
void SCIPboundstoreFree(SCIP *scip, SCIP_BOUNDSTORE **boundstore)
SCIP_RETCODE SCIPboundstoreCreate(SCIP *scip, SCIP_BOUNDSTORE **boundstore, int nvars)
void SCIPboundstoreClear(SCIP_BOUNDSTORE *boundstore)
int SCIPboundstoreGetNChgs(SCIP_BOUNDSTORE *boundstore)
the interface of the boundstore structure
datastructures for concurrent solvers
SCIP_Real SCIPgetConcurrentDualbound(SCIP *scip)
SCIP_Real SCIPgetConcurrentPrimalbound(SCIP *scip)
int SCIPgetNConcurrentSolvers(SCIP *scip)
SCIP_Real SCIPgetConcurrentGap(SCIP *scip)
helper functions for concurrent scip solvers
common defines and data types used in all packages of SCIP
#define SCIP_CALL_ABORT(x)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value)
void SCIPswapPointers(void **pointer1, void **pointer2)
SCIP_RETCODE SCIPautoselectDisps(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
SCIP_Longint SCIPgetMemTotal(SCIP *scip)
SCIP_SYNCSTORE * SCIPgetSyncstore(SCIP *scip)
SCIP_RETCODE SCIPprintDisplayLine(SCIP *scip, FILE *file, SCIP_VERBLEVEL verblevel, SCIP_Bool endline)
SCIP_Longint SCIPgetNNZs(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSallocMemory(ptr)
internal methods for storing and manipulating the main problem
public methods for message output
datastructures for concurrent solvers
the struct definitions for the synchronization store
SCIP_Bool SCIPsyncstoreSolveIsStopped(SCIP_SYNCSTORE *syncstore)
SCIP_Real SCIPsyncdataGetSyncFreq(SCIP_SYNCDATA *syncdata)
SCIP_Longint SCIPsyncdataGetMemTotal(SCIP_SYNCDATA *syncdata)
SCIP_BOUNDSTORE * SCIPsyncdataGetBoundChgs(SCIP_SYNCDATA *syncdata)
SCIP_Real SCIPsyncstoreGetLastUpperbound(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreFinishSync(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA **syncdata)
SCIP_Real SCIPsyncstoreGetLastLowerbound(SCIP_SYNCSTORE *syncstore)
SCIP_Real SCIPsyncdataGetUpperbound(SCIP_SYNCDATA *syncdata)
void SCIPsyncdataSetUpperbound(SCIP_SYNCDATA *syncdata, SCIP_Real upperbound)
SCIP_RETCODE SCIPsyncdataAddBoundChanges(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_BOUNDSTORE *boundstore)
int SCIPsyncstoreGetWinner(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreEnsureAllSynced(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata)
void SCIPsyncdataSetSyncFreq(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real syncfreq)
SCIP_Real SCIPsyncstoreGetLastSyncfreq(SCIP_SYNCSTORE *syncstore)
void SCIPsyncdataGetSolutions(SCIP_SYNCDATA *syncdata, SCIP_Real ***solvalues, int **solowner, int *nsols)
void SCIPsyncdataSetStatus(SCIP_SYNCDATA *syncdata, SCIP_STATUS status, int solverid)
void SCIPsyncstoreSetSolveIsStopped(SCIP_SYNCSTORE *syncstore, SCIP_Bool stopped)
SCIP_RETCODE SCIPsyncstoreRelease(SCIP_SYNCSTORE **syncstore)
SCIP_Longint SCIPsyncstoreGetLastMemTotal(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreExit(SCIP_SYNCSTORE *syncstore)
void SCIPsyncdataSetLowerbound(SCIP_SYNCDATA *syncdata, SCIP_Real lowerbound)
SCIP_RETCODE SCIPsyncstoreCapture(SCIP_SYNCSTORE *syncstore)
int SCIPsyncstoreGetLastNBounds(SCIP_SYNCSTORE *syncstore)
static int getNSyncdata(SCIP *scip)
int SCIPsyncstoreGetLastNSols(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreStartSync(SCIP_SYNCSTORE *syncstore, SCIP_Longint syncnum, SCIP_SYNCDATA **syncdata)
void SCIPsyncdataGetSolutionBuffer(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real solobj, int ownerid, SCIP_Real **buffer)
SCIP_Real SCIPsyncdataGetLowerbound(SCIP_SYNCDATA *syncdata)
SCIP_PARALLELMODE SCIPsyncstoreGetMode(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreCreate(SCIP_SYNCSTORE **syncstore)
int SCIPsyncdataGetNSynced(SCIP_SYNCDATA *syncdata)
SCIP_SYNCDATA * SCIPsyncstoreGetSyncdata(SCIP_SYNCSTORE *syncstore, SCIP_Longint syncnum)
SCIP_Bool SCIPsyncstoreIsInitialized(SCIP_SYNCSTORE *syncstore)
SCIP_SYNCDATA * SCIPsyncstoreGetNextSyncdata(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real syncfreq, SCIP_Longint writenum, SCIP_Real *delay)
void SCIPsyncdataAddMemTotal(SCIP_SYNCDATA *syncdata, SCIP_Longint memtotal)
int SCIPsyncstoreGetNSolvers(SCIP_SYNCSTORE *syncstore)
SCIP_STATUS SCIPsyncdataGetStatus(SCIP_SYNCDATA *syncdata)
SCIP_RETCODE SCIPsyncstoreInit(SCIP *scip)
the function declarations for the synchronization store
the type definitions for the SCIP parallel interface
SCIP_RETCODE SCIPtpiWaitCondition(SCIP_CONDITION *condition, SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiAcquireLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiExit(void)
SCIP_RETCODE SCIPtpiBroadcastCondition(SCIP_CONDITION *condition)
void SCIPtpiDestroyLock(SCIP_LOCK **lock)
void SCIPtpiDestroyCondition(SCIP_CONDITION **condition)
SCIP_RETCODE SCIPtpiInitLock(SCIP_LOCK **lock)
SCIP_RETCODE SCIPtpiReleaseLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiInitCondition(SCIP_CONDITION **condition)
SCIP_RETCODE SCIPtpiInit(int nthreads, int queuesize, SCIP_Bool blockwhenfull)
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Status SCIP_STATUS
enum SCIP_Parallelmode SCIP_PARALLELMODE
@ SCIP_PARA_DETERMINISTIC
struct SCIP_SyncData SCIP_SYNCDATA
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4