00:49
leego joined
05:53
domidumont joined
05:57
domidumont joined
07:20
zakharyas joined
07:22
brrt joined
|
|||
brrt | good * | 07:50 | |
nwc10 | good brrt, * | ||
brrt | ohai nwc10 | 07:51 | |
nwc10 | even-moar-jit passes all spectests (apart from the newest one, until the merge made last night) | ||
so now passes all spectests | |||
brrt | alright, cool :-), even with MVM_JIT_EXPR_ENABLE=1 ? | ||
nwc10 | ytes | ||
brrt | excellent | ||
nwc10 | but it's failing t/moar/50-jit-register-alloc.t | ||
in NQP | |||
brrt | by design | ||
:-) | |||
nwc10 | aha. you didnt' say that :-) | 07:52 | |
also, if I export MVM_JIT_EXPR_ENABLE=0 | |||
then that passes | |||
brrt | that test is explicitly there to test the failing register allocator | ||
nwc10 | which seems to prove something works :-) | ||
brrt | hehe | ||
the bit i'm actually most proud of is the broken-expr-jit bisect tool | |||
okay, then I'll move to a disable flag instead | 07:53 | ||
timotimo | brrt: did you see my little report last night? | 08:30 | |
brrt | i did not | 08:38 | |
oh, nice work | 08:39 | ||
the reason box_i, return_o are NYI is because I haven't done the CALL family of ops yes | 08:40 | ||
and the reason they are NYI is because they require a good regional register allocator, which is currently not there yet | |||
timotimo | OK | ||
how about return_o for example? is that also a CALL? | 08:41 | ||
also, i was wondering: what if we generate (big parts of) interp.c out of the jit expr language? :) | |||
brrt | then you are at the point of the v8 interpreter project | 08:42 | |
timotimo | is it a good place to be? :) | ||
brrt | 'ignition' i think it was called | ||
yes, but | |||
timotimo | hehehe | 08:43 | |
it's a Single Source of Truth issue i expect | |||
brrt | that | ||
and that we are currently still very much an object-oriented-C project, which is also a decently good place to be, just one that is slower than assembly ;-) | 08:44 | ||
timotimo | hm right | ||
all the indirections, yes? | |||
brrt | yes | 08:45 | |
the same things that make the complexity manageable, i guess | |||
have you ever heard of the parrot m0 project? | |||
timotimo | i'm not sure | 08:46 | |
brrt | it was basically an idea to have a minimal-assembly like interpreter, (for which a JIT compiler could be developed), and port the 'upper crust' of parrot to that | ||
timotimo | oh | ||
brrt | that was a virtuous project, in the sense that it is complete hubris | ||
timotimo | so basically microcode? | ||
brrt | yeah. the thing is that then, you are going to have to implement a c-like language for your m0, and a debugger probably, too | 08:47 | |
none of that is especially hard, but nearly all of it is redundant compared to actually using the machine code | 08:48 | ||
and the C compiler toolchain which already exists | |||
and the fact that you are going to implement all the same object-cleverness, just on a different level | |||
more to the point: the expr JIT is not now, nor will it be in the foreseeable future, as good as any of MSC++/Clang/GCC, in making fast bytecode | 08:49 | ||
it is optimized for: small, extensible, hopefully reasonably fast | 08:50 | ||
timotimo | that'd be a tall ardor | ||
order* | |||
yeah, we don't necessarily want to ship a whole gcc everywhere we want moarvm to run | |||
though maybe it isn't so bad? | |||
brrt | right. but the point is that the code in moar basically runs all the time, hence benefits much from the most-optimized-possible compilation | 08:51 | |
hence it makes sense to have GCC do that bit | |||
timotimo | ah. the interpreter, you mean by that | ||
brrt | yeah | ||
timotimo | and i suppose by extension most of the functions we've written so far | ||
brrt | well, there is an intermediate there | 08:52 | |
moving to an assembly-level interpreter is doable, but a huge project from where we are | |||
ā¦ i say that and yet i'm not sure if it is true | 08:53 | ||
it is large, at any rate | |||
if we'd have templates for everything, then, yeah, maybe we could do it | |||
more importantly., there is a bucketload of work to be done before we even get to that stage :-) | 08:55 | ||
timotimo | right | 08:56 | |
nine | one step at a time | 08:57 | |
timotimo | it was a far-future idea anyway | ||
to replace interp.c (partially) by something generated from what we write in the expr jit templates | |||
brrt | it is a good idea, i think. LuaJIT also does something similar | 08:58 | |
somewhat similar, at least | |||
in the category of cage cleaning: I want to have a more structured JIT log, more like the spesh log, than we currently have | 08:59 | ||
timotimo | thing is, if we generate c code from the exprjit, we'll still benefit from gcc's and clang's optimizations | ||
yeah, it's a bit hard to read with the naked eye :) | |||
what were you thinking of? | |||
brrt | not yet thinkingā¦ just complaining at an annoyance | 09:00 | |
timotimo | what pieces of information do you usually look for when you open the log? | ||
brrt | - the structure of the bytecode that constructed the graph | 09:01 | |
- the resulting structure of the graph, including | |||
- graph nodes | |||
- tree structure | |||
- labels | |||
- the place, if any, where we stored the bytecode | |||
- the register allocator output, preferably | 09:03 | ||
timotimo | btw, a neat trick i've learned for the graphviz thing: | 09:07 | |
if you want the root nodes to appear in a specific order, you can include a subgraph with "rankdir = LR" which contains edges (maybe in grey instead of black) between the roots in order of "execution" | 09:08 | ||
konobi | brrt: assuming you could create the dag plugin... apache's airflow might be a _really_ handy development and debugging tool for moarvm | ||
brrt | never heard of airflow | 09:09 | |
timotimo | a toolkit for working with DAGs, apparently | 09:11 | |
intended for workflows | |||
konobi | a visual toolkit, specifically | 09:12 | |
brrt | heh, that looks large-scale | 09:37 | |
jnthn | .oO( Web Scale! ) |
09:39 | |
timotimo | DAG scale | 09:41 | |
jnthn | Yo DAG, I heard you like graphs... | ||
konobi | the screenshots are a handy way to get an idea of the functionality | 10:08 | |
timotimo | easier for something like airflow than for perl6 :S | 10:09 | |
brrt | hehe | ||
seems cool. no idea how hard it'd be to integrate that | |||
or what we would do with it exactly | 10:10 | ||
could possibly also work with spesh graphs i think | |||
konobi | brrt: it gives you the ability to look at the dag status over time | 10:11 | |
so you could find where an optimization wasn't possible and work back to why | 10:12 | ||
brrt | i see | ||
that seems like it could work with spesh | |||
just on first sight, i mean | |||
konobi | brrt: also see hot/cold paths, redundant paths, etc. | 10:14 | |
12:42
zakharyas joined
13:01
brrt left
13:21
avar joined
13:24
avar joined
13:57
FROGGS joined
|
|||
timotimo | so the ASSIGN-POS of NativeCall::Types (IntTypedCArray) has a param_rp_o for its self argument (it generates a getlexperinvtype for ::?CLASS, then a istype) is bailing from jitting because of the param_rp_o | 14:36 | |
do we have everything we need to know to turn that whole thing into something better? i.e. without a const_s, getlexperinvtype, and especially param_rp_o | 14:37 | ||
jnthn | getlexperinvtype getting so far as the JIT without being rewritten into something simpler (a spesh slot lookup, iirc) is a bit odd | 14:40 | |
So my first question would be "why ain't that happening" | |||
timotimo | this particular ASSIGN-POS only has one single log slot and it's filled from start to end with the same value: CArray[int32] | 14:43 | |
timotimo looks at what gets logged | |||
ah, yes, that's the result of getlexperinvtype | 14:44 | ||
15:18
zakharyas joined
15:54
domidumont joined
16:31
TimToady joined
16:48
domidumont joined
17:50
zakharyas joined
20:22
sivoais joined
21:27
Ven_ joined
21:32
sivoais joined
21:57
Ven_ joined
22:15
Ven_ joined
22:29
Ven_ joined
22:41
Ven_ joined
22:53
Ven_ joined
23:27
Ven_ joined
|