<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SmoothVideo Project — Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
		<link>https://www.svp-team.com/forum/viewtopic.php?id=2752</link>
		<atom:link href="https://www.svp-team.com/forum/extern.php?action=feed&amp;tid=2752&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[The most recent posts in Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll.]]></description>
		<lastBuildDate>Thu, 03 Sep 2015 05:47:40 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53135#p53135</link>
			<description><![CDATA[<p>That Reddit source doesn&#039;t disprove the assertion that Nvidia can&#039;t perform true async compute.&nbsp; Given its current &quot;closing statement&quot;, I believe it is misunderstanding what &quot;async compute&quot; means in the current context.&nbsp; I&#039;d trust AMD staking its rep with such a claim over some newbie dev cobbling together a most dubious test (even that thread admits that the test is dubious).&nbsp; Besides, Nvidia&#039;s whole MO is to highly optimize its drivers on a per-game basis for DX11, and wasn&#039;t betting on DX12 being widely adopted, so why would they have baked real support for it into their GPUs?</p><p>CUDA&#039;s supposed advantages are rapidly becoming irrelevant because Apple has thrown it out and replaced it with modern(ish) OpenCL&nbsp; capable hardware instead in its newest macbooks, something that really needed to happen (and should have happened years ago TBH).</p><div class="quotebox"><blockquote><p>Or maybe most people still aren&#039;t even aware of the potential gains of simultaneous computation with a dGPU and an iGPU?</p></blockquote></div><p>I believe it is the latter, combined with the lack of convenient tools put out by the hardware makers (basically just AMD) to facilitate HSA.&nbsp; Consoles have had HSA capabilities for years now and devs are just now getting around to using the GPU as a &quot;coprocessor&quot; and it&#039;s unclear if they&#039;ve finally started to embrace multithreaded rendering on those machines (which they need and were designed for).</p>]]></description>
			<author><![CDATA[null@example.com (VB_SVP)]]></author>
			<pubDate>Thu, 03 Sep 2015 05:47:40 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53135#p53135</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53130#p53130</link>
			<description><![CDATA[<div class="quotebox"><cite>VB_SVP wrote:</cite><blockquote><p>Async Compute is related to HSA as it enables the GPU to be used to perform computation in lieu of the CPU without tanking the GPU&#039;s performance (and it is functionality that Nvidia GPUs don&#039;t have). With the iGPUs, so many of the Intel and AMD ones are rather useless for GPU computation as they lack the functionality outright or &quot;pull an Nvidia&quot; and emulate it, which lacks the performance.&nbsp; Tragically, AMD took too long to put GCN on its line of APUs so all pre-2014 APUs (Kaveri) are stuck with non-async compute, non-HSA enabled GPUs based on pre-GCN architecture, even though GCN was available on their dGPUs in 2011/2012.&nbsp; Compounding that brutality, even though they are quite capable of working in some capacity with Vulkan/DX12, AMD has no plans to support those APIs on pre-GCN GPUs.</p></blockquote></div><p>Firstly, I would just like to clear up any confusion regarding Nvidia&#039;s support for asynchronous computation, see here: <a href="https://www.reddit.com/r/nvidia/comments/3j5e9b/analysis_async_compute_is_it_true_nvidia_cant_do/">Nvidia supports Async Compute</a></p><p>I still think this whole iGPU/APU thing is a very bad idea (as long as people keep demanding they be low power as well). Think about it, a CPU has to process all the sequential program instructions (even modern software like new game engines, that completely utilize 4-cores, do so with four threads that do a lot of sequential computations), and you want it to be very good at that sort of thing to be able to keep up with modern GPUs (especially since transistor geometry scaling still brings huge performance gains to GPUs).<br />GPUs, on the other hand, aren&#039;t very good at dealing with things like logic expressions, branching (&#039;if&#039; , &#039;else&#039;) and nested &#039;for&#039; loops. To use your example of SVP with duplicate frame detection by using the iGPU, the basic program flow of the most computationally intensive subroutine would look something like this:</p><p>&gt;Get the current frame, the next frame, and their representations as a plane of blocks.</p><p>&gt;Now get the &#039;quality&#039; of the current-to-next and the next-to-current motion vectors by running a convolution with each one of the current frame&#039;s blocks over the regions of the next frame that correspond to the center location of the current block being tested + the requested motion-vector range to be searched, in every direction. Do the same with the next frame&#039;s blocks convolving over the current frame to get the &#039;reverse&#039; motion-vectors.</p><p>&gt;Select the &#039;best&#039; motion-vector for each block, for both the next-to-current and the current-to-next frames. </p><p>&gt;Interpolate a frame somewhere between the current and next frames by &#039;moving&#039; one of the following blocks by an amount and direction dictated by a function of how good the motion-vector for the next-to-current and the current-to-next frames are: <br />#If there is occluded motion, use only the block from frame with the unoccluded pixels; <br />#If one block&#039;s motion-vector is much &#039;better&#039; than the other frame&#039;s corresponding block&#039;s motion-vector, only use the &#039;good&#039; one;<br />#If both motion-vecotors are of a similar quality, compose the new frame of a weighted combination of both, where the weight takes into account how &#039;good&#039; the motion-vector is, as well as how close (temporally) the frame that the block is being taken from is to the interpolated frame (both frames will be equally close for simple frame doubling). <br />(In reality, you should loop through each pixel of the &#039;new&#039; frame, that sits between the current and the next frames, and compute the interpolated value as a function of all the motion vectors that can reach that pixel from both frames. If you only compare the two corresponding blocks from each frame and then move the best one to the position in the interpolated frame that is dictated by it&#039;s motion-vector, then you may get regions of pixels without any value, i.e. &#039;holes&#039; in your interpolated frame.)</p><p>Now, you would like to check for a duplicate frame, which would have a large majority of the motion-vectors simply being (0,0). That would only be possible near the end of the algorithm (when you know the &#039;best&#039; motion-vectors for each direction), where you would then choose to &#039;discard&#039; the next frame and redo the calculation with the current frame and the frame after the &#039;discarded&#039; one (except if the number of repeated frames remains constant throughout the video, in which case you can simple use something like one or more Avisynth calls to SelectEven() or SelectOdd(), before the video gets to SVP&#039;s interpolation functions). This loop will continue until you find a next frame with some useful motion between it and the current frame. If you then simply interpolate the number of discarded frames multiplied by your interpolation factor, then &#039;jump over&#039; those &#039;discarded&#039; frames and continue your interpolation from the &#039;next&#039; frame you used for the calculation, then you should have the same number of frames as if you had done the interpolation for all those duplicate frames. The computational cost would also come to about the same, but it would require some more logical comparisons to check whether or not you need to drop the frame. Those checks also have to be done for all frames that actually <strong>do</strong> contain motion, further decreasing performance. Now, this wouldn&#039;t be too bad on a CPU, but here is where the problem with APU processing comes in:</p><p>GPUs are <strong>very</strong> good at doing things like massive matrix calculations, image convolutions, interpolated frame composition, etc., but slow down <strong>immensely</strong> if you don&#039;t frame the problem as a matrix computation. Basically, lets say you compute the absolute difference between 2 frames, as an unsigned value at least 16-bits in size, pixel by pixel, via 2 methods.</p><p>First method: You do everything on the GPU via two loops (the outer one for, say, the columns and the nested one for the rows) and inside the inner (nested) loop, with which you then calculate:<br />a=pixel1-pixel2; if(a&lt;0) then return -a, else return a;</p><p>Second method: You only do the following on the GPU: a1 = frame1-frame2; a2 = frame2-frame1; (both done as one massive SIMD command).<br />Thereafter, on the CPU, you loop though every pixel in a1 via two &#039;for&#039; loops (just like in the above method for the GPU) and for each pixel you do the following:<br />if(pixel_a1&lt;0) then pixel_a1=pixel_a2;</p><p>If done on a discrete, separate CPU and GPU, the speedup of method 2 over method 1 can be anywhere from 100% to 1000%. Newer GPU compute architectures (and especially NVIDIA&#039;s CUDA compiler) are getting better and better at reducing this difference, but the core principle remains the same.</p><p>If, however, you have an iGPU, then porting some calculations over to it from the CPU <strong>may or may not</strong> bring a performance advantage. Since you are stuck with OpenCL for iGPU programming, you either need to have basically been on the design team for the GPU you are programming (to be able to transform problematic code into the most optimal form for the iGPU you are targeting), or you need to avoid such code entirely (such as in method 2).<br />{Yes, I know, a lot of people try desperately to justify their purchases by saying things like &quot;OpenCL is just as good as CUDA for X, but supports everything so it&#039;s better&quot;. Well, technically yes, you can do almost everything in OpenCL that you can do in CUDA, the problem is the difficulty of doing so. GPU programming is <strong>DIFFICULT</strong>, its <strong>very</strong> difficult, which is the main reason why we don&#039;t see apps utilizing the enormous potential computational performance inside them more often.<br />Trying to get the same performance from the same NVIDIA GPU (or an AMD one with an equivalent theoretical computational throughput) with OpenCL that you got from a CUDA program is just making a difficult task so much harder, that almost no one does manage to get the same ultimate performance in a real-world application.}</p><p>Finally, even with optimal code, an iGPU has to split its <strong>very</strong> limited power with the CPU. Compared to the same CPU and GPU as discrete products, the maximum performance of even an optimally coded 50-50 algorithm (one that needs an exactly equal amount of CPU and GPU power) will take anywhere from 50% to even 100% longer on an integrated APU comprised of exactly the same processors. However, if you are against even mildly overclocking your setup (for some strange reason some people, who are not even electrical engineers themselves, seem to think that a moderate overclock reduces the lifespan of your components by an appreciable amount), then the difference will of course be much smaller. You can even go further and <strong>underclock</strong> the discrete setup to achieve the same performance as the integrated setup, but that only serves to further show how power limited APUs are.</p><p>Its also not just limited power that constrains performance. Having to share the CPU&#039;s memory means the iGPU has to live with a minuscule portion of a similar dGPU&#039;s memory bandwidth. On-chip Crystal-Lake style L4 memory caches can help in this regard, but they are so tiny in comparison to discrete GPU memory, that doing any sort of video processing through only that cache is completely impossible.</p><p>APUs are a nice idea, don&#039;t get me wrong. Its easy to think of an iGPU similarly to some enhanced instructions set, such as AVX or FMA, that can serve to massively improve upon a CPU&#039;s performance in certain tasks. But in practice, it just seems like having the CPU keep the iGPU on constant life support (with woeful GPU memory bandwidth and power-gating killing entire blocks every few milliseconds) just seems to negate all of the advantages in having it so close to the CPU. If, however, the choice is between two similar processors, where one has an iGPU and the other which doesn&#039;t<br />Also, I really don&#039;t get this reluctance to develop for a &#039;closed&#039; architecture. No matter what percentage of the market a certain GPU has, why not develop your application for the one that can actually deliver the required performance? If people really want to use a certain application, then they will buy the required hardware. This is how it works in the industry, and also in the consumer market for most non-software things (say you&#039;re following a cooking recipe, which calls for baking a cake in an oven, but you don&#039;t have an oven. Is it really necessary to rewrite the recipe to obtain at least something resembling a cake by using another, more readily available, piece of hardware. A hot stone, perhaps?).</p><p>I just think that this pathological fear of &#039;vendor lock-in&#039; is unnecessarily limiting the applications and features in applications that are available to us. I mean, how many programs are there that can, for instance, do what you want (i.e. interpolate a video stream containing many duplicate frames of varying lengths)?</p><p>Thinking about this in another way, paints iGPUs in a <strong>much</strong> better light. What about systems that have a discrete GPU, but where the CPU just also happens to have an iGPU. With the massive transistor budgets available these days, simply integrating an iGPU onto the CPU die shouldn&#039;t sacrifice too much potential performance (if any).<br />Now we have a scenario where people have capable CPUs and discrete GPUs, but where coding in OpenCL allows developers to access a second, integrated iGPU when and where it would be most beneficial to do so.<br />Through OpenCL programming an AMD iGPU and an NVIDIA dGPU can simultaneously even be working on the exact same problem, with each GPU doing work that is most suited to its compute architecture! <br />The CPU&#039;s available power budget can also, theoretically, be utilized much more completely and effectively by interleaving CPU and GPU commands (such as doing some GPU work while the CPU waits for data to come in from the dGPU, for example). If the iGPU&#039;s wake up and sleep sequences are fast enough, it can even be used <strong>in place of</strong> SIMD instructions like SSE, AVX and FMA. The potential benefits in this scenario, are simply unimaginable.</p><p>Maybe I&#039;m just a bit of a pessimist, but it doesn&#039;t seem like we will be seeing much use of this second usage scenario of HSA. I just don&#039;t get why though. Maybe the lifetime of a GPU compute architecture is just too short for developers to spend the time on optimizing an OpenCL workflow for that specific processor?<br />Or maybe most people still aren&#039;t even aware of the potential gains of simultaneous computation with a dGPU and an iGPU?</p>]]></description>
			<author><![CDATA[null@example.com (xenonite)]]></author>
			<pubDate>Thu, 03 Sep 2015 02:06:02 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53130#p53130</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53129#p53129</link>
			<description><![CDATA[<div class="quotebox"><cite>Nintendo Maniac 64 wrote:</cite><blockquote><p>81% of the <em>discrete</em> GPU market; for the total consumer GPU market one must also consider integrated graphics.&nbsp; Steam&#039;s hardware survey is probably the best-case scenario for Nvidia outside of professional markets, yet even then Nvidia &quot;only&quot; has 52% market share while Intel has 20% and AMD has 27%:<br /><a href="http://store.steampowered.com/hwsurvey/">http://store.steampowered.com/hwsurvey/</a></p><br /><p>Oh, and I think you posted the wrong link - Async Shaders are something quite different from HSA.</p></blockquote></div><p>Async Compute is related to HSA as it enables the GPU to be used to perform computation in lieu of the CPU without tanking the GPU&#039;s performance (and it is functionality that Nvidia GPUs don&#039;t have).&nbsp; </p><p>With the iGPUs, so many of the Intel and AMD ones are rather useless for GPU computation as they lack the functionality outright or &quot;pull an Nvidia&quot; and emulate it, which lacks the performance.&nbsp; Tragically, AMD took too long to put GCN on its line of APUs so all pre-2014 APUs (Kaveri) are stuck with non-async compute, non-HSA enabled GPUs based on pre-GCN architecture, even though GCN was available on their dGPUs in 2011/2012.&nbsp; Compounding that brutality, even though they are quite capable of working in some capacity with Vulkan/DX12, AMD has no plans to support those APIs on pre-GCN GPUs.&nbsp; </p><p>I&#039;m not sure how feasible it is for SVP to scan for and eliminate duplicate frames but now that GPUs, at least GCN 1.1+ GPUs, have hardware-accelerated SAD functionality I&#039;d really like to see it happen as duplicate frames are a becoming a serious problem nowadays in animation (Not even SVP can save a 24 FPS video that has every frame triplicated so its effectively 8 FPS).</p>]]></description>
			<author><![CDATA[null@example.com (VB_SVP)]]></author>
			<pubDate>Wed, 02 Sep 2015 21:42:04 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53129#p53129</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53120#p53120</link>
			<description><![CDATA[<p>81% of the <em>discrete</em> GPU market; for the total consumer GPU market one must also consider integrated graphics.&nbsp; Steam&#039;s hardware survey is probably the best-case scenario for Nvidia outside of professional markets, yet even then Nvidia &quot;only&quot; has 52% market share while Intel has 20% and AMD has 27%:<br /><a href="http://store.steampowered.com/hwsurvey/">http://store.steampowered.com/hwsurvey/</a></p><br /><p>Oh, and I think you posted the wrong link - Async Shaders are something quite different from HSA.</p>]]></description>
			<author><![CDATA[null@example.com (Nintendo Maniac 64)]]></author>
			<pubDate>Wed, 02 Sep 2015 06:18:18 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53120#p53120</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53119#p53119</link>
			<description><![CDATA[<div class="quotebox"><cite>Nintendo Maniac 64 wrote:</cite><blockquote><p>The problem is that Bulldozer&#039;s general performance was worse than even a Phenom II x6 in several cases, so considering how much faster the likes of an Intel i7 was, devs saw no reason to purchase such a processor and to develop for it.</p><p>I believe a similar thing is going on with HSA currently - devs see no reason to purchase a Kaveri APU when it&#039;ll be sub-par at everything else that they do, so they don&#039;t even bother.&nbsp; In this case we probably won&#039;t see more widespread usage of HSA until we have Zen APUs, and that&#039;s assuming that Jim Keller is as good as he has been in the past (a game console or server using an HSA-enabled APU would also very likely take advantage of HSA, but that&#039;s beside the point here).</p></blockquote></div><p>There was always a glimmer of hope for Bulldozer when it, in multithreaded tasks, was shown punching up against i7s (in video encoding it still beats any Intel processor that I could have bought for the same price).&nbsp; I&#039;ve long heard it said in the tech sector that had developers embraced FMA then it would have done much to alleviate Bulldozer&#039;s somewhat lacking floating-point performance but we might never know.&nbsp; In a sense, Bulldozer is AMD&#039;s &quot;Itanium&quot;.&nbsp; IMO the problem is that AMD expected devs to use new instruction sets and HSA but didn&#039;t really provide them with the tools to do so; this thread&#039;s title is a sad reminder of that lol.</p><p>Though it&#039;s been <a href="http://wccftech.com/async-shaders-give-amd-big-advantage-dx12-performance-oxide-games/">reported</a> that console developers are finally, after several years of having the functionality just sitting there, starting to use HSA and seeing gains of &quot;30% GPU performance&quot;.</p><p>But the biggest problem with all of this is availability.&nbsp; Nvidia&#039;s GPUs aren&#039;t much for this sort of task and they have 81% of the GPU market and Piledriver+/Haswell+ CPUs aren&#039;t all that ubiquitous yet still.</p>]]></description>
			<author><![CDATA[null@example.com (VB_SVP)]]></author>
			<pubDate>Wed, 02 Sep 2015 04:21:04 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53119#p53119</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53112#p53112</link>
			<description><![CDATA[<p>The problem is that Bulldozer&#039;s general performance was worse than even a Phenom II x6 in several cases, so considering how much faster the likes of an Intel i7 was, devs saw no reason to purchase such a processor and to develop for it.</p><p>I believe a similar thing is going on with HSA currently - devs see no reason to purchase a Kaveri APU when it&#039;ll be sub-par at everything else that they do, so they don&#039;t even bother.&nbsp; In this case we probably won&#039;t see more widespread usage of HSA until we have Zen APUs, and that&#039;s assuming that Jim Keller is as good as he has been in the past (a game console or server using an HSA-enabled APU would also very likely take advantage of HSA, but that&#039;s beside the point here).</p>]]></description>
			<author><![CDATA[null@example.com (Nintendo Maniac 64)]]></author>
			<pubDate>Tue, 01 Sep 2015 18:40:07 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53112#p53112</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53094#p53094</link>
			<description><![CDATA[<div class="quotebox"><cite>VB_SVP wrote:</cite><blockquote><p>I&#039;d love to see FMA and GPU SAD (especially as that could be used to efficiently detect and delete duplicate frames, further smoothing out video) come into use.</p></blockquote></div><p>Me too. Even though I have &#039;invested&#039; in AVX2, I&#039;d much rather leave my CPU &#039;under utilized&#039; if that means we can get GPU-based pixel metrics calculation. Heck, without having to do all the pixel metric calculations, the CPU would be much less loaded than it is now, so AVX2 would be less necessary as a result. GPU-based calculations would also open the door to <strong>much</strong> better image quality (think SSD/SATD in stead of SAD).</p><p>Actually, FMA would also help to compute such pixel metrics much more efficiently (although not nearly on the same level as GPU acceleration would). The only problem with that would be the performance required (even with FMA), would probably put it out of practical reach for all AMD owners anyway. Maybe Zen would make it more practical?<br />FMA also doesn&#039;t really help much with standard SAD calculation and would require someone to write the entire assembly functions from scratch (I don&#039;t think the x264 codebase includes any FMA pixel metrics), but it would be of great benefit to things such as bicubic frame resizing, gamma correction and colorspace conversion (if and when SVP makes use of such features (actually, SVP already uses frame resizing, but that could maybe be implemented more efficiently in the svpflow2.dll GPU-accelerated part of SVP)).</p><div class="quotebox"><cite>VB_SVP wrote:</cite><blockquote><p>As an AMD user, which got with the FMA program years before Intel did</p></blockquote></div><p>That really is extremely sad. Even though I have only once owned an AMD CPU (the original FX series), I really hoped that the Bulldozer architecture would encourage developers to change their coding styles towards relying more on specific per-processor optimizations and less on outdated, general instructions sets. Since the &#039;thin-and-light&#039; craze has capped CPU performance, the only big performance advances have been, and will continue to be, made by developing increasingly specialized and exclusive instruction sets that are optimized for specific classes of problems.<br />If FMA had caught on, Bulldozer&#039;s performance would have exceeded Intel&#039;s in all video processing (and gaming post-processing) applications, among others, which would have forced a new &#039;instruction set arms race&#039; and continued linear performance scaling together with Moore&#039;s law.</p>]]></description>
			<author><![CDATA[null@example.com (xenonite)]]></author>
			<pubDate>Tue, 01 Sep 2015 14:16:34 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53094#p53094</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53086#p53086</link>
			<description><![CDATA[<div class="quotebox"><cite>xenonite wrote:</cite><blockquote><div class="quotebox"><cite>Nintendo Maniac 64 wrote:</cite><blockquote><p>Just to clarify about SSE2 vs AVX and stuff - I&#039;m guessing none of the newer SSE instructions (save for AVX) would be useful?</p></blockquote></div><p>The FMA instructions, however, do have the potential for some very nice gains in code of the form x = (a+b)*(c+d), which is <strong>very</strong> common in any video or audio processing filter (indeed, video upscaling and downscaling, as well as audio upsampling, down sampling and equalizing, almost entirely consist of loops of millions of x = a + b*c or x+=b*c).<br />But for SVP, it seems that AVX2 would bring the most benefit (though actually processing the SAD calculations as entire frames and kernel blocks, on the GPU, would be able of speeding up SVP&#039;s main bottleneck by at least an order of magnitude, over and above what AVX2 would be able to do. Its just also about 10x harder to actually implement <img src="https://www.svp-team.com/forum/img/smilies/hmm.png" width="15" height="15" alt="hmm" /> ).</p></blockquote></div><p>As an AMD user, which got with the FMA program <em>years</em> before Intel did (FMA requires Haswell+), I&#039;d love to see FMA and GPU SAD (especially as that could be used to efficiently detect and delete duplicate frames, further smoothing out video) come into use.&nbsp; I&#039;m not feeling the AVX2 as much as that has a far smaller &quot;install base&quot; at the moment and I&#039;m not in it <img src="https://www.svp-team.com/forum/img/smilies/sad.png" width="15" height="15" alt="sad" /></p>]]></description>
			<author><![CDATA[null@example.com (VB_SVP)]]></author>
			<pubDate>Tue, 01 Sep 2015 08:24:33 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53086#p53086</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53084#p53084</link>
			<description><![CDATA[<div class="quotebox"><cite>Nintendo Maniac 64 wrote:</cite><blockquote><p>Just to clarify about SSE2 vs AVX and stuff - I&#039;m guessing none of the newer SSE instructions (save for AVX) would be useful?</p></blockquote></div><p>Uhg, it seems my reply never actually posted!<br />Mostly yes, that is correct. Even AVX itself wont help much, its actually the second revision, AVX2, that contains the required instructions.</p><p>SSE3-&gt;4.2 can also provide a bit of a speedup, but it would be the same amount of work that implementing AVX2 would take for about 20% (mabe even less) of the gain.<br />The FMA instructions, however, do have the potential for some very nice gains in code of the form x = (a+b)*(c+d), which is <strong>very</strong> common in any video or audio processing filter (indeed, video upscaling and downscaling, as well as audio upsampling, down sampling and equalizing, almost entirely consist of loops of millions of x = a + b*c or x+=b*c).<br />But for SVP, it seems that AVX2 would bring the most benefit (though actually processing the SAD calculations as entire frames and kernel blocks, on the GPU, would be able of speeding up SVP&#039;s main bottleneck by at least an order of magnitude, over and above what AVX2 would be able to do. Its just also about 10x harder to actually implement <img src="https://www.svp-team.com/forum/img/smilies/hmm.png" width="15" height="15" alt="hmm" /> ).</p><br /><div class="quotebox"><cite>Chainik wrote:</cite><blockquote><p>I prefer to think that x264 guys are extremely experienced with all that stuff</p></blockquote></div><p>Yes, of course. I was just wondering what those x264 calculations would bring to an integer codepath. It seemed strange for SVP, thats all... Then again, SVP itself comes from the very &#039;strange&#039; MVTools, so there&#039;s that. <img src="https://www.svp-team.com/forum/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (xenonite)]]></author>
			<pubDate>Tue, 01 Sep 2015 08:15:58 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53084#p53084</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53078#p53078</link>
			<description><![CDATA[<p><strong>xenonite</strong></p><p><em>it seems your code also has &#039;support&#039; for plain AVX instructions in calculating pixel metrics. Do you have any idea why someone would have put floating-point AVX together with the other integer SSE2 optimizations?</em></p><p>I prefer to think that x264 guys are extremely experienced with all that stuff <img src="https://www.svp-team.com/forum/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p>]]></description>
			<author><![CDATA[null@example.com (Chainik)]]></author>
			<pubDate>Mon, 31 Aug 2015 20:57:03 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53078#p53078</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53074#p53074</link>
			<description><![CDATA[<p>Just to clarify about SSE2 vs AVX and stuff - I&#039;m guessing none of the newer SSE instructions (save for AVX) would be useful?</p>]]></description>
			<author><![CDATA[null@example.com (Nintendo Maniac 64)]]></author>
			<pubDate>Mon, 31 Aug 2015 20:33:47 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53074#p53074</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53063#p53063</link>
			<description><![CDATA[<div class="quotebox"><cite>Nintendo Maniac 64 wrote:</cite><blockquote><p>Also I&#039;m not sure why you&#039;re bringing up old CPU architectures like the Pentium 4 in regards to my mention of processor models that are only a year old or so like the Pentium G3258...</p></blockquote></div><p>Because its the first in the list of CPUs that SVP is designed for. (aka. SSE2). Also, I&#039;m sorry, that rant wasn&#039;t aimed at you at all. I realize that you were only asking about the impact of building AVX2 libraries on &#039;lower end&#039; CPUs. Luckily, after looking through the code a bit, it seems like SVP is already written to be able to use AVX2 instructions without interfereing with the standard SSE2 codepath (at least for the computationally intensive pixel metric calculations). It shouldn&#039;t be too difficult to follow the same template for other functions. At worst, the installer can detect your CPU and install the correct library if it were to be compiled for different architectures.</p><div class="quotebox"><cite>Chainik wrote:</cite><blockquote><p>parallelization is a cheating  <br />we&#039;re already in heavy multi-threaded environment and we&#039;re not interested in single-threaded performance</p></blockquote></div><p>Yes I understan that, but Avisynth&#039;s multithreading environment seems kind of funky to me (I have run some scaling tests on a 4-core 3770k with the default libs, like the one you posted a while back with the AMD CPU, and have found the optimum number of Avisynth &#039;threads&#039; to be 22. Setting threads=8 leads to more than 50% less performance (I&#039;ll post my scaling results for Avisynth 2.5.8 and 2.6.0 shortly)).</p><p>Actually, after reviewing the code a bit, it seems like all the framework is already in place for proper AVX2 support on the assembly level. <br />Do you know of any work that was, or is being, done to enable AVX2 SAD calculation?<br />One more question: it seems your code also has &#039;support&#039; for plain AVX instructions in calculating pixel metrics. Do you have any idea why someone would have put floating-point AVX together with the other integer SSE2 optimizations?</p><div class="quotebox"><cite>sparktank wrote:</cite><blockquote><p>I seem to remember reading when I wanted to get into programming, that main thing I wanted to learn was to update some things for AVX extension, but then read a lot of things (I mostly don&#039;t remember) that said it&#039;s not really worth it.<br />Short/long math is where it really counts?<br />And in most cases for AVS users, it doesn&#039;t count for us so much.</p></blockquote></div><p>Yes, plain AVX instructions only work on floating point data (32/64-bit fractional numbers), while video data is stored as 8-bit unsigned integers (256 numbers from 0 to 255). That means AVX only benefits workflows that require the precision of floating point numbers (which are much slower to work with than integers).<br />AVX2, on the other hand, <strong>does</strong> work on &#039;packed&#039; 8-bit data, so would provide a very nice speedup over &#039;legacy&#039; SSE~SSE4.2 instructions.</p><div class="quotebox"><blockquote><p>libiomp5md.dll is nowhere on my system.</p><p>it seems there are no more static libraries available for distribution regarding OpenMP.</p></blockquote></div><p>Ah, I don&#039;t know why it did that (I didn&#039;t enable the OpenMP language in the project settings and neither does SVP contain any OpenMP instructions what so ever), but thank you very much for reporting back.</p><p>I&#039;ll try to get the compiler to not link against OpenMP and test the resulting libraries by uninstalling all dev kits on the old 3770k-based system and running it there. If I get it to behave, I&#039;ll certainly post the new libraries for you to test as well.</p>]]></description>
			<author><![CDATA[null@example.com (xenonite)]]></author>
			<pubDate>Mon, 31 Aug 2015 12:50:12 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53063#p53063</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53062#p53062</link>
			<description><![CDATA[<p>I tried them in SVP 3.17 and SVP 4 TP and couldn&#039;t get them to work.</p><p>Windows 7 (x64, but SVP is x86).<br />Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz<br />Intel Sandy Bridge rev. 09<br />MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, EM64T, VT-x, AES, AVX</p><p>I have SVP installed to default location (Program Files (x86)\SVP).<br />After renaming the .dll, it just says it can&#039;t find the required library.<br />I close SVP and the media players completely when I try them.</p><p>Running each of he .dll&#039;s through Dependency Walker show one error:<br />&quot;Error: At least one required implicit or forwarded dependency was not found.&quot;<br />Module: libiomp5md.dll &quot;Error opening file. &quot;The system cannot find the file specified (2).&quot;&quot;</p><p>libiomp5md.dll is nowhere on my system.</p><p>it seems there are no more static libraries available for distribution regarding OpenMP.<br /><a href="https://software.intel.com/en-us/articles/openmp-static-library-deprecation-in-intelr-mkl-on-microsoft-windows">https://software.intel.com/en-us/articl … ft-windows</a><br /><a href="https://software.intel.com/en-us/articles/openmp-support-changes-in-intel-performance-libraries">https://software.intel.com/en-us/articl … -libraries</a></p><p>EDIT:<br />Not that I&#039;m in a real rush to compare anything.<br />I seem to remember reading when I wanted to get into programming, that main thing I wanted to learn was to update some things for AVX extension, but then read a lot of things (I mostly don&#039;t remember) that said it&#039;s not really worth it.<br />Short/long math is where it really counts?<br />And in most cases for AVS users, it doesn&#039;t count for us so much.<br />I remember something to that efffect out of the myriad of information I read through.</p>]]></description>
			<author><![CDATA[null@example.com (sparktank)]]></author>
			<pubDate>Mon, 31 Aug 2015 09:17:44 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53062#p53062</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53060#p53060</link>
			<description><![CDATA[<p><strong>xenonite</strong><br /><em>I don&#039;t see any vectorizing or parallelizing hints to the compiler in the source code<br />... /Qipo</em></p><p>parallelization is a cheating <img src="https://www.svp-team.com/forum/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /> <br />we&#039;re already in heavy multi-threaded environment and we&#039;re not interested in single-threaded performance</p><p><em>Have you ever run a performance profiler on the complete SVP program</em></p><p>very long time ago, I don&#039;t remember actual numbers</p>]]></description>
			<author><![CDATA[null@example.com (Chainik)]]></author>
			<pubDate>Mon, 31 Aug 2015 08:56:19 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53060#p53060</guid>
		</item>
		<item>
			<title><![CDATA[Re: Intel Parallel Studio 2015 Optimized AVX Builds of svpflow1.dll]]></title>
			<link>https://www.svp-team.com/forum/viewtopic.php?pid=53057#p53057</link>
			<description><![CDATA[<p>....uhhh, my point was just pointing out a possible reason why mashingan could have been having issues.</p><p>Also I&#039;m not sure why you&#039;re bringing up old CPU architectures like the Pentium 4 in regards to my mention of processor models that are only a year old or so like the Pentium G3258...</p>]]></description>
			<author><![CDATA[null@example.com (Nintendo Maniac 64)]]></author>
			<pubDate>Mon, 31 Aug 2015 03:39:38 +0000</pubDate>
			<guid>https://www.svp-team.com/forum/viewtopic.php?pid=53057#p53057</guid>
		</item>
	</channel>
</rss>
