Hi Katelyn,

I'm going to refer to what you're talking about with cloning and monomorphism 
as the "context sensitivity problem". As far as I know, this is still an open 
problem (not in the fundamental sense, just that nobody has a good solution for 
it yet) in the JS JITs. The argument types (counting 'this' as an argument) is 
one part of the context; the other part being the types of its free variables. 
For example, the context sensitivity problem is part of the reason repeated 
calls to something like Array.prototype.map is slow, and why any user-written 
collections libraries with higher order functions will be slow.

I've experimented with manually hinting functions to be cloned at callsite. We 
do this currently in SpiderMonkey only for certain PJS functions, like mapPar. 
This is a pretty brittle optimization though, since it can be easily defeated 
by wrapping, e.g., function myMapPar(arr, fn) { arr.mapPar(fn); }. I'd love to 
solve this problem in general. Such a solution would require:

 1) A notion of "context" that's efficient in both time and space (e.g. easy to 
compute and cheap to store).
 2) A notion of "context" that's robust (e.g. not defeated by wrapping).
 3) Ability to determine what functions benefit from being cloned per-context.

PGO sounds like a great way to address 3) that I haven't thought of before. I'd 
also love to hear ideas about 1) and 2).

Cheers,

----- Original Message -----
From: "Jason Orendorff" <jorendo...@mozilla.com>
To: k...@luminance.org, "Robert O'Callahan" <rob...@ocallahan.org>
Cc: "Kannan Vijayan" <kvija...@mozilla.com>, dev-platform@lists.mozilla.org, 
fitz...@mozilla.com
Sent: Friday, June 27, 2014 1:21:02 PM
Subject: Exposing JIT performance faults in profiler/devtools (was: Are you     
interested in doing dynamic analysis of JS code?)


On 06/25/2014 05:51 PM, Katelyn Gadd wrote:
> Maybe you could use mutation/method call tracing to do a
> profile-guided-optimization equivalent for JS where you record
> argument types and clone functions per-callsite to ensure everything
> is monomorphic?

Yes, I think this is something that could be done with it.

But! Note that we're separately working on exposing JIT performance 
faults in the profiler/devtools---directly reporting the kind of 
problems you're thinking about painstakingly inferring. \o/

I don't know how far along it is, and it's maybe too early to guess how 
actionable the output will be, but it's a much more certain thing than 
this dynamic analysis API. No meta bug, but several people are working 
on aspects of it. Maybe Kannan can tell more. (cc-ing him)

-j

_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to