Hi,<div><br></div><div>I opened two report issues:</div><div><br></div><div><a href="http://public.kitware.com/Bug/view.php?id=10456">http://public.kitware.com/Bug/view.php?id=10456</a> : Performance problem of <span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; ">UpdateOutputInformation</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><a href="http://public.kitware.com/Bug/view.php?id=10457">http://public.kitware.com/Bug/view.php?id=10457</a> : Performance problem related to the TransferSyntax</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Thanks you for all of your help and your quick reply. If I can help you I will do it.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Roger<br>
</span></font><br><div class="gmail_quote">On Wed, Mar 24, 2010 at 3:09 PM, Bradley Lowekamp <span dir="ltr">&lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div style="word-wrap:break-word">Hello Roger,<div><br></div><div>For the performance issue in UpdateOutputInformation could you please follow the procedures for reporting a bug. This will aid in future tracking and maintenance. </div>
<div><br></div><div><a href="http://www.itk.org/Wiki/ITK_Procedure_for_Contributing_Bug_Fixes" target="_blank">http://www.itk.org/Wiki/ITK_Procedure_for_Contributing_Bug_Fixes</a></div><div><br></div><div><br></div><div>As for the performance that is a related to the TransferSintax that is a separate issue likely cause by something in side the dicom library.</div>
<div><br></div><div>Brad</div><div><div></div><div class="h5"><div><br></div><div><br><div><div>On Mar 24, 2010, at 8:24 AM, Roger Bramon Feixas wrote:</div><br><blockquote type="cite"><font face="&#39;courier new&#39;, monospace">Hi,</font><div>
<font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">I changed the line in method </font><span style="font-size:13px;border-collapse:collapse"><font face="&#39;courier new&#39;, monospace">GenerateOutputInformation</font><font face="&#39;courier new&#39;, monospace"> and now I show you the results. I used the same data of the previous tests.</font></span></div>

<div><span style="font-size:13px;border-collapse:collapse"><font face="&#39;courier new&#39;, monospace"><br></font></span></div><div><span style="font-size:13px;border-collapse:collapse"><font face="&#39;courier new&#39;, monospace">We can observe the </font><font face="&#39;courier new&#39;, monospace">UpdateOutputInformation</font><font face="&#39;courier new&#39;, monospace"> of 3.16 patched is much faster than v3.16 released. However, if we compare 2.8 and 3.16patched, in some cases 2.8 is quite faster. This performance difference can be appreciated in data which its </font><font face="&#39;courier new&#39;, monospace">TransferSintax</font><font face="&#39;courier new&#39;, monospace"> is Little </font><font face="&#39;courier new&#39;, monospace">Endian</font><font face="&#39;courier new&#39;, monospace"> Implicit (test 2, 4, 7) and it exists in both update methods (</font><font face="&#39;courier new&#39;, monospace">UpdateOutputInformation</font><font face="&#39;courier new&#39;, monospace"> and </font><font face="&#39;courier new&#39;, monospace">UpdateLargestPossibleRegion</font><font face="&#39;courier new&#39;, monospace">) even though the most critical is the </font></span><span style="font-size:13px;border-collapse:collapse"><font face="&#39;courier new&#39;, monospace">UpdateLargestPossibleRegion</font><font face="&#39;courier new&#39;, monospace"> because it needs seconds instead of milliseconds.</font></span></div>

<div><font face="&#39;courier new&#39;, monospace"><span style="border-collapse:collapse"><br></span></font></div><div><font face="&#39;courier new&#39;, monospace"><span style="border-collapse:collapse">Nowadays, we aren&#39;t using streaming. Therefore, we collaborate with you in order to solve the problem, but we are really interested to fix the usual use case because we need the performance improvement quite soon.</span></font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">The results of the experiment:</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">1. Head (<a href="http://mri.radiology.uiowa.edu/VHDicom/VHFCT1mm/VHF-Head.tar.gz" target="_blank">http://mri.radiology.uiowa.edu/VHDicom/VHFCT1mm/VHF-Head.tar.gz</a>)</font></div>

