<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">That would lock the render thread though. That's unacceptable in VR simulations because we have to maintain a minimum of 90 FPS, otherwise it causes motion sickness. Even if this
wasn't a problem, it causes too much latency, so feedback, whether it's haptic, visual, or something else, will be delayed. Plus, it ends up wasted too much thread time.
<div><br>
</div>
<div>One way this could work is if we do double/triple buffering of mesh data, but that presents some other issues (multiple threads contending for mesh data at once, larger memory requirements, etc.).<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div id="divRpF458931" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Dzenan Zukic [dzenan.zukic@kitware.com]<br>
<b>Sent:</b> Thursday, June 22, 2017 4:26 PM<br>
<b>To:</b> Milef, Nicholas Boris<br>
<b>Cc:</b> Zhaohui Xia; imstk-developers@imstk.org<br>
<b>Subject:</b> Re: [Imstk-developers] high-speed thread in iMSTK<br>
</font><br>
</div>
<div></div>
<div>
<div dir="ltr"><span style="font-size:16px">"use trylock and come back later to the mesh which was already locked" - what I mean by this was to first do trylock on all the meshes a thread needs to update, and then do regular lock (which will put the thread
into the wait queue) for each mesh for which trylock failed. Once the other thread releases the lock, this thread will awaken and start updating the mesh.</span>
<div><span style="font-size:16px"><br>
</span></div>
<div><span style="font-size:16px">Regards</span></div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div class="gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dženan Zukić, PhD, Senior R&D Engineer,<span style="font-size:12.8000001907349px"> </span>Kitware (Carrboro, N.C.)</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">On Thu, Jun 22, 2017 at 4:00 PM, Milef, Nicholas Boris <span dir="ltr">
<<a href="mailto:milefn@rpi.edu" target="_blank">milefn@rpi.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">
<div>The problem with that is that if one thread runs faster than another, then it might not be updated on a certain thread. For instance, if the physics thread keep acquiring the mesh data, then the mesh data will never update on the render thread (or vice-versa).</div>
<div><br>
</div>
<div>What if we used a job-based approach? That way we would only need to lock the job submission and not the mesh data. I'm trying to think ahead for when we move normal computation or mesh interpolation to another thread (more times for contention). Logging
is already on another thread, so that adds even more contention if you try to print mesh data.</div>
<div><br>
</div>
<a href="http://seanmiddleditch.com/multi-threaded-game-engines/" target="_blank">http://seanmiddleditch.com/<wbr>multi-threaded-game-engines/</a>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr>
<div id="m_-5865965677248058387divRpF919981" style="direction:ltr"><font face="Tahoma" size="2" color="#000000"><b>From:</b> Dzenan Zukic [<a href="mailto:dzenan.zukic@kitware.com" target="_blank">dzenan.zukic@kitware.com</a>]<br>
<b>Sent:</b> Thursday, June 22, 2017 3:50 PM<br>
<b>To:</b> Milef, Nicholas Boris<br>
<b>Cc:</b> Zhaohui Xia; <a href="mailto:imstk-developers@imstk.org" target="_blank">
imstk-developers@imstk.org</a>
<div>
<div class="h5"><br>
<b>Subject:</b> Re: [Imstk-developers] high-speed thread in iMSTK<br>
</div>
</div>
</font><br>
</div>
<div>
<div class="h5">
<div></div>
<div>
<div dir="ltr">Each mesh could have its own mutex, which needs to be obtained by the thread which wants to write it. Or if a thread can do something else, use trylock and come back later to the mesh which was already locked.
<div><br>
</div>
<div>Regards</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div class="m_-5865965677248058387gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dženan Zukić, PhD, Senior R&D Engineer,<span style="font-size:12.8000001907349px"> </span>Kitware (Carrboro, N.C.)</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">On Thu, Jun 22, 2017 at 3:45 PM, Milef, Nicholas Boris <span dir="ltr">
<<a href="mailto:milefn@rpi.edu" target="_blank">milefn@rpi.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Ok, after talking to Zhaohui and profiling, it appears to be a thread synchronization issue (which is why it only shows up in debug mode).
<div><br>
</div>
<div>This is the problem:</div>
<div>The render thread reads the mesh data. If the transform hasn't been applied, it gets applied.</div>
<div>The physics thread writes the mesh data. If the transform hasn't been applied, it gets applied.</div>
<div><br>
</div>
<div>The problem is that the render thread continually modifies the data as it's reading it. Meanwhile, the physics thread is setting data very quickly (or vice-versa, depending who wins the race condition). We saw earlier that the physics thread was less than
1 FPS, but now the render thread is less than 1 FPS. We don't synchronize between threads (which is another problem), so this is what's causing this.</div>
<div><br>
</div>
<div>Any ideas on how to proceed?</div>
<div>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr>
<div id="m_-5865965677248058387m_-7647481330803936627divRpF722902" style="direction:ltr">
<font face="Tahoma" size="2" color="#000000"><b>From:</b> Imstk-developers [<a href="mailto:imstk-developers-bounces@imstk.org" target="_blank">imstk-developers-bounces@imst<wbr>k.org</a>] on behalf of Dzenan Zukic [<a href="mailto:dzenan.zukic@kitware.com" target="_blank">dzenan.zukic@kitware.com</a>]<br>
<b>Sent:</b> Friday, June 09, 2017 11:53 AM<br>
<b>To:</b> Zhaohui Xia
<div>
<div class="m_-5865965677248058387h5"><br>
<b>Cc:</b> <a href="mailto:imstk-developers@imstk.org" target="_blank">imstk-developers@imstk.org</a><br>
<b>Subject:</b> Re: [Imstk-developers] high-speed thread in iMSTK<br>
</div>
</div>
</font><br>
</div>
<div>
<div class="m_-5865965677248058387h5">
<div></div>
<div>
<div dir="ltr">Hi Zhaohui,
<div><br>
</div>
<div>something like <a href="https://stackoverflow.com/questions/41264827/setting-optimization-settings-in-visual-studio-through-cmake" target="_blank">
this</a> should work, you need to modify debug mode instead of release though.</div>
<div><br>
</div>
<div>Regards</div>
</div>
<div class="gmail_extra"><br clear="all">
<div>
<div class="m_-5865965677248058387m_-7647481330803936627gmail_signature">
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">
<div>
<div dir="ltr">Dženan Zukić, PhD, Senior R&D Engineer,<span style="font-size:12.8000001907349px"> </span>Kitware (Carrboro, N.C.)</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">On Fri, Jun 9, 2017 at 11:50 AM, Zhaohui Xia <span dir="ltr">
<<a href="mailto:unihui@gmail.com" target="_blank">unihui@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div lang="EN-US">
<div class="m_-5865965677248058387m_-7647481330803936627m_4218457722802193441WordSection1">
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Hi Dzenan,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Thanks for your advice. We need to set it for all the projects in the solution, is this correct?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Can we change it in the .CMakeList file to change the whole settings in an easy way?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Zhaohui<u></u><u></u></span></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif"> Dzenan Zukic [mailto:<a href="mailto:dzenan.zukic@kitware.com" target="_blank">dzenan.zukic@kitware.c<wbr>om</a>]
<br>
<b>Sent:</b> 2017</span><span lang="ZH-CN" style="font-size:11.0pt">年</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">6</span><span lang="ZH-CN" style="font-size:11.0pt">月</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">9</span><span lang="ZH-CN" style="font-size:11.0pt">日</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">
8:57<br>
<b>To:</b> Zhaohui Xia <<a href="mailto:unihui@gmail.com" target="_blank">unihui@gmail.com</a>><br>
<b>Cc:</b> Andinet Enquobahrie <<a href="mailto:andinet.enqu@kitware.com" target="_blank">andinet.enqu@kitware.com</a>>;
<a href="mailto:imstk-developers@imstk.org" target="_blank">imstk-developers@imstk.org</a></span></p>
<div>
<div class="m_-5865965677248058387m_-7647481330803936627h5"><br>
<b>Subject:</b> Re: [Imstk-developers] high-speed thread in iMSTK<u></u><u></u></div>
</div>
<p></p>
<div>
<div class="m_-5865965677248058387m_-7647481330803936627h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">Hi Zhaohui,<u></u><u></u></p>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">to enable a somewhat higher speed of debug mode, you can manually change the compiler settings for individual projects, see
<a href="https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx" target="_blank">
this</a> and <a href="https://msdn.microsoft.com/en-us/library/k1ack8f1.aspx" target="_blank">
this</a>. Enabling optimizations increases difficulty of debugging, so you might enable more optimizations for the Visual Studio projects you are not trying to debug, and keep optimization disabled or at a low setting for the ones you are modifying.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal">Regards<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"><br clear="all">
<u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Dženan Zukić, PhD, Senior R&D Engineer,<span style="font-size:9.5pt"> </span>Kitware (Carrboro, N.C.)<u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal">On Thu, Jun 8, 2017 at 3:33 PM, Zhaohui Xia <<a href="mailto:unihui@gmail.com" target="_blank">unihui@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none; border-left:solid #cccccc 1.0pt; padding:0cm 0cm 0cm 6.0pt; margin-left:4.8pt; margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Hi Andinet,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">I am afraid I made a mistake. The device thread is definitely a high-speed thread. I figure out the issue, because I forget to close something when I change
the code in that thread.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">I think there is no performance bottlenecks currently in the main thread under
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:red">Release
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">mode (60-70HZ), since the mesh size (1000 vertices) is not very big now.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">But under
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:red">Debug
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">mode, the speed is too slow, it is just
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:red">0.16HZ
</span><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">for the same mesh. Do we have any ways to improve it, e.g. changing some settings? It would be very helpful for work if it can run faster.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Thanks,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft JhengHei Light",sans-serif; color:#1f497d">Zhaohui</span><u></u><u></u></p>
<p class="MsoNormal"><b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">From:</span></b><span style="font-size:11.0pt; font-family:"Calibri",sans-serif"> Andinet Enquobahrie [mailto:<a href="mailto:andinet.enqu@kitware.com" target="_blank">andinet.enqu@kitware.c<wbr>om</a>]
<br>
<b>Sent:</b> 2017</span><span lang="ZH-CN" style="font-size:11.0pt; font-family:等线">年</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">6</span><span lang="ZH-CN" style="font-size:11.0pt; font-family:等线">月</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">8</span><span lang="ZH-CN" style="font-size:11.0pt; font-family:等线">日</span><span style="font-size:11.0pt; font-family:"Calibri",sans-serif">
13:29<br>
<b>To:</b> Zhaohui Xia <<a href="mailto:unihui@gmail.com" target="_blank">unihui@gmail.com</a>><br>
<b>Cc:</b> <a href="mailto:imstk-developers@imstk.org" target="_blank">imstk-developers@imstk.org</a><br>
<b>Subject:</b> Re: [Imstk-developers] high-speed thread in iMSTK</span><u></u><u></u></p>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">Zhaohui<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Can you profile your code and let us know the key performance bottlenecks in iMSTK?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">This is something Dr. Des is also interested. We will be exploring ways of accelerating some of the modules.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">thanks<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal">Andinet<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal">On Thu, Jun 8, 2017 at 12:40 PM, Zhaohui Xia <<a href="mailto:unihui@gmail.com" target="_blank">unihui@gmail.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none; border-left:solid #cccccc 1.0pt; padding:0cm 0cm 0cm 6.0pt; margin-left:4.8pt; margin-top:5.0pt; margin-right:0cm; margin-bottom:5.0pt">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif">Hi All,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif">Do we have a high-speed thread (e.g. 1000HZ) in iMSTK? I tried different modules e.g VRPNDeviceServer (device) and SceneMange (main thread), but the maximum frame rates of them are
60-70HZ under Release mode.</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif">I also tried to set the Loopdelay to 0.001 or smaller (from my understand, its default value is 0 should have the fastest speed, but it also 60-70HZ).</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif">Thanks,</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei UI",sans-serif">Zhaohui</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Verdana",sans-serif; color:#3b3838; background:white">------------------------------<wbr>------------------------------<wbr>------------------------------<wbr>-----------------</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Microsoft YaHei Light"; background:white">Zhaohui Xia, Ph.D.</span><span style="font-family:"Microsoft YaHei Light""><br>
<span style="background:white">Postdoctoral Research Associate, Center for Modeling, Simulation and Imaging in Medicine (CeMSIM)</span><br>
<span style="background:white">Rensselaer Polytechnic Institute</span></span><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
Imstk-developers mailing list<br>
<a href="mailto:Imstk-developers@imstk.org" target="_blank">Imstk-developers@imstk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/imstk-developers" target="_blank">http://public.kitware.com/mail<wbr>man/listinfo/imstk-developers</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<u></u><u></u></p>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
<p class="MsoNormal">-- <u></u><u></u></p>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal">Andinet Enquobahrie, Ph.D., MBA<br>
Director of Medical Computing<br>
Kitware, Inc.<br>
<br>
<a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal"><a href="tel:%28919%29%20969-6990%20x311" target="_blank"><span style="font-size:9.5pt; color:#1155cc">(919) 969-6990 x311</span></a><u></u><u></u></p>
</div>
<div>
<div>
<blockquote style="border:none; border-left:solid #cccccc 1.0pt; padding:0cm 0cm 0cm 6.0pt; margin-left:4.8pt; margin-top:5.0pt; margin-right:0cm; margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="font-size:9.5pt"> </span><u></u><u></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><br>
______________________________<wbr>_________________<br>
Imstk-developers mailing list<br>
<a href="mailto:Imstk-developers@imstk.org" target="_blank">Imstk-developers@imstk.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/imstk-developers" target="_blank">http://public.kitware.com/mail<wbr>man/listinfo/imstk-developers</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</div>
</body>
</html>