[Pixman] [PATCH] Added MIPS32R2 and MIPS DSP ASE optimized functions.

Georgi Beloev gb at beloev.net
Wed Dec 8 10:22:43 PST 2010


Hi Siarhei,

These are valid points and will have to be addressed. Unfortunately, I am not going to be able to allocate any more time on Pixman for the foreseeable future. The MIPS port a small project based on specific customer requirements; no further development is planned at the moment.

Cheers,
--
Georgi Beloev
gb at beloev.net



On Dec 8, 2010, at 6:07 AM, Siarhei Siamashka wrote:

> On Thursday 02 December 2010 00:59:41 Georgi Beloev wrote:
>> Please note -- the following Pixman patch has been updated to reflect
>> comments received after an earlier submission. It was tested successfully
>> on real hardware with Pixman 0.21.2.
>> 
>> 
>> From 9ecf61f2072d8f51f845b086686380ff3c34f861 Mon Sep 17 00:00:00 2001
>> From: Georgi Beloev <gb at beloev.net>
>> Date: Wed, 1 Dec 2010 14:34:06 -0800
>> Subject: [PATCH] Added MIPS32R2 and MIPS DSP ASE optimized functions.
>> 
>> The following functions were implemented for MIPS32R2:
>>  - pixman_fill32()
>>  - fast_composite_over_n_8_8888()
>> 
>> The following functions were implemented for MIPS DSP ASE:
>>  - combine_over_u()
>>  - fast_composite_over_n_8_8888()
>> 
>> Additionally, MIPS DSP ASE uses the MIPS32R2 pixman_fill32() function.
>> 
>> Use configure commands similar to the ones below to select the target
>> processor and, correspondingly, the target instruction set:
>> 
>>  - MIPS32R2: configure CFLAGS='-march=24kc -O2'
>>  - MIPS DSP ASE: configure CFLAGS='-march=24kec -O2'
> 
> Hi, thanks for the update.
> 
> Have you benchmarked these optimizations? Do you have some numbers to share?
> 
> When I tried to run some of the cairo-perf-trace benchmarks on my
> AR7161, MIPS32 24Kc @680MHz device, I got the following results:
> 
> original:
> 
> [ # ]  backend                         test   min(s) median(s) stddev. count                                                                                                                                                                                                           
> [ # ]    image: pixman 0.21.3                                                                                                                                                                                                                                                          
> [  0]    image                      poppler  170.195  170.484   0.07%    6/6                                                                                                                                                                                                           
> [  2]    image         gnome-system-monitor  383.189  383.368   0.02%    6/6                                                                                                                                                                                                           
> [  3]    image                    evolution  155.689  155.737   0.01%    4/6
> 
> patched:
> 
> [ # ]  backend                         test   min(s) median(s) stddev. count
> [ # ]    image: pixman 0.21.3
> [  0]    image                      poppler  170.440  170.451   0.22%    3/3
> [  2]    image         gnome-system-monitor  418.555  418.668   0.05%    3/3
> [  3]    image                    evolution  162.266  162.390   0.04%    3/3
> 
> One of the reasons for such a slowdown in gnome-system-monitor test is that it
> uses 'over_n_8_8888' operation with the mask where 96.5% of values are zero. 
> And your MIPS32R2 optimized code does not handle these special cases, always
> taking the slowest path [1].
> 
> I guess DSP ASE code should have much better performance, just because it needs
> less instructions to do the job. Unfortunately I have no way to benchmark it
> myself.
> 
> Anyway, I understand that it is hard to be one of the first developers to do
> MIPS optimizations, considering that they are practically non-existent in open
> source software currently. So the challenges are unavoidable. But preferably
> the MIPS assembly code should improve pixman performance, and not just only
> provide some kind of "MIPS optimized" check mark ;)
> 
> Regarding the runtime CPU capabilities detection, I think gcc actually has some
> support for -march=native option on MIPS [2], and it is implemented by parsing
> /proc/cpuinfo
> 
> 
> 1. http://lists.freedesktop.org/archives/pixman/2010-September/000498.html
> 2. http://gcc.gnu.org/onlinedocs/gcc-4.5.1/gcc/MIPS-Options.html
> 
> -- 
> Best regards,
> Siarhei Siamashka



More information about the Pixman mailing list