<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Bill,<div><br></div><div>That is only the half of it. Every time an ImageFileReader is used 3 MDDs (meta data dictionaries) are created, one in the ImageIO, one in the ImageFileReader, and one in the output Image. This is in addition to the two copies, you pointed out in ImageSeriesReader. Clearly reading with an ImageFileReader the MDD scales very poorly as the it's size increases. I still have the remaining performance questions:</div><div><br></div><div>How much time is spent coping the MDD vs reading? (leaning towards reading as very expensive)</div><div><br></div><div>As pointed out in Roger's most recent performance tests, there appears to be some additional performance problems in the UpdateData, part. This is independent of the additional MDD read in the UpdateOutputInformation. This is definitely another problem, perhaps inside the DICOM library.&nbsp;</div><div><br></div><div>The change of moving (apparently duplicating) the copying to MDDs to the MDD array was added over a year ago, when streaming support was added. If I recall correctly the two motivating factors were 1) the MDD array is output information and logically should be updating during the UpdateOutputInformation part of the pipeline 2) when streaming each file should not need to be read to create the MMD array. I don't recall where this discussion took place right now.</div><div><br></div><div>I will run some performance test to try to figure out where the time is being spent. Without changing 1 from above, I am not sure how much could be gained.</div><div><br></div><div><br></div><div>Looking at the performance numbers of the Read Directory part, I would guess that the meta data is also read there. I believe that an idea solution would only read this information once. But that is beyond this scope.&nbsp;</div><div><br></div><div>Brad</div><div><br></div><div><br><div><div>On Mar 22, 2010, at 11:20 PM, Bill Lorensen wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Brad,<br><br>It looks like the meta data array is populated in both the<br>GenerateOutputInformation and GenerateData. Also all slices are<br>processed in GenerateOutputInformation. In 2.8, only 2 slices were<br>processed.<br><br>Why were these changes made? We are also seeing bad dicom performance<br>in Slicer3.<br><br>Bill<br><br>On Mon, Mar 22, 2010 at 6:24 AM, Bradley Lowekamp<br>&lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt; wrote:<br><blockquote type="cite">Hello,<br></blockquote><blockquote type="cite">Can you please tell us a little more about your test data and computer. What<br></blockquote><blockquote type="cite">kind of file system is the data on ( locale or network)? How much memory<br></blockquote><blockquote type="cite">does the computer have? What is the size of the data? What is the native<br></blockquote><blockquote type="cite">pixel type of the data? What are the actual timings? Does the execution seem<br></blockquote><blockquote type="cite">to be CPU or IO bound?<br></blockquote><blockquote type="cite">One of the changes that was made to the class was to populate the<br></blockquote><blockquote type="cite">MetaDataArray in the UpdataOutputInformation phase of the instead of the<br></blockquote><blockquote type="cite">UpdateOutputData part. This should be just reading the headers of the files<br></blockquote><blockquote type="cite">in the series. There were several reasons this change was made. To help<br></blockquote><blockquote type="cite">determine the cause of your slowness, lets break up the timing a little<br></blockquote><blockquote type="cite">further.<br></blockquote><blockquote type="cite">Could you please call:<br></blockquote><blockquote type="cite">start timer<br></blockquote><blockquote type="cite">reader-&gt;UpdateOutputInformation();<br></blockquote><blockquote type="cite">lap timer<br></blockquote><blockquote type="cite">reader-&gt;UpdateLargestPossibleRegion();<br></blockquote><blockquote type="cite">stop timer<br></blockquote><blockquote type="cite">And post the timing results.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Thanks,<br></blockquote><blockquote type="cite">Brad<br></blockquote><blockquote type="cite">On Mar 21, 2010, at 2:52 PM, Roger Bramon Feixas wrote:<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">This week we updated our ITK version from 2.8 to 3.16 &nbsp;and we noticed the<br></blockquote><blockquote type="cite">medical models are loading 2x slower using the 3.16 ITK version. We use<br></blockquote><blockquote type="cite">itk::ImageSeriesReader and the problem is focused in its Update() method.<br></blockquote><blockquote type="cite">I attached a simple test program which reproduces the problem and where we<br></blockquote><blockquote type="cite">can see that the Update() method is 2 times slower using ITK 3.16 vs. ITK<br></blockquote><blockquote type="cite">2.8.<br></blockquote><blockquote type="cite">We compiled both versions using Visual Studio 2008 on Windows XP 32bits and<br></blockquote><blockquote type="cite">&nbsp;we don't known if this problem also occurs in other platforms.<br></blockquote><blockquote type="cite">I wonder if other itk users have this same performance problem and if there<br></blockquote><blockquote type="cite">is anybody can help us in order to solve it.<br></blockquote><blockquote type="cite">Thanks!<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Roger<br></blockquote><blockquote type="cite">&lt;test.zip&gt;&lt;ATT00001..txt&gt;<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">========================================================<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Bradley Lowekamp<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Lockheed Martin&nbsp;Contractor for<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Office of High Performance Computing and Communications<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">National Library of Medicine<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">_____________________________________<br></blockquote><blockquote type="cite">Powered by <a href="http://www.kitware.com">www.kitware.com</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Visit other Kitware open-source projects at<br></blockquote><blockquote type="cite"><a href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Kitware offers ITK Training Courses, for more information visit:<br></blockquote><blockquote type="cite"><a href="http://www.kitware.com/products/protraining.html">http://www.kitware.com/products/protraining.html</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Please keep messages on-topic and check the ITK FAQ at:<br></blockquote><blockquote type="cite"><a href="http://www.itk.org/Wiki/ITK_FAQ">http://www.itk.org/Wiki/ITK_FAQ</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Follow this link to subscribe/unsubscribe:<br></blockquote><blockquote type="cite"><a href="http://www.itk.org/mailman/listinfo/insight-users">http://www.itk.org/mailman/listinfo/insight-users</a><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote></div></blockquote></div><br><div>
<span class="Apple-style-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; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-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; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; 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 class="Apple-converted-space">&nbsp;</span><span class="Apple-converted-space">&nbsp;</span></font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font class="Apple-style-span" face="Arial"><span class="Apple-style-span" style="font-family: Arial; "><span class="Apple-style-span" style="font-family: Arial; ">Lockheed Martin&nbsp;</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 class="Apple-converted-space">&nbsp;</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">blowekamp@mail.nih.gov</a></font></p><br class="Apple-interchange-newline"></span></span>
</div>
<br></div></body></html>