> Hi, > On 16/12/14 19:13, Tom Hacohen wrote: > > On 16/12/14 13:26, Cedric BAIL wrote: > > > Hello, > >> > >> On Tue, Dec 16, 2014 at 1:56 PM, Rajeev Ranjan wrote: > >>> There is an open source library called libyuv (Reference: > >>> <http://code.google.com/p/libyuv/> http://code.google.com/p/libyuv/ as part of chromium project released > >>> under BSD license) which provides scaling among other operations like > >>> color conversion and rotation for buffers in ARGB and various yuv > >>> formats. It has been optimized for SSE2/SSSE3/AVX2 on x86/x64 and Neon on > >>> Arm. Current acceleration for Smooth scaling in software backend is using > >>> Neon for Arm and using mmx on x86. After doing a little bit of > >>> experimentation, we found that the smooth scaling using libyuv is a bit > >>> faster on ARM as well as X86 platforms(checked with EFL 1.7) when > >>> compared with current implementation. Result of Below mentioned Expedite > >>> test cases with xlib engine were found to be better on ARM and Even MMX > >>> on X86 platforms. Image Blend Smooth Scaled, Image Blend Smooth Solid > >>> Scaled, Image Blend Border, Image Blend Solid Middle Border, Image Blend > >>> Solid Border, Image Blend Border Recolor, Image Quality Scale > >>> > >>> I would like to contribute this optimization for EFL latest release. > >>> Please share your comments. > >> > >> So basically their is room to improve our assembly code for various > >> target. How do you plan to proceed ? Add a dependency or move the > >> useful code inside of Evas ? Also did you do any comparison on why our > >> assembly and their assembly have different profile. I am wondering if > >> we need to use all of libyuv code or if only a part of it is > >> interesting to us by complementing our current assemblty code. > I was referring to make libyuv as optional build time dependency. So far no > analysis has been done to figure out as why profiling data with libyuv is > better compare to current neon code. The output of smooth scaling seems to be > similar though when dumped in raw format. The relevant code in libyuv for > which we found performance improvement is related to smooth scaling. In case > of nearest, it does not give any noticeable performance benefit. > >> > > > > Also, what about a comparison with latest EFL and not just 1.7? > Will share the comparison data after making relevant changes in latest evas > smooth scaling integration, expecting this to be on the similar line. Here is the comparison data of evas(1.12 upstream) with libyuv on an intel i3 2nd generation Expedite was run with software_x11 for 1000 mainloop runs with 720x420 These results are from expedite-cmp where right-side numbers are for evas with libyuv Image Blend Smooth Scaled: 18.64 107.59 (+477.2%) Image Blend Smooth Solid Scaled: 343.55 746.72 (+117.4%) Image Blend Border: 24.64 116.07 (+371.1%) Image Blend Solid Middle Border: 291.96 483.58 ( +65.6%) Image Blend Solid Border: 399.99 590.20 ( +47.6%) Image Blend Border Recolor: 24.53 98.09 (+299.9%) Image Quality Scale: 305.47 2086.82 (+583.2%) Image Blend Many Smooth Down Scaled: 8.13 18.30 (+125.1%) EVAS SPEED (WEIGHTED): 442.41 523.75 ( +18.4%) > > > > Anyhow, the major problem is that: "pacman -Ss libyuv" returns nothing. > > That is, it's not even packaged by arch... If anything, we should make > > it an internal dependency, and not an external one. Dependency hell is > > an important factor too. > The current version of libyuv is not having packaging based on pkg-config. > For testing purpose, we had created pc files locally so that pkg-config can > work. We can think of setting environment variables like LIBYUV_LIBS, > LIBYUV_CFLAGS etc if user wants to enable libyuv dependency in evas build > time. Yes, probably it won't be packaged by any distro because it's used only in chromium browser & lollipop as of now. The current cmakefile compiles it to a static library. If we statically link libyuv to evas, runtime dependencies can be avoided. The size of libevas.so(after stripping) increased by 0.3 MB in this case > this makes it a bit of a problem to add as a dep - even an optional dep. "no > one has it". it's "rare". is it worth adding a dep, that will be rarely > used/tested (and thus likely eventually break), for a "little" speedup. is it > perfhaps not better to look at the same algorithm and see what speeds it up > asm-wise and then "duplicate"? Currently the library maintains different asm for SSE2, SSE3, AVX2, NEON & NEON64 Also it has different asms when row width is multiple of 4,8,16 based on architecture Is it worth maintaining these asms in evas(along with bug fixes) or leave it to the library? Thanks, Krishnaraj
------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel