Thanks for the profile results. I'll look over them as soon as I can. However, can you also send the source for the modified 3d-morph? I'd like to know what was changed.
Thanks! On Thu, Jun 5, 2014 at 8:28 AM, Yang Guo <[email protected]> wrote: > Here's a profile of the 64bit build. MathSinSlow takes most of the time, > and the file includes a disassembly of the generated code, with each > instruction annotated with profiling stats. Note that this runs an altered > version of SunSpider's 3d-morph to run longer, giving more profiling > samples. > > Yang > > > On Thu, Jun 5, 2014 at 5:23 PM, <[email protected]> wrote: > >> On 2014/06/04 16:30:37, Raymond Toy wrote: >> >>> On 2014/06/04 07:19:29, Yang wrote: >>> > On 2014/06/03 16:51:30, Raymond Toy wrote: >>> > > On 2014/06/03 07:01:45, Yang wrote: >>> > > > https://codereview.chromium.org/303753002/diff/40001/src/math.js >>> > > > File src/math.js (right): >>> > > > >>> > > > >>> https://codereview.chromium.org/303753002/diff/40001/src/ >>> math.js#newcode262 >>> > > > src/math.js:262: } >>> > > > On 2014/06/02 17:26:11, Raymond Toy wrote: >>> > > > > As you mentioned via email, you've removed the 3rd iteration. >>> This is >>> > really >>> > > > > needed if you want to be able to reduce multiples of pi/2 >>> accurately. >>> > > > >>> > > > That's true. However, the reduction step is not exposed as a >>> library >>> > function. >>> > > > From what I have seen, the third step seems to only affect y1. >>> With a y0 >>> > > really >>> > > > close to y1, it does not change the result of sine or cosine. This >>> is >>> >> also >> >>> > why >>> > > I >>> > > > was asking for a test case where removing this third step would >>> make a >>> > > > difference. >>> > > >>> > > I don't understand what you mean by "y0 really close to y1". What >>> are you >>> > > saying? >>> > > >>> > > >>> > > tan(Math.PI*45/2) requires the 3rd iteration. ieee754_rem_pio2 >>> returns >>> > > [45, -9.790984586812941e-16, -6.820314736619894e-32] >>> > > >>> > > If you ignore the y1 result, we have >>> > > kernel_tan(-9.790984586812941e-16, 0e0, -1) -> 1021347742030824.2 >>> > > >>> > > If you include the y1 result: >>> > > kernel_tan(-9.790984586812941e-16,-6.820314736619894e-32, -1) -> >>> > > 1021347742030824.1 >>> > >>> > I somehow didn't type what I thought. I meant to say: if y0 is really >>> close >>> >> to >> >>> > 0, there does not seem to be any point to invest in the third loop. (I >>> am >>> aware >>> > that omitting y1 changes the result in some cases. I'm not arguing >>> this). >>> > >>> > So in the example here, if I omit the third iteration, I get >>> > [45, -9.790984586812941e-16, -6.820199415561299e-32] >>> > >>> > y0 is the same, y1 differs slightly, but the end result is still >>> > 1021347742030824.1. >>> >> >> While I understand your desire to reduce the complexity, you are >>> modifying an >>> algorithm written by an expert. I think the burden is on you to prove >>> that by >>> removing the third iteration you do not change the value of y0. >>> >> >> Also, where is this coming from? In reality, how often will you compute >>> >> sin(x) >> >>> where x is very near a multiple of pi/2 (where the third iteration is >>> needed)? >>> >> >> I suspect it occurs more often than we might expect, but also that if >>> you're >>> doing that, I think you're also computing zillions more values that are >>> not a >>> multiple of pi/2. >>> >> >> For example, in 3d-morph, we compute sin((n-1)*pi/15) for n = 0 to 119. >>> Thus >>> out of 120 values, we have a multiple of pi just 8 times out of 120. If >>> the >>> >> cost >> >>> of reduction for multiples of pi/2 AND the computation of sin were >>> reduced to >>> exactly zero, you would save about just 6.6% in runtime. >>> >> >> I think there are more important things to look at. We need profile >>> results. >>> >> We >> >>> need to understand what is really expensive in the reduction, not what we >>> >> think >> >>> is expensive. >>> >> >> I added back the third iteration, and tweaked some places, so that the >> runtime >> is now down to 16ms (vs the current 12ms). >> >> https://codereview.chromium.org/303753002/ >> > > -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
