<br><font size=2 face="sans-serif">Jean-Sebastien,</font>
<br>
<br><font size=2 face="sans-serif">The reason ClpMessage was being called
so much was that in OsiClpSolverInterface::resolve a "lightweight"
copy of fixed model is made as it seemed safer as then hints could be used
on this created model. Unhappily this lightweight copy did have message
creation and this can be an overhead on very small models. As far
as I can see it does no harm to use the fixed model. This does improve
times on small models significantly. If anyone does notice any adverse
effects please tell me.</font>
<br>
<br><font size=2 face="sans-serif">For setTestForDuplicateIndex I have
effectively removed it when called from fullset. This is perfectly
safe as there is no way a dense vector can have duplicates! However
I only see a small improvement. Can you tell me if my changes help
more for you?</font>
<br>
<br><font size=2 face="sans-serif">John Forrest</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Jean-Sebastien Roy <js@jeannot.org></b>
</font>
<br><font size=1 face="sans-serif">Sent by: coin-lpsolver-admin@www-124.southbury.usf.ibm.com</font>
<p><font size=1 face="sans-serif">03/31/2004 12:35 PM</font>
<td width=59%>
<table width=100%>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td valign=top><font size=1 face="sans-serif">coin-lpsolver@www-124.southbury.usf.ibm.com</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td valign=top>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td valign=top><font size=1 face="sans-serif">[Coin-lpsolver] Sbb: Use
of setTestForDuplicateIndex and CoinMessages</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=2><tt>Hi !<br>
<br>
I did some profiling of Sbb (I know it's not even version 1.0, but it <br>
works quite well already !), and made some observations written below.<br>
<br>
The CoinPackedVectorBase::setTestForDuplicateIndex seems to test wether
<br>
multiple indices share the same value in the sparse vector (am I right
<br>
?). For that, it creates a std::set using CoinPackedVectorBase::indexSet
<br>
and possibly throw an error.<br>
A run of Sbb using a profiler revealed that on the problems I'm solving,
<br>
a very large part of the time is spent in this function (more than 20%.
<br>
It varies between platforms (Sun or Linux)).<br>
<br>
Since, it looks like a debug test, I removed the test (in <br>
CoinPackedVector::setFull), without any apparent ill effect. Is it <br>
reasonnable ? Should it be enabled for debug versions only ?<br>
<br>
The profiler runs revealed that the second most time consuming task was
<br>
ClpMessage::ClpMessage (allong with all *Message functions) which is <br>
building the message table for output. It seems to be called extremely
<br>
often (in ClpModel::ClpModel and ClpModel::newLanguage), and takes very
<br>
long since it requires a lot of strdup, strcpy, malloc and free. Like <br>
the previous line, it's almost 20% of the time spent (even when no <br>
messages are output).<br>
<br>
I thought it could be nice to be able to perform the message table <br>
building only once. Since I do not understand the Clp code yet, I just
<br>
disabled most of the CoinMessage functionnality.<br>
<br>
Regards,<br>
<br>
js<br>
<br>
_______________________________________________<br>
Coin-lpsolver mailing list<br>
Coin-lpsolver@www-124.ibm.com<br>
http://www-124.ibm.com/developerworks/oss/mailman/listinfo/coin-lpsolver<br>
</tt></font>
<br>