00:09
Peter_R joined
01:56
colomon joined
02:12
colomon joined
02:17
colomon joined
02:19
ggoebel joined
04:45
raiph left
06:43
FROGGS joined
|
|||
dalek | arVM/even-moar-jit: e2d77b3 | brrt++ | src/jit/ (4 files): Implement remaining declared tiles. Some of these are not very well implemented as tiles, sinces tiles run in postorder mode by necessity. |
08:20 | |
08:20
brrt joined
|
|||
brrt | good morning | 08:28 | |
09:31
rurban_ joined
12:07
brrt joined
|
|||
dalek | arVM/even-moar-jit: 9384c42 | brrt++ | / (9 files): Add stub register allocator Also add internal header to jit Makefile dependencies |
12:12 | |
jnthn | Sounds like we're getting closer to spitting out shiny machine code... :) | 12:14 | |
brrt | yes, inching slowly closer :-) | 12:17 | |
hmm | |||
i have something of an issue | |||
or rather | |||
i'm annoyed by something | |||
basically, multiple parents refering to the same node might want different tiles for each | 12:18 | ||
jnthn | But since we have to come up with one tiling for the graph, we can't make two different choices? | 12:21 | |
brrt | kind of | 12:23 | |
yes | |||
actually, we can make two different choices | |||
just have a buffer of tiles exactly as large as num_use | 12:24 | ||
preferably allocated from one block | |||
i'm not 100% sure if that's the right solution, though | 12:25 | ||
i guess i'm saying, we can't make two different choices very easily, and it's not preferable either | 12:28 | ||
jnthn | Just make one that works for now, and defer worrying about making the optimal one? | 12:30 | |
Or is there a correctness issue too? | |||
brrt | correctness | 12:34 | |
let me give an example | |||
hmm | 12:35 | ||
ok, suppose i have something like (add $1 $2) and i tile that to (addl reg (load mem)); then i have another thing that does (sub $2 $3) and tile that to (sub reg (load mem)) | 12:36 | ||
the (load mem) is implicit in the first tile | |||
so no register is ever allocated for $2 | |||
but in the case of (sub reg (load mem)); i do need that value into a register | 12:37 | ||
so i have to evaluate $2 twice; once as the memory address, and once as a value loaded into the register | |||
indeed, given that, it'd be better to evaluate $2 to a register in the first place | 12:39 | ||
but the tiler doesn't have enough info to make that decision (ironically) | 12:40 | ||
because that information was lost when it was encoded into the ruleset... :-( | 12:42 | ||
i'll be back a bit later :-) | 12:43 | ||
jnthn | OK. :) | ||
And yeah, tricky problem :S | |||
brrt | i'' figure somthing out, i'm sure | 12:44 | |
timotimo | oh | 13:00 | |
sounds like a little tripping stone | |||
15:07
colomon joined
17:22
brrt joined
|
|||
brrt | ok, i have a potential solution | 17:25 | |
but it's not terribly pretty | 17:26 | ||
and there is a separate problem | |||
the solution, i htink, is a): to detect tile conflicht an b): in case of a conflict, generate a new node (with the same children), and apply the new tile to that node | 17:28 | ||
and then link the 'second parent' to the new node | |||
considering we do that bottom-up, we csn only end up with conflictless nodes | 17:29 | ||
the problem, if anything, is that it's quite nonobvious to detect when we're conflicting tiles and when we're overruling a tile from a parent tile | |||
jnthn | We don't tag nodes that have been involved in a tile as we go? | 17:35 | |
brrt | euh, it's more complicated than that, i think | 17:38 | |
or, my thoughts about it are more complicated | |||
but tagging is probably part of the solution | 17:39 | ||
hmmm | |||
ok, i can explan; currently, the 'best rule' is downward-propagated from the parent rule | 17:40 | ||
that's .. probably subtly wrong, but anyway | |||
suppose i visit a node twice. suppose according to that node, which wants to evaluate to a register, i need to implement rule 5. suppose my first parent node wants to evaluate me to a label (it's possible). suppose then my second parent node wants to evaluate me to a register, again. | 17:43 | ||
if i'm looking at my own node, then i'm altered register to label to register | |||
but looking from the parents, i'm altering just twice... hmm | 17:44 | ||
and from the perspective of the parent, i can see that the child has been revisited | |||
so that i know i have a genuine tile conflict | |||
ok, cool | |||
fixed it ^^ | 17:45 | ||
jnthn | :) | ||
brrt | phew, that was a pickle | ||
japhb | Talking to the duck wins again, sounds like | 17:46 | |
brrt | yes :-) | ||
jnthn is happy to be brrt++'s duck :P | 17:47 | ||
brrt is happy to have jnthn++ as a duck | 17:48 | ||
or in other roles, really | |||
my suspicion is that any performance improvement we're going to see this year in rakudo are going to come from glr :-) | 17:50 | ||
japhb | If you increase the hackability of the JIT and bring it to a more modern design footing, that vastly increases the chance of the JIT also considerably improving this year. | 17:52 | |
brrt | hmm, yeah, i guess :-) | 17:59 | |
but it's probably going to take a while before it can really deliver | 18:00 | ||
i mean, before we have a significant optimizer | 18:02 | ||
and a properly large tile library | |||
i'm actually quite curuious what kind of nice optimizations we'll find | 18:11 | ||
18:26
zakharyas joined
|
|||
timotimo | so am i | 19:31 | |
let me loose :P | 19:37 | ||
brrt | :-) soon | 19:39 | |
timotimo | I'm still not happy about how slow I am progressing with the parsing script | 19:44 | |
I will be on the road for another three hours at least | |||
then, tents must be unpacked, air mattresses inflated, ... | 19:45 | ||
jnthn | The script that makes the pkgconfig/moar.pc can apparently explode and break people's Moar builds: rt.perl.org/Ticket/Display.html?id=125771 | 19:48 | |
jnthn hopes timotimo will be a happy camper :) | 19:56 | ||
'night, folks | |||
dalek | arVM/even-moar-jit: 4a83a08 | brrt++ | docs/jit (3 files): Starting on JIT documentation |
20:24 | |
brrt | have fun timotimo | ||
timotimo | 2.5h left on the drive | 20:43 | |
20:48
TEttinger joined
21:06
nwc10 left
|