|
00:02
dalek joined
00:29
stmuk joined
00:35
stmuk_ joined
00:40
stmuk joined
00:48
stmuk_ joined
|
|||
| japhb is finally catching up with the last couple weeks of patches | 00:49 | ||
| This looks bogus: #define MVM_ALIGN_SECTION(offset) ((offset) + (offset) % ALIGNOF(MVMint64)) | |||
| What if offset is, say, 3? | |||
| Unless I'm just really too tired, that gives 6, rather than 8, which I think is the intent. | 00:50 | ||
| timotimo implements some more random functions for the jit | |||
|
00:57
stmuk joined
|
|||
| timotimo | it's frustrating to implement some ops in the jit only to find out that it causes a single frame across the whole rakudo build to be successfully compiled where it used to fail | 01:28 | |
| all others now stumble over another unimplemented op | |||
| japhb | timotimo: Thankfully, there's only a finite number of ops .... | 01:29 | |
| timotimo | yeah | 01:30 | |
| the thing is, only some of them can be translated into just a C function call. others have either a check for concreteness in front or are some simple getter that i'd have to write custom asm for | |||
| like captureposelems checks the right REPRID and throws if it's not right | 01:31 | ||
| japhb | Nodnod | 01:34 | |
| Time was that I could have freehanded that asm for you, but I haven't been actively using that skill in far too long. | |||
| timotimo | :) | 01:45 | |
| i can cargocult sufficiently | |||
| gist.github.com/timo/3cdb32fb36d66.../revisions - see what i mean? :) | 01:46 | ||
| just implemented gethllsym, that was very easy indeed | 01:52 | ||
| update to the gist will be in ... half a minute | |||
| japhb | yay | 01:53 | |
| timotimo | that was worth 9 frames. neat. | ||
| japhb | Little by little .... | ||
| timotimo | yeah | ||
| i've done this dance already ... a long long time ago | |||
| when the JIT was still fresh and new | 01:54 | ||
| some parametric type ops implemented ... | 02:02 | ||
| huh! something's different now | 02:05 | ||
| all the numbers have changed | 02:06 | ||
| this is no good | |||
| also, gist doesn't let you kill revisions without going through a local clone | 02:07 | ||
| aaaaand captureposprimspec | 02:18 | ||
| as expected, 100% of those immediately turned into bails for captureposarg ... | 02:21 | ||
| and i bet when i implement captureposarg, it'll immediately want captureposarg_i, captureposarg_n and captureposarg_s ... | 02:23 | ||
| what a goose chase. | |||
| very dalek | 02:28 | ||
| timotimo waves | |||
| well, dalek didn't get it | 02:29 | ||
| dalek | arVM: 77c84d5 | timotimo++ | src/ (3 files): add reprconv for attribute inited and jit attrinited |
02:30 | |
| arVM: ac3e0c3 | timotimo++ | src/ (3 files): jit captureposprimspec jit objprimbits for great justice. |
|||
|
02:31
dalek joined
|
|||
| timotimo | poor dalek | 02:34 | |
| now i don't actually know how to do an unconditional branch to a label | |||
| jmp ->var_name does an unconditional branch to a memory position | 02:35 | ||
| oh, jmp does that, too | |||
| ok | |||
| ah, finally! | 02:45 | ||
| 51 bails kicked out | |||
| (potentially only one frame that's run by every invocation, but whatever.) | |||
| timotimo | well, the file now has 63 lines where it used to have 67 | ||
| work has certainly been done. | |||
|
02:47
ilbot3 joined
03:02
vendethiel joined
04:40
Guest1337 joined
|
|||
| Guest1337 | Hi! Don't know where to report this, so here it goes: loop { 1+1;} - doesn't eat all memory, but | 04:59 | |
| "watchdir".IO.watch; loop { 1+1;}; - totally does | 05:00 | ||
| Linux, rakudo-star, nqp and MoarVM version 2015.11 with JIT | 05:01 | ||
| JimmyZ | Guest1337: see rakudo.org/tickets/ | 05:03 | |
| Guest1337 | I'd like someone to confirm it first | 05:04 | |
| JimmyZ | Guest1337: yes, it eats all memory here too. | 05:05 | |
|
06:46
domidumont joined
06:52
domidumont joined
07:18
FROGGS joined
07:29
stmuk joined
07:59
domidumont joined
08:11
virtualsue joined
08:37
brrt joined
|
|||
| dalek | arVM: 975be18 | brrt++ | src/jit/emit_x64.dasc: Fold movzx into the load |
08:43 | |
| brrt | timotimo++ for great JIT work | 08:45 | |
| timotimo: (whenever he's awake or backlogs): jmp ->foobar means jump to assm-global label foobar | 08:46 | ||
| like jmp =>(foobar) means jump to asm-dynamically-allocated label with number foobar | |||
| and jump >1 means 'jump to the next entry of local label >1' | 08:47 | ||
| jmp varname would jump to the memory location indexed by varname, but because dynasm takes 32 bit arguments, that won't work properly on x64 | |||
|
09:03
zakharyas joined
09:13
brrt joined
|
|||
| ilmari | japhb: you are entirely correct, thinko on my part | 09:23 | |
| nwc10 | due to insufficient lunch? | 09:33 | |
|
09:38
domidumont joined
|
|||
| ilmari | due to insufficient brane | 09:43 | |
| ilmari steals stackoverflow.com/questions/131228...cro-kernel | |||
| ilmari never thinks of bitmasking | 09:44 | ||
| jnthn apparently had insufficient brane last night too... | 10:02 | ||
| Just disocvered I released unsinged registers into the signed registers pool...boy did that confuse the assembler :) | 10:03 | ||
| brrt | also... working with smaller-sized things in the JIT, well, that's something we'll be able to handle cleanly in even-moar-jit, but probably not today | 10:04 | |
| jnthn | Yeah | 10:05 | |
| Well, I'm figuring that tree matching will let us do nice things | |||
| brrt | i've already implemented casting, but i don't have the float/int distinction coded in yet | ||
| casting as in, fixing size differences, because yes, that already caused problems | 10:06 | ||
| jnthn | my int16 $i = ...; my uint32 $j = $i; # an extend_u16, coerce_iu, and trunc_i32 | ||
| oops | 10:07 | ||
| my int16 $i = ...; my uint32 $j = $i; # an extend_i16, coerce_iu, and trunc_u32 | |||
|
10:07
domidumont joined
|
|||
| jnthn | :) | 10:07 | |
| I wrote it right the first time then wronged it... | |||
| dalek | arVM: a4cdfb6 | jnthn++ | / (6 files): Coercion between num and unsinged int. |
10:31 | |
|
10:36
rurban_ joined
|
|||
| jnthn | moar.obj : error LNK2001: unresolved external symbol snprintf | 10:36 | |
| dalek | arVM: 466a616 | jnthn++ | src/moar.c: Fix MSVC build. |
10:41 | |
| arVM: a49499a | jnthn++ | src/6model/reprs/P6int. (2 files): Support boxing unsigneds in P6int REPR. |
10:49 | ||
|
11:01
TimToady joined
11:10
virtualsue joined
|
|||
| dalek | arVM: 55222ed | jnthn++ | src/core/bytecodedump.c: Fix dumping of unsinged register types. |
11:59 | |
| arVM: d8a3fa8 | jnthn++ | src/core/interp.c: Fix thinkos in some coercion ops. |
|||
| jnthn | gah, typo again | 12:00 | |
| ilmari | github.com/MoarVM/MoarVM/pull/316 # fix for the alignment macro | 12:12 | |
| japhb++ | |||
| lizmat | .oO( jnthn can't stop singing :-) |
12:25 | |
| jnthn | m: my uint32 $a = 2**31; say $a + 1 | 12:26 | |
| camelia | rakudo-moar d8f7e8: OUTPUTĀ«-2147483647ā¤Ā» | ||
| jnthn | 2147483649 locally :) | ||
| dalek | arVM: 6b02fca | (Dagfinn Ilmari MannsƄker)++ | src/ (3 files): Fix alignment macro definition Also consistently use MVMuint32 for the size and offset values. |
12:29 | |
| arVM: 4ab9121 | jnthn++ | src/ (3 files): Merge pull request #316 from ilmari/fix-alignment Fix alignment macro definition |
|||
|
12:48
virtualsue joined
12:51
virtualsue_ joined
13:02
zakharyas joined
|
|||
| jnthn | m: my uint32 $a = 2**31; say $a | 13:39 | |
| camelia | rakudo-moar 2a2e9a: OUTPUTĀ«-2147483648ā¤Ā» | ||
| jnthn | m: my uint32 $a = 2**31; say $a.Str | ||
| camelia | rakudo-moar 2a2e9a: OUTPUTĀ«-2147483648ā¤Ā» | ||
| dalek | arVM: 53e0a9a | jnthn++ | src/core/ext.c: Recognize unsigned extop operands. |
13:43 | |
| arVM: 4e178ce | jnthn++ | / (8 files): Add a (somewhat cheating) cheating decont_u. |
|||
| arVM: cc142d6 | jnthn++ | src/ (3 files): Merge branch 'master' of github.com:MoarVM/MoarVM |
|||
| arVM: c1f5abf | jnthn++ | / (7 files): Cheating native ref ops for unsigneds. |
|||
| jnthn | oops | ||
| jnthn spot that merge commit sneak in | |||
| *didn't | |||
|
13:48
zakharyas joined
|
|||
| timotimo | jnthn: can you explain readlineint_fh to me? | 14:16 | |
| jnthn | It was the op you used to do readline interactive, before we took linenoise support out of core | 14:18 | |
| timotimo | its implementaiton in inter.pc is ... empty :) | ||
| oh, i see | |||
| jnthn | It shoudln't be used any more | ||
| timotimo | yeah, that makes sense | ||
| dalek | arVM: cde6009 | jnthn++ | / (8 files): Somewhat cheating unsinged parameter ops. |
14:20 | |
| jnthn is popping these in to make stuff mostly work (which is a big step up from now) | 14:21 | ||
| timotimo | i'm amazed that we're getting unsigned ints before butterflymas | ||
| (henceforth to be known as ymas) | |||
| jnthn | Well, the cat was already out of the bag in some senses | ||
| Folks were using them in nativecall bindings | 14:22 | ||
| timotimo | right | ||
| jnthn | So I didn't really want to make them experimental | ||
| timotimo | and getting confused about things | ||
| yeah | |||
| jnthn | We'll have some rough edges | ||
| Mostly around uint64 | |||
| timotimo | how about in native arrays? | ||
| i don't think there's anything in there yet? | |||
| jnthn | They were already righter in there than in many places | ||
| But still the 64-bit edge case | 14:23 | ||
| We can clean those up after xmas too, I think | |||
| timotimo | OK | 14:25 | |
| - 7 BAIL: op <say_fhs> | 14:26 | ||
| pure win \o/ | |||
| dalek | arVM: f3812e0 | timotimo++ | src/jit/graph.c: jit say_fhs for free. |
14:27 | |
| timotimo | now the output of the command that generates my little summary fits on one screen | ||
| scgetobjidx is so popular on that list, i think i'll just write it quickly as a C function and see where that leads | 14:30 | ||
| i wonder if i should write little comments before the functions i've just introduced for the benefit of the jit | 14:31 | ||
| so that later when th exprtreejit has them "in-lined" we can just throw them out if they've not been adopted anywhere else | |||
| dalek | arVM: 7545aa9 | jnthn++ | src/core/bytecode.c: Fix extop validation to accept unsigned operands. |
14:32 | |
| jnthn | Probably would be wise | ||
| dalek | arVM: af4c222 | timotimo++ | src/6model/reprs/MVMCallCapture.c: point out capture_pos_primspec as a "jit-only" function |
14:34 | |
| timotimo | though i think repr_attribute_inited is also sort of interesting for reprconv in general | ||
| jnthn: does fopen_perhaps_with_pid look sane to you? i've put a bit of extra care in to make sure it isn't that easy to break | 14:37 | ||
| jnthn | shopping, will look when I get back :) | 14:40 | |
| timotimo | sure, good luck! ;) | 14:41 | |
|
14:55
patrickz joined
|
|||
| timotimo | wow, that was a "pure win" again | 14:59 | |
| 75 bails gone | |||
| (though since that's combined from all of "make install" of rakudo, it may just be one frame or two frames that show up in every invocation) | |||
| arg_o could be worth a whole lot. | 15:00 | ||
| jnthn | arg_o? I thought that was covered by invocation sequences...odd | 15:03 | |
| Shopping was easy; I only needed red onions :) | |||
| timotimo | oh, hmm. | 15:12 | |
| may be something to ask brrt about | |||
| ah | |||
| it's supposed to | |||
| let's see. it's triggered by "prepargs" | 15:13 | ||
| seems like we end up without a prepargs sometimes? | 15:14 | ||
| oh | 15:26 | ||
| seems like somehow a guardconc + set + getspeshslot slipped in there?! but it also says there's an invoke_o before that, so ... huh?!? | 15:27 | ||
| i see the prepargs in the spesh dump, but it doesn't seem to exist any more by the time the jit hits it | 15:30 | ||
| o__O | |||
| i invoke the magical brrt. halp! | 15:32 | ||
| AHA! | 15:35 | ||
| looked at the first of two "Finished" outputs | |||
| in the seconde one the prepargs is missing | |||
| er ... not only the prepargs is gone, but also the invoke! | 15:39 | ||
| so there's probably something in there that takes care to remove a prepargs if an invoke disappears, but the args in between don't get kicked out perhaps? | |||
| except invoke isn't pure, so ... | 15:41 | ||
| oh, of course. it's inlined! | |||
| dalek | arVM: ae8f391 | jnthn++ | src/6model/reprs/P6bigint.c: Fix size test to avoid corrupting big uints. |
15:42 | |
| timotimo | looks a bit like if there's a mismatch between number of arg_* and getarg_* calls, arg_* ops get left in the dust | 15:44 | |
| that looks easily fixable | |||
| dalek | arVM: c091b48 | timotimo++ | src/spesh/inline.c: spesh inline: kick out remaining unused arg_*/argconst_* ops |
15:59 | |
| arVM: 3638da6 | timotimo++ | src/ (3 files): jit scgetobjidx (via a _jit C function) |
|||
| timotimo | since this also includes decreasing usage numbers for args, it could lead to more efficient bytecode, too. | ||
| and 170 bails across the rakudo compilation are gone, too. | 16:00 | ||
| (it looked like fresh_register was mainly afflicted) | |||
| i sure hope my many jit changes didn't actually break something ... i didn't actually spec test :| | 16:18 | ||
|
16:19
virtualsue joined
|
|||
| jnthn | *sigh* | 16:20 | |
| Please always do it | |||
| I bump revisions on the assumption people will at least do that. | |||
| timotimo | will do | 16:26 | |
| thing is, spectests are damn dirty these days | |||
| and not reliably so | 16:27 | ||
| jnthn | Yes, but they can still catch epic fail | 16:29 | |
| timotimo | should i be staying away from latest nqp for the spec test? or is the sizedness/unsignedness thing stable now? | 16:30 | |
| jnthn | Stable | 16:31 | |
| I bumped Rakudo to use latest NQP also | |||
| timotimo | understood | 16:32 | |
| seeing lots of "ok" at least | |||
|
16:36
virtualsue_ joined
16:41
zakharyas joined
|
|||
| timotimo | i only get very few spec test failures | 16:43 | |
| hoelzro | o/ #moarvm | 17:12 | |
| ilmari | \o | ||
| hoelzro | ilmari: did you get far with your moardump experiment? | ||
| ilmari | hoelzro: I managed to get git to use it when diffing moarvm files | ||
| hoelzro | oh, nice | 17:13 | |
| ilmari | echo '*.moarvm diff=moarvm' >> .git/info/attributes | ||
| (echo '[diff "moarvm"]'; echo ' textconv = moardump') >> .git/config | |||
| (echo '#!/bin/sh'; echo 'exec moar --dump "$@"') >> ~/bin/moardump | 17:14 | ||
| chmod +x ~/bin/moardump | |||
| git log -p src/vm/moar/stage0/ | 17:17 | ||
| hoelzro | timotimo, jnthn: the function for allocation info (on glibc) is called mallinfo | 17:19 | |
| ilmari | (in the nqp repo) | ||
| hoelzro | ilmari: nice, I'll have to try that out | ||
| geekosaur | fwiw mallinfo is also part of System V (Solaris) malloc although the details are likely different | 17:20 | |
| hoelzro | we could always track this information in MVM_alloc itself | ||
| I have patches for adding mallinfo to MoarVM here, if anyone's curious: rt.perl.org/Ticket/Display.html?id=126183 | 17:21 | ||
| JimmyZ | or use something like Dtrace ? | 17:25 | |
| hoelzro | for memory tracking? I didn't know dtrace could do that! | 17:26 | |
| dtrace + lttng support would be nice | |||
| JimmyZ | yes | ||
| or systemtap, or ktap | |||
| hoelzro | I don't know systemtap or ktap; do they have a userspace probe facility? | 17:27 | |
| JimmyZ | yes | ||
| well, systemtap is not easy on debian/ubuntu, you may want to try ktap if you are on these . | 17:28 | ||
| but it is easy to use on redhat | |||
| hoelzro: and you will like github.com/brendangregg/FlameGraph | 17:29 | ||
| hoelzro: www.brendangregg.com/FlameGraphs/me...raphs.html | 17:30 | ||
| hoelzro | coooool | 17:31 | |
| timotimo | what is lttng? | 17:33 | |
| hoelzro | a linux tracer kind of like dtrace | 17:38 | |
| I played with it a bit a little while ago, it's pretty cool | |||
| JimmyZ | the above link is very good for memory leaks :) | 17:39 | |
| timotimo | ah | 17:43 | |
|
18:23
FROGGS joined
18:35
virtualsue joined
|
|||
| dalek | arVM: f8fe345 | FROGGS++ | / (4 files): better check for _Bool to unbust newer MSVC |
20:28 | |
| diakopter applauds jnthn (& co.) for having extreme patience to do things *the right way* for long term optimizability | 21:41 | ||
| (with some leeway for immediate usability!) | 21:42 | ||
| (also, TimToady, of course) | |||
| (& co.) | |||
| jnthn is rather looking forward to working on optimization in the new year | 21:43 | ||
| diakopter is rather looking forward to building a proof engineering environment on top of Perl 6 | |||
| jnthn | Wow :) | 21:44 | |
| Getting to watch other people build stuff in Perl 6 is one of the best things about working on Perl 6 :) | 21:45 | ||
| diakopter | well, we'll see if the long shot pans out | 21:46 | |
.oO( or Peters out.. ) |
21:54 | ||
.oO( or Peter Pans... ) |
|||
| geekosaur | or Peter Parkers out although that could get a bit webbly | 22:07 | |
| timotimo | jnthn: do you have a clear idea of what exactly makes moar with --profile and more than one thread explodey? | 22:37 | |
| jnthn | timotimo: Not sure about explodey, aside from maybe it fails to set up profilign data sturctures on the new threads | 22:38 | |
| timotimo | if that's the case, it could be easy enough to make it at least not crash | ||
| jnthn | timotimo: But I didn't do anything about collecting the data from between the threads | ||
| The profiler is one of our various "jnthn half-wrote something neat in 2 days and hoped somebody would be inspired to do the rest" ;) | 22:39 | ||
| timotimo | um | ||
| it doesn't actually explode? | |||
| jnthn | Oh :) | ||
| Maybe it just ignores the data from other threads then :) | |||
| timotimo | i suppose i need to find an explodey example then :) | ||
| i'm also not sure what things like the call graph would look like :D | 22:40 | ||
| and the overview | |||
| "yeah, we spent 300% of total time executing code and some 10% doing GC" | |||
| jnthn | You'd have to have it per thread | ||
| timotimo | yeah | ||
| jnthn | (Not the whole profiler, but the call graph) | 22:41 | |
| Of course, the *really* hard problem is profiling async code :) | |||
| Which migrates over threads :) | |||
| timotimo | oh lord | ||
| yeah | |||
| i have absolutely no answer to that. | |||
| diakopter | I mean, the call graphs could be merged, but you just have to be aware there's some cross-call-tree interactions going on | 22:42 | |
| timotimo | well, i was under the impression that profile on things using "start" would crash | 22:48 | |
| that's not the case | 22:49 | ||
| that's quite good. | |||
| jnthn | Well, I designed it so threads could collect data | 22:50 | |
| In a thread-safe way | |||
| Just didn't wire any of the aggregation up | |||
| So I figured it'd not be anything too serious if it was explodey | |||
| timotimo | i wonder what gave me the impression ... | 22:51 | |
| jnthn | I dunno, you profiled a thready thing that crashed for other reasons maybe :) | 22:52 | |
| timotimo | could be | ||
| jnthn | 100% of people who confuse correlation with causation end up dying. | 22:53 | |
| TimToady | and some of them suffer a lingering death... | ||
|
23:30
cognominal joined
23:50
flussence joined
|
|||