<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hello again,<br>
</p>
<p><br>
</p>
<p>For posterity, and in case anyone else has similar problems, I ended up using itkSliceBySliceImageFilter as an example, and created a subclass of my filter that processes 1 slice at a time. Now I can get progress reports after each slice, so the user has
 an idea what is happening. Some process faster than others depending on the mask, but at least there is *some* kind of feedback.<br>
</p>
<p><br>
</p>
<p>Many thanks,<br>
</p>
<p>Toby<br>
</p>
<p><br>
</p>
<div dir="ltr" style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Community <community-bounces@itk.org> on behalf of Wood, Tobias <tobias.wood@kcl.ac.uk><br>
<b>Sent:</b> 15 June 2015 16:18<br>
<b>To:</b> Bradley Lowekamp<br>
<b>Cc:</b> community@itk.org<br>
<b>Subject:</b> Re: [ITK] ProgressReporter and Multi-Threading</font>
<div> </div>
</div>
<div>
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Hello Brad,<br>
</p>
<p><br>
</p>
<p>Thanks for the input. After monitoring EndEvent and a bit more debugging, I think the problem is that this filter can have a mask set, which skips pixels, and unmasked pixels can take several seconds to process. Perhaps unsurprisingly, the unmasked region
 tends to be in the centre of the image. I assume that each thread gets a contiguous region to process, and that thread 0 is given one of the corner regions to process? If so the way I have implemented things I think thread 0 is likely to get a region that
 contains no or few pixels to process, while other threads get the heavy work to do. I don't want to add anything complicated, so I will have to think about what user feedback to provide.<br>
</p>
<p><br>
</p>
<p>If you are interested, the filter in question is at <a href="https://github.com/spinicist/QUIT/blob/master/Source/Filters/ApplyAlgorithmFilter.hxx" id="LPlnk280877">https://github.com/spinicist/QUIT/blob/master/Source/Filters/ApplyAlgorithmFilter.hxx</a>.
 I apologise in advance as this code would not meet the ITK style guide! The actual "algorithm" definitions are in the main files in the /Source directory. This isn't an image registration project, but I have found the ITK framework extremely useful regardless.<br>
<br>
</p>
<p>Best wishes,<br>
</p>
<p>Toby<br>
</p>
<p><br>
</p>
<div style="word-wrap:break-word; color:rgb(0,0,0)">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Bradley Lowekamp <blowekamp@mail.nih.gov><br>
<b>Sent:</b> 15 June 2015 13:51<br>
<b>To:</b> Wood, Tobias<br>
<b>Cc:</b> community@itk.org<br>
<b>Subject:</b> Re: [ITK] ProgressReporter and Multi-Threading</font>
<div> </div>
</div>
<div>Hello,
<div><br>
</div>
<div>There are lots of reasons this could occur.</div>
<div><br>
</div>
<div>1) You are correct that it could be because you algorithms is horribly unbalanced and not making even use of the threads. I don't know your filter.</div>
<div>2) Your filter could be completed, then your program is doing something else. Observe other events such EndEvent to know when all threads in the filter have completed.</div>
<div>3) This ITK approach is generally reasonably accurate, and more complicated thread locking methods are generally not worth the trouble or performance penalty.</div>
<div><br>
</div>
<div>I suspect there is a problem with your algorithm or how you are using the progress reporter.</div>
<div><br>
</div>
<div>HTH,</div>
<div>Brad</div>
<div><br>
<div>
<div>On Jun 15, 2015, at 5:15 AM, Wood, Tobias <<a href="mailto:tobias.wood@kcl.ac.uk">tobias.wood@kcl.ac.uk</a>> wrote:</div>
<br class="Apple-interchange-newline">
<blockquote type="cite">
<div dir="ltr" style="font-family:Helvetica; font-size:12px; font-style:normal; font-variant:normal; font-weight:normal; letter-spacing:normal; line-height:normal; orphans:auto; text-align:start; text-indent:0px; text-transform:none; white-space:normal; widows:auto; word-spacing:0px">
<div id="divtagdefaultwrapper" style="font-size:12pt; background-color:rgb(255,255,255); font-family:Calibri,Arial,Helvetica,sans-serif">
<div style="margin-top:0px; margin-bottom:0px">Hello,<br>
</div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
<div style="margin-top:0px; margin-bottom:0px">I am using ITK 4.7.2. I added a ProgressReporter to the<span class="Apple-converted-space"> </span><span style="font-size:12pt">ThreadedGenerateData() method of a filter I am writing, with the following definition:</span></div>
<div style="margin-top:0px; margin-bottom:0px"><span style="font-size:12pt; font-family:Calibri,Arial,Helvetica,sans-serif"><br style="font-family:Calibri,Arial,Helvetica,sans-serif">
</span></div>
<pre style="margin-top:0px; margin-bottom:0px"><span style="font-family:Calibri,Arial,Helvetica,sans-serif">ProgressReporter</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif"> </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">progress(</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">this</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">,</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif"> </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">threadId,</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif"> </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">region.GetNumberOfPixels(),</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif"> </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">10</span><span style="font-family:Calibri,Arial,Helvetica,sans-serif">);</span><br style="font-family:Calibri,Arial,Helvetica,sans-serif"></pre>
<pre style="margin-top:0px; margin-bottom:0px"><br style="font-family:Calibri,Arial,Helvetica,sans-serif"></pre>
<pre style="margin-top:0px; margin-bottom:0px"><span style="font-family:Calibri,Arial,Helvetica,sans-serif">as per the documentation here: </span><span style="font-family:Calibri,Arial,Helvetica,sans-serif"><a href="http://www.itk.org/Doxygen/html/classitk_1_1ProgressReporter.html" id="LPlnk152212">http://www.itk.org/Doxygen/html/classitk_1_1ProgressReporter.html</a>. I then added a simple itk::Command subclass to print progress in percent.</span></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif"><br></font></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif">However, when I run the program, the progress quite quickly reaches 100%, then no further ProgressEvents are raised. The program continues to execute and does finish eventually. </font><span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt">After looking at the code for ProgressReporter, I assume this is because thread 0 somehow out-competes the other threads and finishes its processing quite fast. The other threads then continue to run peacefully, but they don't touch the Progress counter.</span></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif"><br></font></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif">Is there a way to get a more accurate Progress report with multi-threading? Am I missing something?</font></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif"><br></font></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif">Thanks in advance,</font></pre>
<pre style="margin-top:0px; margin-bottom:0px"><font face="Calibri, Arial, Helvetica, sans-serif">Toby<br></font><br></pre>
<div style="margin-top:0px; margin-bottom:0px"><span style="font-size:12pt"><br>
</span></div>
<div style="margin-top:0px; margin-bottom:0px"><br>
</div>
</div>
_______________________________________________<br>
Community mailing list<br>
<a href="mailto:Community@itk.org">Community@itk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/community">http://public.kitware.com/mailman/listinfo/community</a></div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>