Simon,

One difference is the second set (replicating the experiment in 
https://kkaefer.com/node-cpp-modules/#benchmark-thread-pool) uses a 
synthetic workload which the compiler can get rid of entirely, so the 
benchmark isn't timing work, it's the same as executing a no-op.  A second 
difference is the timings include some combination of optimized and 
unoptimized execution which isn't a number you can use to make performance 
predictions based on number of iterations.

The problem is the work function is invariant and the results are not used, 
so the compiler is free to hoist the loop body out or just get rid of it:
function() { return Math.floor(133.7 / Math.PI); }

My test loop calls sin() which the compiler cannot analyze so it must 
assume there are side effects, and it must call the function every 
iteration.  Additionally, the return values are summed so the compiler 
can't optimize the loop to execute only the last iteration, they must all 
be executed:
    for(var i = 0;  i < nOps;  i++) {
        sum += Math.sin(i)
    }

Crankshaft performs many additional optimizations (dead code elimination, 
hoisting, native compilation, etc.), but v8 can't recompile the interface 
to a native addon so all the copy-in/out scaffolding remains, the use of 
Math.sin allows that overhead to be optimized.  For practical purposes, the 
overhead of copy in/out is the only difference between the two sin() 
experiments.  

Regardless of how it's compiled, as the trip counts increase the 
performance asymptotically approaches some maximum for the architecture. 
 If anything, native code gets in the way of Crankshaft optimizations which 
is why the benefit is smaller for the native addon experiments than JS code 
alone.

The overhead for copy-in/out is significant, but unavoidable.  For EMS, the 
benefit of the overhead was getting access to all the cores, and that 
performance multiplier easily overcomes the overhead.  FWIW, the additional 
overhead for handling strings is relatively small, so you shouldn't 
consider use limited to scalar values.

           -J


On Wednesday, April 23, 2014 3:00:43 PM UTC-7, SimonHF wrote:
>
> Thanks for the info but hmmm... I'm a bit confused now. In the first 
> example sent then 'addon sin sum' hardly changes at all after recompilation 
> and 'homes in' on 5.9M ops/sec. In the second example sent then there's a 
> massive jump for both after recompilation. Why the difference in behaviour? 
> Under which circumstances can addons benefit from the recompilation? 
> Thanks, Simon
>
>
> On Wed, Apr 23, 2014 at 2:52 PM, <[email protected]<javascript:>
> > wrote:
>
>> I should point out this experiment came from when I was trying to 
>> replicate these results:
>>   https://kkaefer.com/node-cpp-modules/#benchmark-thread-pool
>>
>> In his case, the entire work function is optimized away by Crankshaft in 
>> a very obvious way.  The experiment compares his loop body to a no-op.
>>
>>               -J
>>
>>
>> Work Function: Math.floor(133.7 / Math.PI)
>>
>>          1 workfun operations performed at       7092 ops/sec
>>          1 no-ops performed at                 333333 ops/sec
>>          2 workfun operations performed at     142857 ops/sec
>>          2 no-ops performed at               Infinity ops/sec
>>          4 workfun operations performed at   Infinity ops/sec
>>          4 no-ops performed at               Infinity ops/sec
>>          8 workfun operations performed at    8000000 ops/sec
>>          8 no-ops performed at               Infinity ops/sec
>>         16 workfun operations performed at   16000000 ops/sec
>>         16 no-ops performed at               Infinity ops/sec
>>         32 workfun operations performed at   16000000 ops/sec
>>         32 no-ops performed at               Infinity ops/sec
>>         64 workfun operations performed at    9142857 ops/sec
>>         64 no-ops performed at               Infinity ops/sec
>>        128 workfun operations performed at     405063 ops/sec
>>        128 no-ops performed at               Infinity ops/sec
>>        256 workfun operations performed at    1855072 ops/sec
>>        256 no-ops performed at              256000000 ops/sec
>>        512 workfun operations performed at   64000000 ops/sec
>>        512 no-ops performed at              256000000 ops/sec
>>       1024 workfun operations performed at   68266666 ops/sec
>>       1024 no-ops performed at              256000000 ops/sec
>>       2048 workfun operations performed at   60235294 ops/sec
>>       2048 no-ops performed at              292571428 ops/sec
>>       4096 workfun operations performed at   52512820 ops/sec
>>       4096 no-ops performed at              273066666 ops/sec
>>       8192 workfun operations performed at   66064516 ops/sec
>>       8192 no-ops performed at              282482758 ops/sec
>>      16384 workfun operations performed at   59148014 ops/sec
>>      16384 no-ops performed at              163840000 ops/sec
>>
>> *Suddenly a re-compilation with additional optimization occurs: *    
>>  32768 workfun operations performed at  910222222 ops/sec
>>      32768 no-ops performed at              910222222 ops/sec
>>      65536 workfun operations performed at  923042253 ops/sec
>>      65536 no-ops performed at              923042253 ops/sec
>>     131072 workfun operations performed at  929588652 ops/sec
>>     131072 no-ops performed at              929588652 ops/sec
>>     262144 workfun operations performed at  929588652 ops/sec
>>     262144 no-ops performed at              929588652 ops/sec
>>     524288 workfun operations performed at  931239786 ops/sec
>>     524288 no-ops performed at              931239786 ops/sec
>>
>>
>>
>>>>  -- 
>> -- 
>> v8-users mailing list
>> [email protected] <javascript:>
>> http://groups.google.com/group/v8-users
>> --- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "v8-users" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/v8-users/oIouqgJGfn4/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
-- 
v8-users mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to