timotimo interesting, we have a few instances of const_s followed by getattrs_ 00:08
dalek arVM: 591d294 | (Timo Paulssen)++ | src/jit/graph.c:
fix bindattrs_*, implement getattrs_*, simplify getattr_*
00:19
timotimo tomorrow i can probably teach spesh to turn getattrs_* and bindattrs_* into getattr_* and bindattr_* and give them hints, or a spesh cache. 00:24
hum. it kinda seems like it should already do something like that 00:25
could very well be it just can't find the slot with try_get_slot or something like that. oh well. 00:28
01:02 FROGGS_ joined 01:10 avuserow joined 01:27 avuserow joined
dalek arVM: 1157bb4 | (Timo Paulssen)++ | src/jit/graph.c:
implement coerce_In in the jit
01:50
arVM: e3580a7 | (Timo Paulssen)++ | src/jit/graph.c:
implement div_In in the jit
timotimo tomorrow i'll go for brshift_i and blshift_i 01:52
diakopter those should be the easiest ones ever 02:02
avuserow timotimo: what command are you trying to run that needs tons of memory? I might be able to spin up a large machine at $work 03:48
if it's something simple, I can possibly help up to about 40GB 03:49
07:41 zakharyas joined 08:07 kjs_ joined
sergot hi o/ 08:30
08:41 kjs_ joined
timotimo avuserow: supplying --profile-compile to the compilation of the core setting 09:16
FROGGS pain! I tell ya 09:17
timotimo diakopter: they should be, aye :)
FROGGS I try to register an error handler (a callback) for libxml2, but the signature of that callback has varargs :/ 09:18
timotimo haven't had to do that yet, dunno how dyncall models that 09:32
10:18 kjs_ joined
timotimo at this point, it seems like i'm just hunting ops that have very few bails across the existing code as a whole 10:19
brshift_I and blshift_I are probably more common anyway
well, except maybe if you build tight native code in your perl6 10:20
i wonder how we can put the "are the arguments to this bigint op both smallbigints? if so, just do the peration quickly, otherwise call the c function" into the jit without implementing every bigint op twice: once for a smalling/bigint, once for an only bigint 10:28
but that's probably for later 10:30
jnthn: remember the thing about "smart numify + coerce n to i", how can i make sure the num register won't survive until the next deopt point without doing a scan for it? 10:34
hmm. here i have a const_i64_16 that gets coerced to a num and then compared with the smrt_numify result 10:36
but the const is just "-1", so it could just as well have been an unbox int thingie (if that's supported by the object we're trying to numify) 10:37
oh 10:40
actually
i can use the dead code elimination to my advantage 10:41
if i think only the int will be used, i can make the smrt_numify unbox an int and create the num with a coerce_in and if the num isn't used at all, the coerce will just be killed
but i don't know when to prefer the int and when to prefer the num in the "general" case (as in: the object can unbox an int or a num) 10:42
10:45 kjs_ joined 10:51 FROGGS[mobile] joined
jnthn timotimo: The other way is to look at usages 11:11
If it's 1, you know you're looking at the only usage :)
(that is, that the coerce is the sole consumer of the smrt_numify result) 11:12
11:18 oetiker joined
dalek arVM: 4a86098 | Carlin++ | src/ (4 files):
add wrapper functions to panic if allocation fails
11:27
arVM: 176cec9 | Carlin++ | / (81 files):
replace malloc with MVM_malloc
arVM: 3819ce2 | Carlin++ | / (68 files):
replace free with MVM_free
arVM: 9e95260 | Carlin++ | src/ (28 files):
replace realloc with MVM_realloc
carlin \o/ yay 11:40
sergot carlin++ 11:53
carlin Stage parse : Memory allocation failed; could not allocate 524288 bytes 12:18
carlin sniffs
it's beutiful
FROGGS[mobile] *g* 12:34
carlin++
moritz you don't have 524k RAM on your box? :-) 12:36
(just kidding, of course)
12:46 FROGGS[mobile] joined 13:10 odc` joined
jnthn I think the first box I programmed might not actually have had that much :P 13:38
How times change...
carlin++ for the patches :)
timotimo i'd also like to have a way to turn a const_n into a const_i if it's sensible, but that seems much more peepholey than what we're doing so far 13:56
to be fair, we're already spending almost 0% of time on optimization/specialization in many cases :P
jnthn On startup, though, we spend rather longer than that... 13:57
timotimo hm, right
jnthn I'm pondering some threshold tweaks.
carlin jnthn: any chance you could look at my other 2 PRs? No hurry though 14:00
jnthn Ah, I thought 132 had an issue when I looked yesterday, but now I see I misread and the ascii.c issue was actually corrected in this version. 14:02
dalek arVM: 3e276ba | Carlin++ | src/core/frame.c:
flag is sometimes set to -1 so needs to be signed
MoarVM: 1cf18d2 | Carlin++ | src/core/bytecode.c:
MoarVM: unsigned int offset can never be less than 0
jnthn sorry, dalek 14:03
Anyway, that's one more down
diakopter poor, poor dalek
14:03 dalek joined
jnthn Hm. Is it really sane to expose SIGSEGV as hookable? :) 14:05
nwc10 IIRC it's undefined behaviour for a program to continue after a SEGV 14:06
and a couple of the others
jnthn Well, if you continue then you really better have done something about the situation.... :)
I'm quite certain userland code ain't in such a position. 14:07
timotimo aye. but what we do when you tap a signal is to put that into a queue or something for another thread to handle it
so it'll basically immediately continue before the userland code has a chance to run
jnthn Yes, that seems like an exceptionally crazy thing to do for SIGSEGV :)
SIGBUS is probably similar
nwc10: ooc, what does Perl 5 do in terms of signals you can install handlers for? 14:08
nwc10 I can't remember
jnthn ok :)
nwc10 I believe that you can install handler for all of them
carlin perl -e "\$SIG{SEGV} = sub { die 'foo' }; for (;;) {}"
nwc10 no-one said that it's sane
carlin kill -SEGV 8545 14:09
foo at -e line 1
timotimo sending a SEGV manually is cheating :P
jnthn o.O :)
timotimo also, in a signal handler, isn't the stuff you're allowed to do very, very, very limited?
carlin so I should remove the ones we can't realistically deal with? SEGV, BUS, KILL, STKFLT 14:25
timotimo i'd say: allow users to shoot their own foot 14:30
jnthn m: say 10955 - 4848 14:33
camelia rakudo-moar 41d7f7: OUTPUTĀ«6107ā¤Ā»
jnthn m: say (10955 - 4848) * 40
camelia rakudo-moar 41d7f7: OUTPUTĀ«244280ā¤Ā»
timotimo i see numbers ... do i have a reason to cheer? :) 14:34
14:45 itz joined 14:58 itz_ joined 15:03 itz joined 15:48 itz_ joined 15:53 itz joined 16:05 hoelzro_ joined 16:06 [Coke]_ joined, Juerd_ joined 16:09 camelia joined
avuserow timotimo: so far, adding --profile-compile is "only" using 11GB of memory or so 17:30
timotimo oh! 17:31
avuserow been running for 13 minutes of now, though 17:32
17:34 zakharyas joined
avuserow oh, I may not have allocated enough disk space for this. silly installer, allocating 40GB of swap space by default. 17:39
if not, I'll give it more disk space and re-run
17:44 cognome joined 17:49 kjs_ joined 17:56 itz joined 19:00 itz joined
moritz spin.atomicobject.com/2014/09/03/vi...lgorithms/ might be of idle interest 19:06
nine moritz: nice! 19:14
timotimo i may hack this to make it place the addresses along a hilbert curve to get rid of the "line breaks" 19:21
19:23 zakharyas joined 19:28 itz_ joined 19:35 itz joined
avuserow timotimo: this is still running O.o 20:11
I've now seen it use as much as 21GB. It seems to fluctuate a lot.
timotimo :D
i told you :)
avuserow still no idea if it'll have enough disk space to write out the data :( 20:12
timotimo right ;( 20:16
and then it'll be quite interesting to see if any browser whatsoever will be able to render that data out ...
avuserow yeah, might not even be feasible to load the entire page into memory on many machines, much less do any javascript stuff 20:18
vendethiel b-but I thought angular was web scale :-)
timotimo yeah, but this is already Big Data
avuserow it'll still be interesting to see how large it is, and maybe some information can be gathered using a streaming json parser or something... 20:19
or at least ideas on where to cut things down
timotimo aye. 20:20
i briefly glanced at the code that generates the data
it does have to walk a tree to sum up the times, so i'm not quite sure how to cut the call graphs down to size ...
20:46 colomon joined 20:47 Ven joined 21:44 colomon joined