<div dir="ltr">Hi,<div><br></div><div>When you mention using intrinsics to speed something up it&#39;s always interesting to know what kind of speedup this gives.</div><div><br></div><div>Also while blue noise is an interesting experiment, it&#39;s not a part of GSoC so not sure what it is doing in the report.</div><div><br></div><div>In Blender we use threaded EXR decoding, so that could be a reason why OIIO is poor in performance. It had some options for threading AFAIR, so make sure the IO is threaded there.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Aug 13, 2016 at 5:47 AM, Lukas Stockner <span dir="ltr">&lt;<a href="mailto:lukas.stockner@freenet.de" target="_blank">lukas.stockner@freenet.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi!<br>
<br>
This week, I started over the weekend by doing some minor changes and fixes:<br>
 - Now, Cycles Standalone has a command line option to set the tile size (ffea3f5a in the branch, ef27d8ec in master)<br>
 - Revert a &quot;fix&quot; that actually totally broke Glossy/Glass GGX (10cb9a19)<br>
 - Fix building after the debug_fpe commit (edcf60b4)<br>
 - Fix a wrong calculation of the feature matrix norm (d23f0003)<br>
 - Remove some useless files I added a while back by accident<br>
 - Moving denoise utility and prefiltering functions into separate files to clean up the main file (b7dc25cb)<br>
<br>
The next larger feature was standalone denoising of single frames: By rendering with denoising information enabled (no need to activate denoising itself) and saving the result as Multilayer EXR, that EXR can then be denoised by Cycles Standalone to produce a clean output file. In itself, that feature is mainly useful for development, since it allows to pre-render once and just test the filter. (Commit: 3f94371a)<br>
<br>
After that, I decided to go for the SIMD kernel optimization next. That resulted in:<br>
 - A fix for a pretty longstanding hidden issue in master, where SSE4.1 function fallbacks were accidentally also used to override the native functions (cf017e81)<br>
 - A few SSE utility functions, like horizontal maximum and sum (741a2453)<br>
 - A SSE4.1-optimized version of the first kernel, which used to take up most of the time. The speedup in that function depends on a few factors, but it&#39;s usually about 2-3 times faster (dba99c49).<br>
 - A SSE4.1-optimized version of the NLM prefiltering kernel, which reduces prefiltering time by a factor of about 3 (95fa4836)<br>
Together, these functions make denoising more than twice as fast on compatible processors (pretty much any processor since 2011).<br>
<br>
Next, I created a clean implementation of the Blue-Noise dithering patch - now under review at D2149. While doing so, I also fixed a problem in master regarding CUDA texture limits (bbbc079a), fixed the KernelIntegrator structure padding that was wrong since the Light Portal commit (82e65abf) and added a CTest that checks for problems like that in the future (7c3a06c3).<br>
<br>
One of the components of D2149, the simulated annealing tool used to precalculate the dither matrix, took a bit of time to optimize - but after a number of improvements, such as approximate math functions and yet another SSE4.1-optimized code path, it now runs 9 times as fast! A simulation pass with 3 Billion iterations is running right now, I&#39;ll upload the result once it&#39;s done.<br>
<br>
After that, I finished the standalone denoising by finally adding the inter-frame denoising mode (1c675f1c, e0208200, 2af90268) - now, the denoiser can use previous and later frames to avoid flickering and produce a better result in general!<br>
The filtering is a bit slow, though - one reason for that is that OIIO actually needs about 10 seconds to read five Multilayer EXRs from the disk, and I don&#39;t yet understand why (Disk I/O isn&#39;t the bottleneck, I even tried a Ramdisk). Also, it&#39;s just more pixels - but that could be improved by doing things like using a smaller half window for secondary frames.<br>
<br>
<br>
<br>
So, since next week is the final GSoC week, I&#39;ll spend most of my time on final documentation.<br>
The project in general is in a working shape now, I covered the main parts of the proposal (except for possibly adaptive sampling), but the branch isn&#39;t close to being finished and polished yet.<br>
<br>
Of course, though, I&#39;ll continue to work on it after the GSoC ends - my goal is to get the denoiser into master, after all!<br>
<span class="HOEnZb"><font color="#888888"><br>
Lukas<br>
<br>
</font></span><br>______________________________<wbr>_________________<br>
Soc-2016-dev mailing list<br>
<a href="mailto:Soc-2016-dev@blender.org">Soc-2016-dev@blender.org</a><br>
<a href="https://lists.blender.org/mailman/listinfo/soc-2016-dev" rel="noreferrer" target="_blank">https://lists.blender.org/<wbr>mailman/listinfo/soc-2016-dev</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div><span style="color:rgb(102,102,102)">With best regards, Sergey Sharybin</span></div></div>
</div>