I've used valgrind before, sparingly, but never purify. Do you guys have experience with both? Comments on one versus the other?<br>
<br>
TIA,<br>
Leo.<br><br><div><span class="gmail_quote">On 5/23/06, <b class="gmail_sendername">John J Forrest</b> <<a href="mailto:jjforre@us.ibm.com">jjforre@us.ibm.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>
<br><font face="sans-serif" size="2">That one is OK. There used to
be a define of ZEROFAULT if -g but it seems to have vanished.</font>
<br>
<br><font face="sans-serif" size="2">Just define ZEROFAULT and Purify should
be happy.</font>
<br>
<br><font face="sans-serif" size="2">John</font>
<br>
<br>
<br>
<table width="100%">
<tbody><tr valign="top">
<td width="40%"><font face="sans-serif" size="1"><b>"Matthew Galati"
<<a href="mailto:Matthew.Galati@sas.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Matthew.Galati@sas.com</a>></b> </font>
<br><font face="sans-serif" size="1">Sent by: <a href="mailto:coin-discuss-bounces@list.coin-or.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">coin-discuss-bounces@list.coin-or.org</a></font>
<p><font face="sans-serif" size="1">05/24/2006 03:32 AM</font>
<table border="1">
<tbody><tr valign="top">
<td bgcolor="white">
<div align="center"><font face="sans-serif" size="1">Please respond to<br>
Discussions about open source software for Operations Research
<<a href="mailto:coin-discuss@list.coin-or.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">coin-discuss@list.coin-or.org</a>></font></div></td></tr></tbody></table>
<br>
</p></td><td width="59%">
<table width="100%">
<tbody><tr valign="top">
<td>
<div align="right"><font face="sans-serif" size="1">To</font></div>
</td><td><font face="sans-serif" size="1">"Discussions about open source
software for Operations Research" <<a href="mailto:coin-discuss@list.coin-or.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">coin-discuss@list.coin-or.org</a>></font>
</td></tr><tr valign="top">
<td>
<div align="right"><font face="sans-serif" size="1">cc</font></div>
</td><td>
<br>
</td></tr><tr valign="top">
<td>
<div align="right"><font face="sans-serif" size="1">Subject</font></div>
</td><td><font face="sans-serif" size="1">[Coin-discuss] Purify UMR CoinFactorization::pivotOneOtherRow</font></td></tr></tbody></table>
<br>
<table>
<tbody><tr valign="top">
<td>
<br>
</td><td><br>
</td></tr></tbody></table>
<br></td></tr></tbody></table></div><div><span class="e" id="q_10b6521763e27a5e_1">
<br>
<br>
<br><tt><font size="2">I recall CLP ignoring some UMR's in past postings.
This one comes up a lot - is it safe?<br>
<br>
Matt<br>
<br>
<br>
<br>
[I] Starting Purify'd C:\cygwin\home\magala\sasopt\cbuild\exemilpNET03\exemilp\Debug\exemilp.exe
at 05/23/2006 21:27:41<br>
[I] Starting main<br>
[W] UMR: Uninitialized memory read in CoinFactorization::pivotOneOtherRow(int,int)
{47 occurrences}<br>
Reading 4 bytes from 0x038fda50 (4 bytes at
0x038fda50 uninitialized)<br>
Address 0x038fda50 is 11000 bytes into a 234016
byte block at 0x038faf58<br>
Address 0x038fda50 points to a C++ new block
in heap 0x00390000<br>
Thread ID: 0xb4c<br>
Error location<br>
CoinFactorization::pivotOneOtherRow(int,int)
[c:\cygwin\home\magala\coin\coin\coinfactorization1.cpp:1949]<br>
if ( i + 1 < endColumn ) {<br>
#endif<br>
nextIRow = indexRowU_[i + 1];<br>
=>
nextValue = elementU_[i + 1];<br>
#ifdef ZEROFAULT<br>
}<br>
#endif<br>
CoinFactorization::factorSparse(void)
[c:\cygwin\home\magala\coin\coin\coinfactorization2.cpp:322]<br>
break;<br>
}<br>
} else {<br>
=>
if ( !pivotOneOtherRow ( pivotRow, pivotColumn ) )
{<br>
status = -99;<br>
count=biggerDimension_+1;<br>
break;<br>
CoinFactorization::factor(void)
[c:\cygwin\home\magala\coin\coin\coinfactorization1.cpp:980]<br>
CoinFactorization::factor
( )<br>
{<br>
//sparse<br>
=> status_ = factorSparse
( );<br>
switch (
status_ ) {<br>
case 0:
//finished<br>
totalElements_
= 0;<br>
ClpFactorization::factorize(ClpSimplex
*,int,bool) [c:\cygwin\home\magala\coin\clp\clpfactorization.cpp:361]<br>
preProcess ( 2 );<br>
else<br>
preProcess ( 3 ); // no row copy<br>
=> factor (
);<br>
if
(status_==-99) {<br>
// get more memory<br>
areaFactor(2.0*areaFactor());<br>
ClpSimplex::internalFactorize(int)
[c:\cygwin\home\magala\coin\clp\clpsimplex.cpp:1395]<br>
exit(0);<br>
k++;<br>
}<br>
=> int status = factorization_->factorize(this,
solveType,valuesPass);<br>
if (status)
{<br>
handler_->message(CLP_SIMPLEX_BADFACTOR,messages_)<br>
<<status<br>
ClpSimplexDual::statusOfProblemInDual(int&,int,double
*,ClpDataSave&,int) [c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:3292]<br>
dualRowPivot_->saveWeights(this,1);<br>
if
(type) {<br>
// is factorization okay?<br>
=> if
(internalFactorize(1)) {<br>
//
no - restore previous basis<br>
unflagVariables
= false;<br>
assert
(type==1);<br>
ClpSimplexDual::gutsOfDual(int,double
*&,int,ClpDataSave&) [c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:388]<br>
}<br>
//
may factorize, checks if problem finished<br>
statusOfProblemInDual(lastCleaned,factorType,saveDuals,data,<br>
=>
ifValuesPass);<br>
//
If values pass then do easy ones on first time<br>
if
(ifValuesPass&&<br>
progress_->lastIterationNumber(0)<0&&saveDuals)
{<br>
ClpSimplexDual::dual(int,int)
[c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:452]<br>
int initialStatus=problemStatus_;<br>
<br>
if (!returnCode)<br>
=> gutsOfDual(ifValuesPass,saveDuals,initialStatus,data);<br>
if (problemStatus_==10)<br>
startFinishOptions
|= 1;<br>
finishSolve(startFinishOptions);<br>
ClpSimplex::dual(int,int) [c:\cygwin\home\magala\coin\clp\clpsimplex.cpp:4408]<br>
<br>
As far as I can see this is perfectly safe.<br>
*/<br>
=> int returnCode
= ((ClpSimplexDual *) this)->dual(ifValuesPass, startFinishOptions);<br>
if ((specialOptions_&2048)!=0&&problemStatus_==10&&!numberPrimalInfeasibilities_<br>
&&sumDualInfeasibilities_<1000.0*dualTolerance_&&perturbation_>=100)<br>
problemStatus_=0;
// ignore<br>
OsiClpSolverInterface::resolve(void)
[c:\cygwin\home\magala\coin\osi\osiclp\osiclpsolverinterface.cpp:475]<br>
}<br>
} else {<br>
if((specialOptions_&1)==0) {<br>
=>
modelPtr_->dual(0,startFinishOptions);<br>
} else {<br>
crunch();<br>
}<br>
Allocation location<br>
new(UINT) [f:\vs70builds\3077\vc\crtbld\crt\src\newop.cpp:10]<br>
<>=(UINT)
[f:\vs70builds\3077\vc\crtbld\crt\src\newaop.cpp:7]<br>
CoinFactorization::getAreas(int,int,int,int)
[c:\cygwin\home\magala\coin\coin\coinfactorization1.cpp:616]<br>
lengthAreaU_
= (CoinBigIndex) (areaFactor_*lengthAreaU_);<br>
lengthAreaL_
= (CoinBigIndex) (areaFactor_*lengthAreaL_);<br>
}<br>
=> elementU_ = new
double [ lengthAreaU_ ];<br>
indexRowU_
= new int [ lengthAreaU_ ];<br>
indexColumnU_
= new int [ lengthAreaU_ ];<br>
elementL_
= new double [ lengthAreaL_ ];<br>
ClpFactorization::factorize(ClpSimplex
*,int,bool) [c:\cygwin\home\magala\coin\clp\clpfactorization.cpp:315]<br>
#else<br>
getAreas
( numberRows,<br>
numberRowBasic+numberColumnBasic, numberElements,<br>
=>
2 * numberElements );<br>
#endif<br>
//fill<br>
//
Fill in counts so we can skip part of preProcess<br>
ClpSimplex::internalFactorize(int)
[c:\cygwin\home\magala\coin\clp\clpsimplex.cpp:1395]<br>
exit(0);<br>
k++;<br>
}<br>
=> int status = factorization_->factorize(this,
solveType,valuesPass);<br>
if (status)
{<br>
handler_->message(CLP_SIMPLEX_BADFACTOR,messages_)<br>
<<status<br>
ClpSimplexDual::statusOfProblemInDual(int&,int,double
*,ClpDataSave&,int) [c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:3292]<br>
dualRowPivot_->saveWeights(this,1);<br>
if
(type) {<br>
// is factorization okay?<br>
=> if
(internalFactorize(1)) {<br>
//
no - restore previous basis<br>
unflagVariables
= false;<br>
assert
(type==1);<br>
ClpSimplexDual::gutsOfDual(int,double
*&,int,ClpDataSave&) [c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:388]<br>
}<br>
//
may factorize, checks if problem finished<br>
statusOfProblemInDual(lastCleaned,factorType,saveDuals,data,<br>
=>
ifValuesPass);<br>
//
If values pass then do easy ones on first time<br>
if
(ifValuesPass&&<br>
progress_->lastIterationNumber(0)<0&&saveDuals)
{<br>
ClpSimplexDual::dual(int,int)
[c:\cygwin\home\magala\coin\clp\clpsimplexdual.cpp:452]<br>
int initialStatus=problemStatus_;<br>
<br>
if (!returnCode)<br>
=> gutsOfDual(ifValuesPass,saveDuals,initialStatus,data);<br>
if (problemStatus_==10)<br>
startFinishOptions
|= 1;<br>
finishSolve(startFinishOptions);<br>
ClpSimplex::dual(int,int) [c:\cygwin\home\magala\coin\clp\clpsimplex.cpp:4408]<br>
<br>
As far as I can see this is perfectly safe.<br>
*/<br>
=> int returnCode
= ((ClpSimplexDual *) this)->dual(ifValuesPass, startFinishOptions);<br>
if ((specialOptions_&2048)!=0&&problemStatus_==10&&!numberPrimalInfeasibilities_<br>
&&sumDualInfeasibilities_<1000.0*dualTolerance_&&perturbation_>=100)<br>
problemStatus_=0;
// ignore<br>
OsiClpSolverInterface::resolve(void)
[c:\cygwin\home\magala\coin\osi\osiclp\osiclpsolverinterface.cpp:475]<br>
}<br>
} else {<br>
if((specialOptions_&1)==0) {<br>
=>
modelPtr_->dual(0,startFinishOptions);<br>
} else {<br>
crunch();<br>
}<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Coin-discuss mailing list<br>
<a href="mailto:Coin-discuss@list.coin-or.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Coin-discuss@list.coin-or.org</a><br>
<a href="http://list.coin-or.org/mailman/listinfo/coin-discuss" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://list.coin-or.org/mailman/listinfo/coin-discuss</a><br>
</font></tt>
<br>
</span></div><br>_______________________________________________<br>Coin-discuss mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:Coin-discuss@list.coin-or.org">Coin-discuss@list.coin-or.org
</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://list.coin-or.org/mailman/listinfo/coin-discuss" target="_blank">http://list.coin-or.org/mailman/listinfo/coin-discuss</a><br><br><br></blockquote>
</div><br><br clear="all"><br>-- <br>========================================================================<br>Leonardo
B.
Lopes <a href="mailto:leo@sie.arizona.edu">leo@sie.arizona.edu</a><br>Assistant
Professor (520)621-2342<br>SIE - University of Arizona <a href="http://www.sie.arizona.edu/faculty/leolopes">http://www.sie.arizona.edu/faculty/leolopes</a><br>