[Cbc] UMR in CoinCopyN
Matthew Galati
magh at lehigh.edu
Sun Nov 16 11:19:46 EST 2008
Purify showed the folloing UMR in CBC. If needed, I can try to make an
independent test - but that will take some work. Hoping you can tell
form the trace.
[I] Starting Purify'd
C:\cygwin\home\magala\COIN\coin-Decomp\Win32\v8\DecompExamples\debug\SmallIP.exe
at 11/16/2008 11:18:07
[I] Starting main
[I] EXC: Continued exception {1 occurrence}
[W] UMR: Uninitialized memory read in N::CoinCopyN(double const
*,int,double *) {1 occurrence}
Reading 8 bytes from 0x03192058 (8 bytes at 0x03192058
uninitialized)
Address 0x03192058 is 32 bytes into a 640 byte block at 0x03192038
Address 0x03192058 points to a C++ new block in heap 0x02e80000
Thread ID: 0x8bc
Error location
N::CoinCopyN(double const *,int,double *)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinhelperfunctions.hpp:44]
case 0: do{ *--downto = *--downfrom;
case 7: *--downto = *--downfrom;
case 6: *--downto = *--downfrom;
=> case 5: *--downto = *--downfrom;
case 4: *--downto = *--downfrom;
case 3: *--downto = *--downfrom;
case 2: *--downto = *--downfrom;
N::CoinMemcpyN(double const *,int,double *)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinhelperfunctions.hpp:291]
}
#endif
#else
=> CoinCopyN(from, size, to);
#endif
}
#else
CoinFactorization::gutsOfCopy(CoinFactorization const&)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization4.cpp:814]
CoinMemcpyN ( other.numberInRow_.array(),
numberRowsExtra_ + 1, numberInRow_.array() );
CoinMemcpyN ( other.nextRow_.array(),
numberRowsExtra_ + 1, nextRow_.array() );
CoinMemcpyN ( other.lastRow_.array(),
numberRowsExtra_ + 1, lastRow_.array() );
=> CoinMemcpyN ( other.pivotRegion_.array(),
numberRowsExtra_ + 1, pivotRegion_.array() );
CoinMemcpyN ( other.permuteBack_.array(),
numberRowsExtra_ + 1, permuteBack_.array() );
CoinMemcpyN ( other.permute_.array(),
numberRowsExtra_ + 1, permute_.array() );
CoinMemcpyN ( other.pivotColumnBack_.array(),
numberRowsExtra_ + 1, pivotColumnBack_.array() );
CoinFactorization::CoinFactorization(CoinFactorization
const&)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization1.cpp:30]
persistenceFlag_=0;
gutsOfInitialize(3);
persistenceFlag_=other.persistenceFlag_;
=> gutsOfCopy(other);
}
/// The real work of constructors etc
void CoinFactorization::gutsOfDestructor(int type)
ClpFactorization::ClpFactorization(ClpFactorization
const&,int)
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpfactorization.cpp:1151]
goDense=2;
}
if (rhs.coinFactorizationA_&&!goDense)
=> coinFactorizationA_ = new
CoinFactorization(*(rhs.coinFactorizationA_));
else
coinFactorizationA_=NULL;
if
(rhs.coinFactorizationB_&&(denseIfSmaller>=0||!goDense))
ClpSimplexDual::setupForStrongBranching(char *,int,int)
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplexdual.cpp:5663]
CoinMemcpyN(cost_,
numberRows_+numberColumns_,saveObjective);
CoinMemcpyN(pivotVariable_, numberRows_,savePivot);
=> return new ClpFactorization(*factorization_,numberRows_);
}
// This cleans up after strong branching
void
OsiClpSolverInterface::markHotStart(void)
[c:\cygwin\home\magala\coin\coin-decomp\osi\src\osiclp\osiclpsolverinterface.cpp:1850]
// Setup for strong branching
assert (factorization_==NULL);
factorization_ = ((ClpSimplexDual
*)smallModel_)->setupForStrongBranching(spareArrays_,numberRows,
=> numberColumns);
int numberColumns2 = smallModel_->numberColumns();
CoinMemcpyN(
smallModel_->columnLower(),numberColumns2, saveLowerOriginal);
CoinMemcpyN(
smallModel_->columnUpper(),numberColumns2, saveUpperOriginal);
CbcNode::chooseDynamicBranch(CbcModel *,CbcNode
*,OsiSolverBranch *&,int)
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcnode.cpp:3422]
if (!skipAll) {
// Mark hot start
doneHotStart=true;
=> solver->markHotStart();
xMark++;
}
// make sure best will be first
CbcModel::chooseBranch(CbcNode *&,int,CbcNode
*,OsiCuts&,bool&,CoinWarmStartBasis *,double const*,double
const*,OsiSolverBranch *&)
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcmodel.cpp:12537]
if (numberBeforeTrust_==0 ) {
anyAction =
newNode->chooseBranch(this,oldNode,numberPassesLeft) ;
} else {
=> anyAction =
newNode->chooseDynamicBranch(this,oldNode,branches,numberPassesLeft) ;
if (anyAction==-3)
anyAction =
newNode->chooseBranch(this,oldNode,numberPassesLeft) ; // dynamic did
nothing
}
CbcModel::branchAndBound(int)
[c:\cygwin\home\magala\coin\coin-decomp\cbc\src\cbcmodel.cpp:2245]
}
OsiSolverBranch * branches = NULL;
anyAction = chooseBranch(newNode, numberPassesLeft,
NULL, cuts,resolved,
=> NULL,NULL,NULL,branches);
if (anyAction == -2||newNode->objectiveValue() >=
cutoff) {
if (anyAction != -2) {
// zap parent nodeInfo
DecompAlgo2::solveRelaxed(int,int,double const*,double
const*,double,int,bool,bool,OsiSolverInterface *,list<DecompVar
*,allocator<DecompVar *>::std>::std&)
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:3943]
//cbc.setStrategy(cbcStrategyDefault);
cbc.messageHandler()->setLogLevel(m_app->m_param.LogLpLevel);
//TODO: this is NOT a good version of CBC
=> cbc.branchAndBound();//branch and cut??
/*printf("CBC B&B status = %d\n",
cbc.status());
printf("CBC B&B 2nd status = %d\n",
cbc.secondaryStatus());
printf("CBC is proven Optimal = %d\n",
cbc.isProvenOptimal());
DecompAlgo2::generateVarsFea(list<DecompVar
*,allocator<DecompVar *>::std>::std&,double&)
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:2507]
true,
true,
m_subprobSI[m_whichModel][b],
=> potentialVars);
//TODO: add to DecompVar some indicator label from
which poly
//it came from
DecompAlgo2::generateVars(DecompStatus,list<DecompVar
*,allocator<DecompVar *>::std>::std&,double&)
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:2611]
"generateVars()", m_param.LogDebugLevel, 2);
switch(stat){
case STAT_FEASIBLE:
=> return generateVarsFea(newVars, mostNegReducedCost);
case STAT_INFEASIBLE:
return generateVarsInf(newVars, mostNegReducedCost);
default:
DecompAlgo2::processNode(int,double,double)
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\decompalgo2.cpp:677]
// ---
mostNegRC = 0.0;
m_nodeStats.varsThisCall = generateVars(m_status,
=> newVars, mostNegRC);
m_nodeStats.varsThisRound +=
m_nodeStats.varsThisCall;
//TODO: can stop DW as soon as lb is higher than
AlpsDecompTreeNode::process(bool,bool)
[c:\cygwin\home\magala\coin\coin-decomp\decomp\src\alpsdecomptreenode.cpp:212]
//---
//THINK??
decompStatus = decompAlgo->processNode(getIndex(),
=> globalLB,
globalUB);
//decompAlgo->getObjBestBoundLB(),
//decompAlgo->getObjBestBoundUB());
Allocation location
new(UINT)
[f:\sp\vctools\crt_bld\self_x86\crt\src\new.cpp:57]
<>=(UINT)
[f:\sp\vctools\crt_bld\self_x86\crt\src\newaop.cpp:7]
mallocArray
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.cpp:1558]
static char * mallocArray(long size)
{
if (size>0) {
=> char * array = new char [size];
return array;
} else {
return NULL;
CoinArrayWithLength::conditionalNew(long)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.cpp:1575]
{
if (size_==-1) {
freeArray(array_);
=> array_ = mallocArray(sizeWanted);
} else {
setCapacity();
if (sizeWanted>size_) {
CoinFactorizationDoubleArrayWithLength::conditionalNew(int)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinindexedvector.hpp:630]
//@{
/// Conditionally gets new array
inline CoinFactorizationDouble * conditionalNew(int
sizeWanted)
=> { return (CoinFactorizationDouble *)
CoinArrayWithLength::conditionalNew(sizeWanted>=0 ? (long) (((long)
sizeWanted)*sizeof(CoinFactorizationDouble)) : -1); }
//@}
/**@name Constructors and destructors */
CoinFactorization::getAreas(int,int,int,int)
[c:\cygwin\home\magala\coin\coin-decomp\coinutils\src\coinfactorization1.cpp:606]
nextRow_.conditionalNew( maximumRowsExtra_ + 1 );
lastRow_.conditionalNew( maximumRowsExtra_ + 1 );
permute_.conditionalNew( maximumRowsExtra_ + 1 );
=> pivotRegion_.conditionalNew( maximumRowsExtra_ + 1 );
#ifdef ZEROFAULT
memset(elementU_.array(),'a',lengthAreaU_*sizeof(CoinFactorizationDouble));
memset(indexRowU_.array(),'b',lengthAreaU_*sizeof(int));
ClpFactorization::factorize(ClpSimplex *,int,bool)
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpfactorization.cpp:1771]
numberElements = 3 * numberBasic + 3 *
numberElements + 20000;
coinFactorizationA_->getAreas ( numberRows,
numberRowBasic+numberColumnBasic, numberElements,
=> 2 * numberElements );
//fill
// Fill in counts so we can skip part of preProcess
int * numberInRow = coinFactorizationA_->numberInRow();
ClpSimplex::internalFactorize(int)
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplex.cpp:1601]
exit(0);
k++;
}
=> int status = factorization_->factorize(this,
solveType,valuesPass);
if (status) {
handler_->message(CLP_SIMPLEX_BADFACTOR,messages_)
<<status
ClpSimplexDual::setupForStrongBranching(char *,int,int)
[c:\cygwin\home\magala\coin\coin-decomp\clp\src\clpsimplexdual.cpp:5624]
if (!useFactorization) {
factorization_->setDefaultValues();
=> int factorizationStatus = internalFactorize(0);
if (factorizationStatus<0) {
// some error
// we should either debug or ignore
OsiClpSolverInterface::markHotStart(void)
[c:\cygwin\home\magala\coin\coin-decomp\osi\src\osiclp\osiclpsolverinterface.cpp:1850]
// Setup for strong branching
assert (factorization_==NULL);
factorization_ = ((ClpSimplexDual
*)smallModel_)->setupForStrongBranching(spareArrays_,numberRows,
=> numberColumns);
int numberColumns2 = smallModel_->numberColumns();
CoinMemcpyN(
smallModel_->columnLower(),numberColumns2, saveLowerOriginal);
CoinMemcpyN(
smallModel_->columnUpper(),numberColumns2, saveUpperOriginal);
[I] Exiting with code 0 (0x00000000)
[I] Program terminated at 11/16/2008 11:18:20
More information about the Cbc
mailing list