Was forumating a crbug; and realized I was using Node.  I'm doing the
console.log with node....
when I grab the code and run it in a webpage it doesn't suffer the same
slowdown.

On Fri, Apr 6, 2018 at 3:13 PM, J Decker <d3c...@gmail.com> wrote:

> Sorry got busy with other things.
>
> This gist is fast.
> https://gist.github.com/d3x0r/be849400be3ea30877568e5656a86ca3
> how to slow down.
>
> (line 1)
> function pcg_setseq_128_srandom_r()
> {
>      //const state = new Uint32Array([0,0,0,0,0,0,0,0]);
>      const state = [0,0,0,0,0,0,0,0];
>
> uncomment the first line to use uInt32array and comment the second const
> state line .  (use typed array instead of array).
>
> (On my system it reports Done in  2045 /ms 48899.75550122249
> 1564792.1760391197) as is , with a standard array.
> If it runs more than 4 seconds I end it... because it will be 15-20
> seconds .  (Done in  22615 /ms 4421.843908910016 141499.0050851205)
>
> With the following mentioned speedups Uint32array IS faster....
> The first thing, replace the state with Uint32array, if fast reports (Done
> in  1530 /ms 65359.47712418301 2091503.2679738563 )
>
> ----------
> Okay?  Is that reproducable?
>
>
>
> How to speed up.
> 1) remove the console.log( testRng ); on line 46.  (it's done before the
> loop, no the logging itself is not measured in the speed)
> or 2) comment out state: new Uint32Array([0,0,0,0,0,0,0,0]),  on line
> 10.  This is a Uint32Array that is put into the RNG object returned;  and
> if console.log doesn't log a uint32array type it's fast.
> 3)
>
>
>
> On Friday, April 6, 2018 at 2:28:40 AM UTC-7, Jakob Gruber wrote:
>>
>> If you do end up with a good repro for the performance difference between
>> typed arrays and arrays, please post it at crbug.com/v8/new.
>>
>> On Fri, Apr 6, 2018 at 8:33 AM, <mog...@syntheticsemantics.com> wrote:
>>
>>> Are you able to hoist the memory allocations out of the library so the
>>> caller can allocate the buffers it needs and reuse them from call to call?
>>> new in JS has GC overhead not present in C++ alloc/free.  Aside from
>>> those variables, the rest are stack allocations and GC won't play much role.
>>>
>>>                      -J
>>>
>>>
>>> On Wednesday, April 4, 2018 at 7:03:05 PM UTC-7, J Decker wrote:
>>>>
>>>> How long of a story to tell(?)...
>>>>
>>>> I have this procedural random generator, that uses the result of sha2
>>>> as a stream of bits, regenerating another sha2 hash when the 256 bits are
>>>> all consumed.  I started to use this for perlin noise generation, and
>>>> thought I found sha2 was the culprit consuming most of the time.  Since I'm
>>>> making something just generally random, I went looking for alternative,
>>>> lightweight, RNGs. After digging for a while I stumbled on PCG (
>>>> http://www.pcg-random.org/using-pcg.html) It's basically a header-only
>>>> library because it attempts to generate everything as inline...
>>>>
>>>> I made this JS port of it  https://gist.github.com/d3
>>>> x0r/345b256be6569c0086c328a8d1b4be01
>>>> This is the first revision ... https://gist.github.com/d3
>>>> x0r/345b256be6569c0086c328a8d1b4be01/fffa8e906d5723e66f7e9ba
>>>> a950b3b3d5b4895c7
>>>> It has a better flow matching what the C code does closer... the
>>>> current version is fast generating 115k bits per millisecond (vs the 9.3k
>>>> bpms of sha2); however, when compared to the C version, which generates
>>>> 1.1Mbps it's a factor of 10 off... and the routine is generally only doing
>>>> 64 bit integer math (though the test was compiled in 32 bit mode so it was
>>>> really just 32 bit registers emulating 64 bit).
>>>>
>>>> if I just change the arrays created in getState() (first function), to
>>>> Uint32Array() it runs MUCH slower...
>>>>
>>>> ----
>>>> As I write this I was updating some, and some of my numbers from before
>>>> are a factor of 8 off because I was counting bytes not bits; except in the
>>>> sha2, which is really slow... But I would like to take this opportunity to
>>>> say...
>>>>
>>>>     crypto.subtle.digest("SHA-256", buffer).then(hash=>hash );
>>>>
>>>> is the same output type as my javascript version I'm using ( forked
>>>> from a fork of forge library and consolidated to just the one return
>>>> type...), but is another 10x slower than my javascript sha-256.
>>>>
>>>> I keep thinking 'Oh I'll just compile this and even use intel
>>>> accelearted sha2msg1 and sha2msg2 instructions to make the C version 8x
>>>> faster than it is in C straight, which itself was already faster than the
>>>> JS version; and hook it into a ... ( oh wait I want to do this on a
>>>> webpage! can't say Node addon there...).
>>>>
>>>> Well... back to optimizing.
>>>> ----
>>>>
>>>> I was working also on a simple test case to show where using a simple
>>>> array vs a typed array causes a speed difference, but it's not immediately
>>>> obvious what I'm doing that's causing it to deoptimize.... so I'll work on
>>>> building that up until it breaks; or conversely strip the other until it
>>>> speeds up..
>>>>
>>>> https://github.com/d3x0r/-/blob/master/org.d3x0r.common/salt
>>>> y_random_generator.js#L86  This is getting the bits from a typed
>>>> array; and it's really not that complex (especially if only getting 1 bit
>>>> at a time which is what I was last speed testing with; but turns out all
>>>> the time is really here, swapping out sha2 for pcg(without typed arrays)
>>>> dropped that from 150ms to 50ms but the remaining was still 3500ms... so I
>>>> misread the initial performance graph I guess...
>>>>
>>>> There's a stack of what were C macros to make the whole thing more
>>>> readable... https://github.com/d3x0r/-/blob/master/org.d3x0r
>>>> .common/salty_random_generator.js#L25 and if I inline these, there's
>>>> no improvement so I guess they're all small to qualify for auto inlining
>>>> anyway.  The version that's current on github ended up creating a new
>>>> uint32array(1) for every result; I moved that out locally so I can use just
>>>> a single buffer for that result and it sped up the initialization from
>>>> 700ms to 200ms (cumulative times) but there's still like 80% of the time in
>>>> the remainder of the getBuffer routine; maybe I need to move things out of
>>>> the uint8arrays (data from sha2/pcg)
>>>>
>>>>
>>>> --
> --
> v8-users mailing list
> v8-users@googlegroups.com
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to v8-users+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to