garyaj | Anyone else have a Parallella board and wanting to port moarvm/P6 to it? | 00:07 | |
00:07
colomon joined
|
|||
garyaj | rakudobrew installs the ARM version on the companion Zync chip. The trouble is getting it to use the Epiphany 16-core coprocessor. | 00:08 | |
s/Zync/Zynq/ | 00:09 | ||
00:46
_sri_ joined
03:11
_sri_ joined
04:32
avuserow joined
04:46
ggoebel11111115 joined
05:02
avuserow joined
05:24
avuserow joined
06:24
FROGGS joined
07:00
zakharyas joined
08:32
kjs_ joined
09:59
kjs_ joined
11:27
garyaj left
11:33
brrt joined
|
|||
brrt | \o | 11:33 | |
timotimo: invokewithcapture is actually really simple | 11:34 | ||
timotimo | Oh cool | 11:46 | |
I did not even bother to look at what it takes to implement it | 11:47 | ||
how do you feel about a vastly simplified register allocation scheme that only removed load instructions if the data we want is still in a register? | 11:48 | ||
seems like a waste of time? | |||
I've been told emitting loads of redundant loads and stores is pretty much worse than Hitler | 11:50 | ||
FROGGS | O.o | 11:51 | |
tadzik | :D | ||
timotimo | best car you hit the proper caches, average case you could just as well insert fence ops everywhere | 11:53 | |
OSLT | |||
brrt | i feel that would be a good idea, yes | 12:03 | |
about the relative badness compared to well-known violent dictators, i'm not sure | 12:04 | ||
but, are you talking about the JIT right now? | |||
timotimo | yes | 13:28 | |
well, eliminating set ops would also help if we do it in spesh | 13:29 | ||
but even if we have no redundant set operations, we will still be loading and storing values to ram all the time | 13:30 | ||
I wonder if there is any value at all to making register allocation on the mvm frame level align values to cache lines oslt | 13:31 | ||
as in have the parameters to an op in a different line than the result | |||
I have no idea what I'm talking about | |||
brrt | well, that's good, because neither have i :-) | 13:34 | |
basically, we run into 'we-can't-do-register-selection' argument still | |||
register selection is a prerequisite for register allocation in any fashin | |||
fashion | |||
so | |||
but otherwise such a scheme as you mentioned is really simple | |||
textbook simple in fact | 13:35 | ||
:-) | |||
timotimo | did i explain that scheme yet? just kicking out the loads after stores and just emit a register-register mov instead of a heap-register mov? | 13:38 | |
brrt | you don't even need to do a register-register mov | 13:40 | |
i mean, if it is in one register, and you're going to move it to another register, why move it at all | |||
just use the old register instead of the new one | |||
13:41
JimmyZ joined
|
|||
timotimo | we can't do that with dynasm :) | 13:42 | |
not yet | |||
that's why i'm suggesting it could be a waste of time | |||
brrt | well.... it should be relatively simple to add to dynasm | 13:45 | |
'relatively' | |||
13:55
kjs_ joined
|
|||
timotimo | what are we waiting for? ;) | 13:57 | |
moritz | tuits? motivation? inspiration? | 14:03 | |
timotimo | of course :) | 14:07 | |
brrt | tuits | 14:09 | |
i'm rather busy with a java project, of all things | |||
a pretty cool java project, i might add, but still | |||
timotimo | that's fair | 14:14 | |
brrt | and the next thing is, even if we have that, it'll be a pretty big rework of the way the JIT works until we can use it | 14:15 | |
that's ok, but it requires yet more tuits | |||
JimmyZ still wonders how luajit does it :P | 14:16 | ||
brrt | luajit ahas it's own highly specialised bytecode emitter | 14:23 | |
luajit doesn't actually use dynasm to generate the bytecode | |||
JimmyZ | after luajit 2.0? | 14:25 | |
brrt | yeah i'm referring to luajit-2.0 | ||
JimmyZ | yeah, I know luajit 2.0 is written by hardcode asm | 14:27 | |
and using dynasm compile it | |||
jnthn waves from Malaysia, land of good food to eat and big lightning storms to get caught out in. :) | 14:28 | ||
JimmyZ | jnthn: I will go to Malaysia , will next month :P | 14:29 | |
s/,will/, maybe/ | |||
jnthn | JimmyZ: Enjoy ;) | ||
brrt | \o jnthn | ||
jnthn | I'm just here for a few days. I've already found more restaurants I want to eat at than I have meals to find... :) | 14:30 | |
[Coke] | good problem to have! | ||
jnthn | Yes! | ||
JimmyZ | Are you in Kuala Lumpur? | ||
jnthn | Aye. | ||
timotimo | o/ jnthn | 14:31 | |
jnthn | o/ timo | 14:32 | |
14:33
brother joined
|
|||
timotimo | jnthn: imagine this: remember how my game has an acceptable framerate? | 14:33 | |
brrt | what | ||
timotimo | turns out i've been using software rendering the whole time | ||
brrt | :-D | ||
you /did/ give me work for the JIT though | 14:34 | ||
which is something i'm happy about | |||
timotimo | a bit :) | ||
so not only did i get to a passable framerate with perl6, but it also had the extra penalty of rendering every frame in software | |||
jnthn | Oh...so when you use hardware acceleration your framerate pressure goes away? :) | 14:38 | |
timotimo | er ... | 14:39 | |
it's not as easy as that | |||
jnthn | Dang :) | 14:40 | |
timotimo | i'm going to have to switch from "GTK and using Cairo to draw the whole frame" to "Cairo renders sprite sheets and SDL2 composits the scene onto the screen", | ||
at least that's what i've decided to do | |||
it's surprisingly hard to get an opengl-backed cairo to work if you want to not use XGL, WGL, CGL, EGL, ... | 14:41 | ||
so instead of trying to have a hardware accelerated cairo, i'm going to pre-render stuff in software and just move the already-pretty sprites over the screen with supersonic speeds using OpenGL | |||
jnthn | Neat. Have fun! ;) | 14:43 | |
hoelzro | moarning #moarvm | 14:46 | |
brrt | \o hoelzro | 14:47 | |
timotimo: what you can do simply is to make so-called 'register descriptors' which describe the contents of the cpu registers and 'address descriptors' which describe the addresses of any given value at any given time in the execution | 14:48 | ||
timotimo | that's probably what i've imagnied | 14:58 | |
brrt | :-) | 14:59 | |
anyway, that's doable | |||
timotimo | so that part may be salvagable for when we actually have register selection | 15:00 | |
brrt | it does complicate a lot of things, though | ||
timotimo | well, yeah | 15:01 | |
brrt | the jit graph has to be developed as an actual (directed acyclic) graph, rather than a linked list (as it is now) | ||
timotimo | oh damn :( | ||
you're making this sound less and less interesting :P | 15:02 | ||
don't make it sound like actual work! | |||
brrt | and anyway, you'll still - currently - spend a lot of time in MVM_frame_inc_ref and MVM_frame_decr_ref | ||
hey, it's fun work | |||
:-) | |||
but yeah, i'd admit i'd feel a bit better if i had another bout of gsoc-style tuits for it | |||
timotimo | .o( we could guard against "are multiple threads running" and deopt away from a fence-less/atomic-less inc_ref/dec_ref | 15:03 | |
brrt | that won't help that much | ||
basically 'frame allocation is expensive in moarvm' is one of our greater performance-wise problems | |||
timotimo | hmm | ||
hoelzro | is there a good way to inspect a P6Opaque from within MoarVM? | ||
brrt | or perhaps not allocation, but jumping-between-frames is | ||
hoelzro - i don't think there is an easy way, no | 15:04 | ||
hoelzro | =( | ||
JimmyZ | .oO(GCI...) |
||
brrt afk. will try to look at invokewithcapture tonight, but i'm not promising anything | 15:30 | ||
16:03
kjs_ joined
16:12
odc joined
17:07
vendethiel joined
18:00
Ven joined
18:22
FROGGS joined
18:36
kjs_ joined
19:07
kjs_ joined
19:30
brrt joined
20:10
kjs_ joined
|
|||
brrt | energy levels are not sufficient for great implementations today | 20:11 | |
20:15
Ven joined
20:24
brrt left
|
|||
dalek | arVM: b375d61 | (Bart Wiegmans)++ | src/jit/emit_x64.dasc: Panic rather than throw for JIT errors It makes no sense to throw an exception, they might be caught. |
20:29 | |
21:09
kjs_ joined
21:37
kjs_ joined
22:03
kjs_ joined
22:06
colomon joined
22:36
camelia joined
22:48
colomon joined
|