Re: [dev-servo] RFC: Using fixed-point for percentages

2014-04-15 Thread Jack Moffitt
Assuming this is enough precision for layout, I'd like to see neon
versions before we landed anything like this. Will the API a user sees
look the same? In other words, is the change localized to MaybeAuto's
implementation?

Also, speaking of these SIMD optimizations, does rustc have a compiler
flag available to switch on the optimized versions? Will we have to do
configure-style feature detection?

jack.

On Mon, Apr 14, 2014 at 11:00 PM, Patrick Walton  wrote:
> Hi everyone,
>
> I'm considering using 32-bit fixed-point (16 bits for the fraction, 16 bits
> for the integer portion) for percentages in CSS. The reason is that we can
> use the following four SSE4/AVX instructions on x86 to compute two sides at
> once:
>
>; xmm0 contains the style values (percentage or fixed length)
>; xmm1 contains ~0 if the value is a percentage or 0 if the value
>; is fixed
>; xmm2 contains the value the percentages are relative to
>0x00010b68 <+8>: vpshufd xmm2,xmm2,0x0
>0x00010b6d <+13>:vpmulld xmm2,xmm2,xmm0
>0x00010b72 <+18>:vpsrad xmm2,xmm2,0x10
>0x00010b77 <+23>:vblendvps xmm0,xmm0,xmm2,xmm1
>; result in xmm0
>
> This is done in many places in layout: grep for `MaybeAuto` to find them.
> Almost all places where one side is computed, another side is computed too,
> and in some places, all four sides are computed, which can be done with only
> one or two more instructions in the above sequence (as XMM registers are 128
> bit).
>
> I have done a simple microbenchmark and found that using SSE4/AVX to compute
> two sides at once is 66% faster than doing it sequentially using branches.
> This is true even if percentages are not used and all branches are predicted
> correctly.
>
> Thoughts?
>
> Patrick
> ___
> dev-servo mailing list
> dev-servo@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-servo
___
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo


Re: [dev-servo] RFC: Using fixed-point for percentages

2014-04-15 Thread Brian Anderson
Right now rustc has no option to detect CPU features, and advanced 
features must be enabled explicitly. It seems reasonable to start adding 
some basic feature detection to rustc as needed.


On 04/15/2014 07:15 PM, Jack Moffitt wrote:

Assuming this is enough precision for layout, I'd like to see neon
versions before we landed anything like this. Will the API a user sees
look the same? In other words, is the change localized to MaybeAuto's
implementation?

Also, speaking of these SIMD optimizations, does rustc have a compiler
flag available to switch on the optimized versions? Will we have to do
configure-style feature detection?

jack.

On Mon, Apr 14, 2014 at 11:00 PM, Patrick Walton  wrote:

Hi everyone,

I'm considering using 32-bit fixed-point (16 bits for the fraction, 16 bits
for the integer portion) for percentages in CSS. The reason is that we can
use the following four SSE4/AVX instructions on x86 to compute two sides at
once:

; xmm0 contains the style values (percentage or fixed length)
; xmm1 contains ~0 if the value is a percentage or 0 if the value
; is fixed
; xmm2 contains the value the percentages are relative to
0x00010b68 <+8>: vpshufd xmm2,xmm2,0x0
0x00010b6d <+13>:vpmulld xmm2,xmm2,xmm0
0x00010b72 <+18>:vpsrad xmm2,xmm2,0x10
0x00010b77 <+23>:vblendvps xmm0,xmm0,xmm2,xmm1
; result in xmm0

This is done in many places in layout: grep for `MaybeAuto` to find them.
Almost all places where one side is computed, another side is computed too,
and in some places, all four sides are computed, which can be done with only
one or two more instructions in the above sequence (as XMM registers are 128
bit).

I have done a simple microbenchmark and found that using SSE4/AVX to compute
two sides at once is 66% faster than doing it sequentially using branches.
This is true even if percentages are not used and all branches are predicted
correctly.

Thoughts?

Patrick
___
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo

___
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo



___
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo