01:18
FROGGS_ joined
02:09
colomon joined
03:46
ingy joined
07:03
zakharyas joined
07:15
avuserow joined
|
|||
sergot | o/ | 07:45 | |
nwc10 | \o | 08:37 | |
09:02
kjs_ joined
09:50
woolfy joined,
anon joined
10:02
ggoebel11111119 joined
10:17
Ven joined
|
|||
dalek | arVM/moritz/debian: de6fc0d | moritz++ | debian/ (22 files): Add pristine debian/ dir, as generated by dh-make |
10:19 | |
arVM/moritz/debian: 55c2d43 | moritz++ | debian/source/format: [debian], no, not quilt |
|||
arVM/moritz/debian: 7f9f2d5 | moritz++ | debian/changelog: [debian] changelog |
|||
arVM/moritz/debian: ed85c08 | moritz++ | debian/control: [debian] fill out control file |
|||
anon | moritz: how about dir is ports/debian ? | 10:26 | |
moritz | anon: debian packaging tools expect the data to be in debian/ | ||
anon: but I want to keep it in a separate branch, and after a release, merge the release tag into the branch | |||
anon | oh | 10:27 | |
moritz: I saw parrot has a ports/debian dir | 10:28 | ||
but I don't know debian packaging tools :P | |||
dalek | arVM/moritz/debian: 608e77d | moritz++ | debian/rules: [debian] try to flesh out rules file |
10:37 | |
arVM/moritz/debian: 4263f81 | moritz++ | debian/copyright: [debian] fill out copyright file |
10:44 | ||
moritz is thorougly confused by the way debian packages are built | 10:51 | ||
nwc10 | they use specially aligned mirrors to herd smoke into bottles? | ||
moritz | coherent smoke, it seems | ||
nwc10 | oh, very special magic smoke? So like the way a laser plus regular smoke makes pretty lines, this smoke plus regular lights makes pretty lines? | 10:52 | |
moritz | it's called SASEMS (Smoke Amplification by Stimulate Emission of Moar Smoke) | 10:58 | |
does anybody else get modified: 3rdparty/dyncall (untracked content) in Moar? | 11:01 | ||
when doing 'git status' in MoarVM, that is | |||
nwc10 | yes | ||
timotimo | yes | ||
probably due to the build and not complete coverage of gitignore? | |||
moritz | yes | 11:02 | |
timotimo | yeah, it points out lots of Makefiles that are not tracked | ||
moritz | ok, I'll try to .gitignore them | 11:05 | |
timotimo | do we "own" that repository? | ||
ah. yes, we do. | 11:09 | ||
dalek | arVM: d94d7b8 | moritz++ | 3rdparty/dyncall: bump to a dyncall version with more complete .gitignore |
11:10 | |
11:22
Ven joined
11:35
brrt joined
|
|||
brrt | o/ | 11:35 | |
nwc10 | brrt: valgrind FAQ on JITted code: PostgreSQL | 11:39 | |
aarg | |||
valgrind.org/docs/manual/faq.html#faq.java | 11:40 | ||
*that* there. | |||
anyway, I don't think that we hit the problem about reused code *yet* | |||
but they mention VALGRIND_DISCARD_TRANSLATIONS and I have no idea what that is | |||
but it might become relevant | |||
11:42
brrt joined
|
|||
brrt | \o again | 11:43 | |
11:54
anon_ joined
|
|||
jnthn | evening, #moarvm | 12:57 | |
nwc10 | heresy! :-) | 12:58 | |
anon | evening, jnthn :) | 12:59 | |
jnthn | nwc10: It's certainly evening here :) | 13:01 | |
I would say it's dark outside, but so neon... :) | 13:02 | ||
13:07
brrt joined
13:08
anon_ joined
|
|||
brrt | jnthn: one more thing to do it seems, which is upload code | 13:09 | |
have we agreed on uploading a git log -p style patchlog? | |||
jnthn | brrt: Do they accept that? | 13:10 | |
brrt | (if i'm cranky today, it is 100% to do with being forced into $dayjob again | ||
i... dunno really | |||
i've seen talk about submitting patches and the likes | |||
jnthn | brrt: Otherwise, just go for src/jit/ :) | ||
brrt | yeah, that's possible too | ||
except that misses the difficult parts ;-) | |||
and ehm, i thought about removing the huge dasm output files because they obscure the real changes | 13:12 | ||
jnthn | *nod* | ||
Yeah, both good points. | |||
brrt | did you get to take a look at the misspesh in bug 127? | 13:13 | |
i didn't yet | |||
:-) | |||
brrt is clearly going to miss his SoC time this year :-( | 13:14 | ||
13:24
jnap joined
|
|||
jnthn | brrt: At least that means it was enough fun to miss... | 13:29 | |
brrt | yeah that is true | 13:30 | |
how was your flight btw? :-) | |||
jnthn | Fine overall. A small delay. Besides that, just long. | 13:32 | |
brrt | yeah, i can imagine | 13:35 | |
jnthn | Then a few hours to do airport => hotel. | ||
Though that was still better than a 3-hop flight to get to a closer airport... | |||
13:36
JimmyZ_ joined
13:37
JimmyZ__ joined
|
|||
brrt was already quite tired from a single flight + train | 13:39 | ||
japhb | jnthn: Are you back home? Or did you go somewhere different after YAPC::EU? | 14:32 | |
jnthn | japhb: Somewhere else, for $dayjob assignment. | ||
japhb | Ah, is this the "month away" that you've mentioned before? | 14:34 | |
What country are you in now? | |||
jnthn | Yes. China. | 14:35 | |
Thus the long trip :) | 14:36 | ||
japhb | Woah. Yeah, that would do it. | 14:38 | |
[Coke] | Nǐ huì shuō pǔtōnghuà ma? | 14:47 | |
jnthn | Bu hui :( | ||
Though I suspect I'll pick some basics up. :) | |||
[Coke] | that is almost literally all the mandarin I can speak. :) | 14:48 | |
Got stuck after the first cd. :) | |||
brrt | :-o | 15:15 | |
brrt hopes to look at the misspesh thingy tonight, but isn't quite sure if he'll have energy left | 15:19 | ||
15:37
JimmyZ joined
|
|||
JimmyZ | jnthn: Which city are you in? | 15:38 | |
dalek | Heuristic branch merge: pushed 43 commits to MoarVM/moritz/debian by moritz | 16:17 | |
arVM/moritz/debian: 44b5097 | moritz++ | debian/rules: [debian] tweak rules still does not work at all :( |
16:31 | ||
TimToady | div between two native ints doesn't jit yet; anyone know why, offhand? | 16:32 | |
I've got gist.github.com/TimToady/50673b486f09e836ff1e down to running in 4 seconds by using nqp ops, but the div in the tight loop only speshes, doesn't jit | 16:36 | ||
otherwise, I think it'd run considerably faster | |||
though we're stilll about 50 times sloer than D on this | |||
*w | 16:37 | ||
the tight loop ought all fit into registers, I'd think, eventually | 16:38 | ||
*oughta | |||
16:44
Util joined
|
|||
TimToady wonders how much of that 50x is going back to the interpreter to do div, and how much of it is not using registers as well as we might... | 16:48 | ||
does the profiled timing of div count the switch into and out of interpreter time, or is that attributed to the surrounding jitted code? | 16:50 | ||
profile says div takes 20% of the time, but I suspect it's really more | 16:51 | ||
16:51
jnap joined
16:57
tadzik joined
17:04
tadzik joined,
Util joined
17:09
Util joined
17:15
tadzik joined
|
|||
moritz | TimToady: maybe the semantics of div with negative numbers doesn't match the machine instructions, thus no JITting yet? | 17:18 | |
TimToady | eh, div should just be 2's complement semantics; how could it not match the machine instructions? | 17:22 | |
17:23
tgt joined
|
|||
TimToady | unless someone's been hiding from me that Intel architecture is really 1's complement, or does all its integer math using floating point... | 17:24 | |
in any case, I'm only using positive nubmers | |||
not to mention numbers | |||
or maybe spesh hasn't figured out that both sides of the div are always int | 17:25 | ||
well, but it says div itself is speshed in the profile | |||
timotimo: you know anything about that? | 17:26 | ||
are we supposedly jitting div yet? | |||
(on int) | 17:27 | ||
timotimo | i can have a look | ||
it's usually helpful to get a MVM_JIT_LOG to see what ops it bails on | |||
TimToady | the gist above should manifest the issue | 17:28 | |
timotimo | ah | ||
well, look at the way div_i is implemented in src/core/interp.c on line 331 | |||
TimToady | it's an nqp version of the RC entry I just did | ||
timotimo | (i think i wrote that code) | ||
ah, this is for nqp? | |||
TimToady | no, P6 calling nqp:: | 17:29 | |
timotimo | yes, now that i actually *looked*, it's very obvious | ||
... ah yes | |||
the last for loop shows that | |||
TimToady | but the tight loop is *almost* all jitted except for div, according to profile | ||
timotimo | well, the problem could begin as soon as trying to inline the body of div into that loop | 17:30 | |
however | |||
div_I isn't mapped on the jit yet | |||
TimToady | I is Int rather than int? | ||
TimToady doesn't think he's using Int there | 17:31 | ||
timotimo | i shall --target=optimize that and see what exactly it calls | ||
TimToady | $n and $ten are both declared int, and there's no intermediate values | ||
timotimo | - QAST::Op(callstatic &infix:<div>) div | 17:32 | |
interestingly it doesn't inline that at QAST time | |||
FROGGS | TimToady: the uppercase *_I ops are about bigints, aye | ||
TimToady | something to do with catching div-by-0 perhaps? | ||
timotimo | div_i and mod_i turn into an idiv assembly instruction | 17:33 | |
oh | 17:34 | ||
yes, the div subroutine begins with a "fail if ...", which might cause bails in multiple places | |||
perhaps that also causes the jit to not want to inline/jit it | 17:35 | ||
can you try removing that line? | |||
FROGGS | commenting it out and recompiling rakudo will just take a minute, so one could just check that :o) | ||
timotimo | another thing you can do is to just write nqp::div_i instead of infix-div | 17:36 | |
i'll be AFK for maybe an hour now | |||
TimToady | thanks | ||
timotimo | you're most welcome :) | ||
TimToady | nqp::div_i makes it run *twice* as fast, nearly | 17:37 | |
timotimo | you know ... | ||
if we use an #!if moar block, we can catch the exception that the div_i opcode throws and use that to return a fail object instead | 17:38 | ||
that'll still give us the div by zero exception, but possibly make it more inline-friendly | |||
TimToady is all in favor of faster as long as it's correct | |||
timotimo | .o( and the jit might want to learn about div by zero, too ... ) | ||
TimToady | profile shows the div is now jitted | ||
timotimo | "now" is "after removing the fail", yes? | 17:39 | |
TimToady | so the remaining factor of 25x or so has gotta be suboptimal assembly | ||
using nqp::div_i instead | |||
timotimo | ah | ||
TimToady | does that have a fail? | ||
TimToady presumes not | |||
timotimo | Int.pm line 157 is the one i meant | 17:40 | |
TimToady | m: say nqp::div_i(42,0) | ||
camelia | rakudo-moar 8af523: OUTPUT«Division by zero in block <unit> at /tmp/1tBRzrrJCr:1» | ||
timotimo | nqp::div_i doesn't; except it has a check + throw_adhoc in interp.c | ||
TimToady | something catches it | ||
timotimo | line 331 in moarvm's src/core/interp.c | ||
TimToady | wouldn't've thought it would look that complicated... | 17:43 | |
17:51
Ven joined
18:26
Ven joined
18:45
kjs_ joined
18:48
Ven joined
18:55
brrt joined
|
|||
FROGGS | is there a way to print what op is currently being executed in moar? I've got an infiniloop and don't know how to debug further... | 19:00 | |
TimToady | there could be multiple current ops if you're running concurrent | 19:01 | |
FROGGS | I dont think I do | 19:02 | |
is just invokes v5 with an empty v5 block | |||
TimToady | just sayin' there ain't gonna be a handy global containing it | ||
brrt | i'm going to see why div doesn't jit | 19:03 | |
or rather | |||
if div doesn't jit] | |||
TimToady | timotimo++ was looking at it | ||
brrt | oh ok :-) just as well | ||
TimToady | he thought it was the fail if | ||
putting nqp::div_i in place of infix:<div> makes it jit though | 19:04 | ||
at least, if I read the profile right | |||
FROGGS | I think I recompile with CGOTO enabled an just add a printf to the runloop... | ||
TimToady | that one thing makes it run twice as fast | ||
but you'd think spesh could narrow it down to nqp::div_i | 19:05 | ||
so not sure what the problem is | |||
brrt | hmm | ||
oh, div is p6 isn't it | 19:06 | ||
TimToady | yes | ||
brrt | hmm :-) | 19:08 | |
ok, i can tell you that i've indeed implemented the naive integer div already | |||
so that isn't the problem | |||
if there is a problem then it's because i haven't jitted something that's used in div yet | 19:09 | ||
TimToady | is it the chicanery with negatives and floors? | ||
FROGGS | is there an easy way in C to check how long a program is running? | ||
TimToady | well, not an actual floor call | ||
FROGGS | then I could print a backtrace and exit after 20s or so | ||
TimToady | man times(2) | 19:10 | |
FROGGS | thanks :o) | ||
brrt | oh, it may be floor | ||
TimToady | just emulating floor for negatives, at least in interp.c | ||
brrt | but ehm, i can't find the reference to infix<div> or anything like that in the spesh log | ||
oh, i've found it | |||
it bails on div_I | 19:11 | ||
TimToady | but both args are int, not Int | ||
and there's no intermediate value | |||
brrt | well, that may be so, but the NQP compiler emits a div_I instruction | 19:12 | |
and spesh doesn't know - and i don't think it can represent - lowering from bigints to integers | 19:13 | ||
or the perl6 compiler, i don't know which :-) | |||
TimToady | perhaps I should try declaring them uint instead... | 19:14 | |
brrt | and the reason div_I hasn't been implemented yet, as far as i can tell,, is that it's calling convention is different from other bigint calls | ||
TimToady | there are no bigints in that part of the program | ||
brrt | lemmesee how infix<div> is defined | ||
TimToady | maybe there's no int/int candidate | 19:15 | |
brrt | could well be | 19:16 | |
TimToady | but there is an int/int candidate, which calls div_i | ||
brrt | uh, yeah | ||
TimToady | mysterious | ||
brrt | what is more | 19:17 | |
that is actually the speshed candidate | |||
(which i know from adding file-and-line numbers to the spesh log) | |||
TimToady | is the fail wedging it somehow? | 19:18 | |
brrt | hmmm | 19:20 | |
its.. weird, i think the line number may be wrong | |||
or not | |||
it actually does fall down to div_i | 19:21 | ||
but somehow it calls a method called sink? i just don't get it | |||
FROGGS | TimToady: works well, I think I know where I have to look now :o) gist.github.com/FROGGS/9e244524f94c524f15e2 | 19:23 | |
brrt | hmm i'm wong about this | ||
div is actually JITted it seems | |||
the int, int version | 19:25 | ||
the Int, Int version is not | |||
TimToady | maybe it's just not inlining for some reason | ||
though you'd think profile would report the non-inlined routine as jitted, not just speshed | 19:26 | ||
19:28
donaldh joined,
njmurphy joined
|
|||
TimToady | and certainly something changes when it uses nqp::div_i direclty, since it's twice as fast | 19:29 | |
TimToady likes N times as faster where N is an integer > 1 | |||
FROGGS | so the question is more like: why does it pick the Int,Int candidate? | ||
TimToady | if it was picking the Int,Int candidate, it would never have optimizes the int,int candidate, which I though it did, at least to spesh it | 19:30 | |
*mized | |||
which seems to prove it was calling it | 19:31 | ||
timotimo | jnthn was changing the call convention of the bigint ops so that the jit would have an easier time calling them | ||
in particular, the op is now in charge of allocating the resulting bigint object, not the interpreter | |||
19:32
tadzik joined
|
|||
timotimo | div_I just didn't get changed because nobody has done it yet | 19:32 | |
TimToady | but let me double check that --profile is looking at that line in int/int | ||
timotimo | has anybody actually tried to remove the "fail X::DivisionByZero.new if $b == 0" line and see if it's better | 19:33 | |
FROGGS | I havn't | ||
TimToady | profile is definitely reporting the int,int version as speshed (but not jitted) | 19:34 | |
timotimo | but not inlined, yeah? | ||
TimToady | apparently not | ||
19:35
nick` joined
|
|||
timotimo | i still blame the fail instruction :) | 19:35 | |
19:35
njmurphy left,
nick` left,
njmurphy joined
19:36
Util joined
|
|||
TimToady | the ids routine is otherwise entirely green, and stays green with nqp::div_i, so it must be the inlining | 19:37 | |
timotimo | i wonder if we can successfully inline the fail multi sub | 19:40 | |
TimToady | I never tried to comment it yet | 19:41 | |
timotimo | fail does getlexcaller | ||
that's probably at least not jittable. | |||
TimToady | yes, commenting the fail lets it inline and jit it | 19:43 | |
19:44
Util joined
|
|||
timotimo | excellent | 19:44 | |
19:44
tadzik joined
|
|||
TimToady | it still traps Division by zero if you comment it, and that error is trappable with try | 19:45 | |
so maybe we should just leave out the fail? | |||
timotimo | well, there's still the difference between die and fail | 19:46 | |
TimToady | trooo | 19:47 | |
maybe we need to find a jittable way to fail | |||
timotimo | did you look at why fail does getlexcaller? | ||
it looks for a symbol named RETURN | 19:48 | ||
that's gotta be the mechanism that does the "return an unthrown exception" piece | |||
TimToady | would a "return" also mess up an inline? | ||
timotimo | it'd be neat if we had an internals-only version of fail that we'd put as the last statement of the sub | ||
i don't think so | 19:49 | ||
return should be fine | |||
(but it might be simpler if it's just the last statement) | |||
(last-statement-return instead of return-return) | |||
TimToady | 'use fatal' semantics to turn a fail into a die could be enforced on either the caller or callee end | 19:50 | |
it's lexically scoped on the caller end, so something to be said for doing it there | |||
timotimo | though ... we already have an opt that turns return-as-last-statement into no-explicit-return | ||
TimToady | but this one isn't the last statement, it's before the div_i | ||
timotimo | yeah | 19:51 | |
but you can turn it into an if that encapsulates both things | |||
shouldn't that be fine? | |||
TimToady | ya'd think | 19:52 | |
timotimo | oh, right ... this is performance-critical code | ||
nothing is as you'd think :) | |||
TimToady | trying ??!! | 19:53 | |
timotimo | WHAT ARE YOU TRYING??!! | 19:54 | |
TimToady | no inline from $b ?? nqp::div_i($a, $b) !! fail X::Numeric::DivideByZero.new; | 19:55 | |
FROGGS | 'fail' is too exotic me thinks | 19:56 | |
locating the RETURN for example | |||
19:57
kjs_ joined
|
|||
timotimo | yes. | 19:58 | |
we can't really pass RETURN as a positional arg either, as fail has a *@msgs candidate | 19:59 | ||
TimToady | other problem is that we can't compile a Failure.new at that spot in the setting, seems to loop the compiler | 20:04 | |
timotimo | ah, and just adding class Failure { ... } before that doesn't work either | 20:06 | |
? | |||
TimToady | yes, that works, and lets it inline: $b ?? nqp::div_i($a, $b) !! Failure.new(X::Numeric::DivideByZero.new); | 20:09 | |
now the only problem with that is that 'use fatal' will probably not work in the caller, unless it knows to handle failures on that end | 20:10 | ||
well, anyway, I think we have a better handle on what's going on now | |||
timotimo | oh btw | 20:11 | |
TimToady | I've always kind of thought that the burden should be on modules that say 'use fatal', not on everyone else | ||
timotimo | how is Int arithmetic going to work out when we have -Inf and Inf as Int? | ||
TimToady | we had a long discussion of that on #perl6 a few days ago | 20:12 | |
timotimo | ah good | ||
TimToady | short answer, don't confuse the IEEE concept of Int with the Orderable role's concept of AfterEverythingElse, which might or might not show up with the name "Inf" | 20:13 | |
but I had some reason for wanting Inf overloaded, which I've forgotten | |||
er, I keep typing Int when I mean Inf, duh | |||
anyway, different types can maintain their own ideas of "off the end", probably, even if we choose to confuse them at a language level | 20:14 | ||
that's about as far as we got on it | 20:15 | ||
m: say [min]() | |||
camelia | rakudo-moar 8af523: OUTPUT«Inf» | ||
TimToady | what type is that, for instance? what if it's the degenerate case of a string min, or of comparison in some type that is neither numeric nor string | 20:16 | |
Inf is more of a concept in Perl 6, and IEEE Inf is just how it's represented in Num | 20:17 | ||
that's what the original intent was, dunno if we can get there | |||
timotimo | ah | 20:18 | |
TimToady | especially since I need a nap now | ||
timotimo | it does sound sane at first | ||
good nop! | |||
TimToady | more important to sound sane at last :) | ||
TimToady --> zzz & | |||
brrt | sleep well | ||
timotimo | heyo brrt | 20:19 | |
i'm glad you added line number annotations to spesh output :) | |||
brrt | hey timotimo :-) | ||
glad to help :-) i needed them, too | 20:21 | ||
have you seen issue 127 perchance | |||
i'm going to log off now, see you tomorrow | 20:23 | ||
20:23
brrt left
|
|||
timotimo | have not, will look | 20:25 | |
ah, 127 | 20:26 | ||
this one is puzzling :) | |||
20:36
itz_ joined
20:44
itz joined
20:59
kjs_ joined
21:21
Ven joined
21:28
donaldh joined
21:33
woolfy1 joined
22:04
kjs_ joined
22:17
woolfy joined
22:50
ilbot3 joined
23:00
colomon joined
23:16
colomon joined
|