<div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: Little Endian Explicit</font></div><div><font face="&#39;courier new&#39;, monospace">117MB</font></div>
<div><font face="&#39;courier new&#39;, monospace">234 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div>

<div><font face="&#39;courier new&#39;, monospace"> ITK 2.8       385                        4                         1435 </font></div><div><font face="&#39;courier new&#39;, monospace">ITK 3.16       400                        4                         1485</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">__________________________________</font></div><div>
<font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">2. CT example study we work with </font></div><div><font face="&#39;courier new&#39;, monospace">(<a href="http://dl.dropbox.com/u/3613789/ct_anonymized.zip" target="_blank">http://dl.dropbox.com/u/3613789/ct_anonymized.zip</a>)</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: Little Endian Implicit</font></div><div>
<font face="&#39;courier new&#39;, monospace">124MB</font></div><div><font face="&#39;courier new&#39;, monospace">243 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div><div><font face="&#39;courier new&#39;, monospace"> ITK 2.8      1013                        9                         2186</font></div>

<div><font face="&#39;courier new&#39;, monospace">ITK 3.16      1003                       14                         2999</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">___________________________________</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">3. CALIX/CT1 abdomen/D30MN BILISCOPIN from OSIRIX Data </font></div>
<div><font face="&#39;courier new&#39;, monospace">(<a href="http://pubimage.hcuge.ch:8080/DATA/CALIX.zip" target="_blank">http://pubimage.hcuge.ch:8080/DATA/CALIX.zip</a>)</font></div><div><font face="&#39;courier new&#39;, monospace"><br>

</font></div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: JPEG2000</font></div><div><font face="&#39;courier new&#39;, monospace">130MB</font></div><div>
<font face="&#39;courier new&#39;, monospace">243 files</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div>

<div><font face="&#39;courier new&#39;, monospace"> ITK 2.8       642                        6                        20156</font></div><div><font face="&#39;courier new&#39;, monospace">ITK 3.16       653                        7                        20714</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">_____________________________________</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">4. Mr Perfusion data</font></div><div><font face="&#39;courier new&#39;, monospace"><a href="http://dl.dropbox.com/u/3613789/perfusion_implicit_anonymized.zip" target="_blank">http://dl.dropbox.com/u/3613789/perfusion_implicit_anonymized.zip</a> </font></div>

<div><font face="&#39;courier new&#39;, monospace">(The test crashs when the v2.8 is used. I did the test without anonymize it)</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: Little Endian Implicit</font></div><div><font face="&#39;courier new&#39;, monospace">41,9MB</font></div>
<div><font face="&#39;courier new&#39;, monospace">1080 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div>

<div><font face="&#39;courier new&#39;, monospace"> ITK 2.8      4032                        9                         4809</font></div><div><font face="&#39;courier new&#39;, monospace">ITK 3.16      4051                       25                        13376</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">_____________________________________________</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">5. Mr Perfusion data (4) recodified</font></div><div><font face="&#39;courier new&#39;, monospace"><a href="http://dl.dropbox.com/u/3613789/perfusion_explicit_anonymized.zip" target="_blank">http://dl.dropbox.com/u/3613789/perfusion_explicit_anonymized.zip</a></font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: Little Endian Explicit</font></div><div>
<font face="&#39;courier new&#39;, monospace">41,9MB</font></div><div><font face="&#39;courier new&#39;, monospace">1080 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div><div><font face="&#39;courier new&#39;, monospace"> ITK 2.8     15480                       31                        17148</font></div>

<div><font face="&#39;courier new&#39;, monospace">ITK 3.16     15522                       31                        16821</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">_____________________________________________</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">6. Mr Perfusion data (4) anonymized by Osirix. All private tags were removed.</font></div><div><font face="&#39;courier new&#39;, monospace"><a href="http://dl.dropbox.com/u/3613789/perfusion_anonymized_osirix.zip" target="_blank">http://dl.dropbox.com/u/3613789/perfusion_anonymized_osirix.zip</a></font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">TransferSyntax: Little Endian Explicit</font></div><div>
<font face="&#39;courier new&#39;, monospace">36,9MB</font></div><div><font face="&#39;courier new&#39;, monospace">1080 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div><div><font face="&#39;courier new&#39;, monospace"> ITK 2.8      3898                        9                         4669</font></div>

<div><font face="&#39;courier new&#39;, monospace">ITK 3.16      3869                        9                         5330</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">_______________________________________________</font></div>

<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">7. CT Abdomen</font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">TransferSintax: Little Endian Implicit</font></div><div>
<font face="&#39;courier new&#39;, monospace">271MB</font></div><div><font face="&#39;courier new&#39;, monospace">531 Files</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">          Read dir  UpdateOutputInformation  UpdateLargestPossibleRegion</font></div><div><font face="&#39;courier new&#39;, monospace"> ITK 2.8      1798                        8                         4343</font></div>

<div><font face="&#39;courier new&#39;, monospace">ITK 3.16      1791                       13                         6233</font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace">________________________________________________</font></div>
<div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div><font face="&#39;courier new&#39;, monospace">Roger</font></div><div><font face="&#39;courier new&#39;, monospace"><br></font></div><div><font face="&#39;courier new&#39;, monospace"><br>
</font></div><div class="gmail_quote">On Tue, Mar 23, 2010 at 11:05 PM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Roger,<br>
<br>
Thanks for all of your help. We&#39;re getting close to a solution.<br>
<font color="#888888"><br>
Bill<br>
</font><div><div></div><div><br>
On Tue, Mar 23, 2010 at 2:57 PM, Roger Bramon Feixas<br>
&lt;<a href="mailto:rogerbramon@gmail.com" target="_blank">rogerbramon@gmail.com</a>&gt; wrote:<br>
&gt; Bill,<br>
&gt; Now I&#39;m at home. You will have the results of the experiment tomorrow<br>
&gt; morning.<br>
&gt; Thanks,<br>
&gt; Roger<br>
&gt;<br>
&gt; On Tue, Mar 23, 2010 at 8:44 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Sounds good. So you are saying that in the<br>
&gt;&gt; ImageSeriesReader&lt;TOutputImage&gt;<br>
&gt;&gt; ::GenerateOutputInformation<br>
&gt;&gt;<br>
&gt;&gt; that the number of files that are processed will be only 2.<br>
&gt;&gt;<br>
&gt;&gt; Bill<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Mar 23, 2010 at 12:39 PM, Bradley Lowekamp<br>
&gt;&gt; &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt; &gt; Bill:<br>
&gt;&gt; &gt; My proposed solution is to use the old behavior but use a time stamp to<br>
&gt;&gt; &gt; avoid the extra updates of the MDDA when streaming.<br>
&gt;&gt; &gt; The requested region is set after UpdateOutputInformation is executed,<br>
&gt;&gt; &gt; so it<br>
&gt;&gt; &gt; can&#39;t be toggled during the this phase of execution.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mar 23, 2010, at 3:28 PM, Bill Lorensen wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Can we check if streaming is on and revert to the old behavior if it is<br>
&gt;&gt; &gt; off?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; This is a huge performance penalty to support streaming which is<br>
&gt;&gt; &gt; important but no the usual use case.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Mar 23, 2010 at 12:12 PM, Bradley Lowekamp<br>
&gt;&gt; &gt; &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Going back would have horrible effects for streaming. It would make<br>
&gt;&gt; &gt; slice by<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; slice streaming an n^2 algorithm, which is far worse then the current<br>
&gt;&gt; &gt; order<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; of N hindrance for normals Updates. We must make some improvements from<br>
&gt;&gt; &gt; 2.8.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If we declare the the MetaDataDictionary is suppose to be updated in the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; update data phase. ( the ImageFileReader does it in the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; UpdateOutputInformation phase ) Then the prior stated point 1 design<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; requirement is gone. And the following solution come to mind:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 1) Modify the GetMMDA methods to produce a warning if the update output<br>
&gt;&gt; &gt; data<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; has not been called. This is to be nice if some users now expect<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; UpdateOutputInformation to produce the MDDA.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2) Add a time stamp for the MMDA, so that when streaming the MMDA is<br>
&gt;&gt; &gt; only<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; updated once and not every time a region is requested.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Additionally I believe that we need better DICOM test data which include<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; more tags similar to real world data.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mar 23, 2010, at 2:54 PM, Bill Lorensen wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The UpdateInformation is supposed to update origin, spacing,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; direction, pixel type, etc. I don&#39;t think it is supposed to completely<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; populate the meta data dictionary. At least until itk 2.8 it did not.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Why not revert back to the old behavior as a sort term fix.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I think this performance hit needs to be repaired before we release<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 3.16. This has been causing major pain for Slicer3 users who<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; frequently use dicom. Fortunately for us, Roger brought it to light.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; We missed it because our performance testing is weak.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; There are other issues for sure.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Mar 23, 2010 at 11:45 AM, Bradley Lowekamp<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; After my tests I agree that reading the headers in DICOM files is a<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; surprisingly expensive operation as such it should be minimized. The<br>
&gt;&gt; &gt; coping<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; of the MDAs is insignificant performance wise.  I believe that the best<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; solution would be to have a dedicated DICOM series readers, which also<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; removes the extra header reads needed for the name generation as well as<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; extra one in the UpdateOutputInformation.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; If we assume that the usually way to utilize the reader is to just<br>
&gt;&gt; &gt; Update,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; or stream Update, then the additional read of the headers appears<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; unnecessary.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I believe a solution would be to make the GetMDDA method smarter, and by<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; default update this MDDA in the UpdateData. A time stamp would need to<br>
&gt;&gt; &gt; be<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; used for the MDDA to check when it needs to be updated in the UpdateData<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; methods. For streaming, the first time through would require reading all<br>
&gt;&gt; &gt; of<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; the headers for the MDDA, this should bring the time stamp up to date.<br>
&gt;&gt; &gt; The<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; GetMDDA methods could also check this timestamp and perform the reading<br>
&gt;&gt; &gt; of<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; the headers if it&#39;s out of date. This is my best current idea on how to<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; maintain the 1) and 2) I previously mentioned.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mar 23, 2010, at 12:33 PM, Bill Lorensen wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I have an itk 2.8 checkout. The difference is due to the processing of<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; all files in the GenerateOutputInformation method. In the past, only<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; two files were processed. If I restrict the number of files to 2<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; rather that number of files, I get pretty reasonable speeds.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Roger,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; As an experiment (and definitely not a fix!), can you in the method<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; void ImageSeriesReader&lt;TOutputImage&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ::GenerateOutputInformation(void)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; change the line:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; for ( int i = 0; i != numberOfFiles; ++i )<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; to<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; for ( int i = 0; i != 2; ++i )<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; and rerun your tests.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Mar 23, 2010 at 8:59 AM, Bradley Lowekamp<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; That is only the half of it. Every time an ImageFileReader is used 3<br>
&gt;&gt; &gt; MDDs<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; (meta data dictionaries) are created, one in the ImageIO, one in the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ImageFileReader, and one in the output Image. This is in addition to the<br>
&gt;&gt; &gt; two<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; copies, you pointed out in ImageSeriesReader. Clearly reading with an<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ImageFileReader the MDD scales very poorly as the it&#39;s size increases. I<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; still have the remaining performance questions:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; How much time is spent coping the MDD vs reading? (leaning towards<br>
&gt;&gt; &gt; reading<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; as very expensive)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; As pointed out in Roger&#39;s most recent performance tests, there appears<br>
&gt;&gt; &gt; to be<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; some additional performance problems in the UpdateData, part. This is<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; independent of the additional MDD read in the UpdateOutputInformation.<br>
&gt;&gt; &gt; This<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; is definitely another problem, perhaps inside the DICOM library.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; The change of moving (apparently duplicating) the copying to MDDs to the<br>
&gt;&gt; &gt; MDD<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; array was added over a year ago, when streaming support was added. If I<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; recall correctly the two motivating factors were 1) the MDD array is<br>
&gt;&gt; &gt; output<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; information and logically should be updating during the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; UpdateOutputInformation part of the pipeline 2) when streaming each file<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; should not need to be read to create the MMD array. I don&#39;t recall where<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; this discussion took place right now.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I will run some performance test to try to figure out where the time is<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; being spent. Without changing 1 from above, I am not sure how much could<br>
&gt;&gt; &gt; be<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; gained.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Looking at the performance numbers of the Read Directory part, I would<br>
&gt;&gt; &gt; guess<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; that the meta data is also read there. I believe that an idea solution<br>
&gt;&gt; &gt; would<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; only read this information once. But that is beyond this scope.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mar 22, 2010, at 11:20 PM, Bill Lorensen wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; It looks like the meta data array is populated in both the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; GenerateOutputInformation and GenerateData. Also all slices are<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; processed in GenerateOutputInformation. In 2.8, only 2 slices were<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; processed.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Why were these changes made? We are also seeing bad dicom performance<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; in Slicer3.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bill<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mon, Mar 22, 2010 at 6:24 AM, Bradley Lowekamp<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; &lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Hello,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Can you please tell us a little more about your test data and computer.<br>
&gt;&gt; &gt; What<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; kind of file system is the data on ( locale or network)? How much memory<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; does the computer have? What is the size of the data? What is the native<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; pixel type of the data? What are the actual timings? Does the execution<br>
&gt;&gt; &gt; seem<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; to be CPU or IO bound?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; One of the changes that was made to the class was to populate the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; MetaDataArray in the UpdataOutputInformation phase of the instead of the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; UpdateOutputData part. This should be just reading the headers of the<br>
&gt;&gt; &gt; files<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; in the series. There were several reasons this change was made. To help<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; determine the cause of your slowness, lets break up the timing a little<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; further.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Could you please call:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; start timer<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; reader-&gt;UpdateOutputInformation();<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; lap timer<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; reader-&gt;UpdateLargestPossibleRegion();<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; stop timer<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; And post the timing results.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Brad<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Mar 21, 2010, at 2:52 PM, Roger Bramon Feixas wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; This week we updated our ITK version from 2.8 to 3.16  and we noticed<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; medical models are loading 2x slower using the 3.16 ITK version. We use<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; itk::ImageSeriesReader and the problem is focused in its Update()<br>
&gt;&gt; &gt; method.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I attached a simple test program which reproduces the problem and where<br>
&gt;&gt; &gt; we<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; can see that the Update() method is 2 times slower using ITK 3.16 vs.<br>
&gt;&gt; &gt; ITK<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 2.8.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; We compiled both versions using Visual Studio 2008 on Windows XP 32bits<br>
&gt;&gt; &gt; and<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  we don&#39;t known if this problem also occurs in other platforms.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I wonder if other itk users have this same performance problem and if<br>
&gt;&gt; &gt; there<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; is anybody can help us in order to solve it.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Thanks!<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Roger<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ========================================================<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bradley Lowekamp<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Lockheed Martin Contractor for<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Office of High Performance Computing and Communications<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; National Library of Medicine<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; <a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ========================================================<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Bradley Lowekamp<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Lockheed Martin Contractor for<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Office of High Performance Computing and Communications<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; National Library of Medicine<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; <a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>
</blockquote></div><br><div>
<span style="border-collapse:separate;border-spacing:0px 0px;color:rgb(0, 0, 0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><span style="border-collapse:separate;border-spacing:0px 0px;color:rgb(0, 0, 0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><p style="margin:0.0px 0.0px 0.0px 0.0px">
<font face="Helvetica" size="3" style="font:12.0px Helvetica">========================================================</font></p><p style="margin:0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font:12.0px Helvetica">Bradley Lowekamp<span> </span><span> </span></font></p>
<p style="margin:0.0px 0.0px 0.0px 0.0px"><font face="Arial"><span style="font-family:Arial"><span style="font-family:Arial">Lockheed Martin </span></span></font><font face="Helvetica" size="3" style="font:12.0px Helvetica">Contractor for</font></p>
<p style="margin:0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font:12.0px Helvetica">Office of High Performance Computing and Communications</font></p><p style="margin:0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font:12.0px Helvetica">National Library of Medicine<span> </span></font></p>
<p style="margin:0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font:12.0px Helvetica"><a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a></font></p><br></span></span>
</div>
<br></div></div></div></div></blockquote></div><br></div>