00:40
avuserow_ joined
|
|||
jnthn | brrt++ # blog post | 01:17 | |
01:22
FROGGS_ joined
01:48
ilbot3 joined
01:57
lue joined
02:20
jnap joined
03:08
avuserow_ joined
|
|||
dalek | arVM/const_storage_spec: 60ad5d9 | jimmy++ | src/ (46 files): make get_storage_spec returns const MVMStorageSpec * |
03:34 | |
05:32
colomon joined
07:03
zakharyas joined
|
|||
sergot | o/ | 07:47 | |
moritz | serg\ot | 07:52 | |
07:54
klaas-janstol joined
08:11
woolfy left
08:13
Ven joined
08:14
brrt joined
08:15
woolfy joined,
woolfy left
|
|||
sergot | mo/ritz | 08:20 | |
brrt | \o sergot | 08:21 | |
FROGGS_ | morning _ 'VB FTW | 08:23 | |
08:24
woolfy joined
|
|||
brrt | VB? | 08:26 | |
08:43
klaas-janstol joined
|
|||
FROGGS | visual basic | 08:44 | |
brrt | oh | 08:47 | |
why is VB ftw? | |||
nwc10 | brrt++ # good blog post | ||
brrt | oh thanks :-) | ||
08:47
jimmyz joined
|
|||
brrt | i've corrected the interator error :-) | 08:48 | |
jimmyz | jnthn/brrt: would you mind if I push const_storage_spec branch to master? | ||
brrt | does it work and pass spectests? | ||
nwc10 | it worked for me. However, I was using gcc. | ||
FROGGS | brrt: that was ironic :o) | ||
brrt | i don't. but how did you handle the fact that the repr_data storage spec is'nt quite const | ||
ooh | |||
nwc10 | what does MSVC think of it? | 08:49 | |
jimmyz | works here | ||
FROGGS | I mean, everything that "unspaces" with _ and escapes quotes with more quotes is plain stupid | ||
jimmyz | I didn't get a chance to test it with msvc | 08:50 | |
nwc10 | I've not looked at the code, so I can't say "yes, it makes sense", but if you're changing const, I think it would be a good idea to be sure that something more picky than gcc is happy with it | 08:51 | |
jimmyz | aye | ||
brrt will check msvc | 08:53 | ||
or, i won't, because virtualbox is angry at me | 08:54 | ||
jimmyz | for another info, it reduces libmoar.so size about 100 bytes :P | ||
brrt | o.O | 08:55 | |
why would that be | |||
reboot, bbiab | 08:57 | ||
08:59
brrt joined
|
|||
brrt | VirtualBox, y u uninstalled | 09:00 | |
09:03
woolfy left
09:07
brrt joined
|
|||
brrt | i'mma be reporting bugs to fedora it seems | 09:07 | |
jimmyz: can't vet for your commit yet | 09:09 | ||
jimmyz | brrt: no hurry | 09:10 | |
brrt | oh bloody, rebooting killed my work in the evaluation form :-( | ||
that's pretty dumb of me | 09:11 | ||
clang is slohooow | |||
although we should probably fix all its warnings | 09:12 | ||
idiotically slow, i might add | 09:13 | ||
but it seems it compiles OK | 09:16 | ||
anyway, bbi3h | |||
09:30
woolfy joined,
woolfy left
09:37
woolfy joined
09:38
woolfy left
|
|||
timotimo | "be back in 3h, when my moarvm compilation has finished" | 09:47 | |
10:07
Ven joined
10:37
Ven joined
11:41
brrt joined
11:44
itz_ joined
|
|||
brrt | not that long timo :-) | 12:19 | |
oh in response to your question | 12:20 | ||
what happens really often in code is that we take an iterator of a hash or array | |||
and then check if it's value is true | |||
and then shift a value from it | |||
but these operations are never invokish | |||
and could in fact easily be inlined without any form of dispatch | |||
at least, if you know whether you are dealing with a hash iterator or an array iterator | 12:21 | ||
which you probably do because spesh | |||
nwc10 | I was about to type your last line for you | ||
timotimo | that does sound kinda interesting | 12:22 | |
brrt | anyway, iterator true is never invokish, so just speshing that into it's own op will save some | ||
timotimo | fwiw, the boolification spec may be "ELEMENTS" | ||
in which case, there's a piece of code in spesh that almost does what you want already | |||
oh | |||
we only do that on KNOWN_VALUE at the moment, which is far from helpful | 12:23 | ||
which kind of check-for-truth are we using in the iterator case? | |||
if_o/unless_o? | |||
brrt | unless_o most of the time | ||
basically for @foo -> $bar { } makes an iterator out of @foo, jumps after our block unless the iterator is true, shifts from the iterator, enters the block, and jumps back at the end | 12:25 | ||
timotimo | OK, i can whip something up now that we have a way to allocate temporary registers | 12:26 | |
(which is what blocked the previous attempt at this feature) | |||
src/spesh/optimize.c:202 does it for known values, for just known type, it'll turn into unbox_i, unbox_n, isnull_s, ... | 12:27 | ||
not 100% sure if we have a proper op yet for the iterator case, may just have to build an sp_istrue_iter or something | |||
today may end up a busy day for me for other things, though, so maybe it'll happen tomorrow | |||
brrt | yeah, i'd say that we have 16 bits of space for ops | 12:28 | |
which is? 1024 * 64 ops? plenty space to add special ops for special situations | 12:29 | ||
nwc10 | "Special Circumstances" | 12:31 | |
12:42
FROGGS[mobile] joined
|
|||
timotimo | "OpenBSD Ports Change" tweeted that moarvm b0rks with "error: unsupported platform" for dyncall_callvm.c | 12:44 | |
jnthn | Um...did we actually upgrade it? | 12:47 | |
jnthn didn't recall doing that for a while | |||
timotimo | no clue | 12:49 | |
maybe someone put the port in there for the first time or something | |||
13:06
JimmyZ joined
|
|||
JimmyZ | const_storage_spec branch builds with MSVC | 13:10 | |
so I will push it to master :) | |||
13:11
jnap joined
13:12
ggoebel11111112 joined
|
|||
dalek | arVM: 60ad5d9 | jimmy++ | src/ (46 files): make get_storage_spec returns const MVMStorageSpec * |
13:13 | |
brrt | much approve | 13:14 | |
jnthn | Such const | ||
JimmyZ | :/ | ||
moritz | 46 files changed, 103 insertions(+), 103 deletions(-) | 13:16 | |
wow | |||
erm | |||
such wow | |||
nwc10 | (correct) const is good, because it tells both the compiler and humans things | ||
it's better to get it right early, because it's hard to retrofit | 13:17 | ||
JimmyZ | yeah, at least it's good for GCC | ||
moritz | ftr I'm not against consting anything, I was just surprised how many lines it touched | 13:21 | |
nwc10 | I still haven't looked at it, but I'm not surprised | ||
moritz | (but that's just because I don't know the code base at all) | ||
jnthn | I guess const is somewhat viral. | ||
nwc10 | ayre | ||
aye | |||
I *have* now skimmed it, and it doesn't surprise me | 13:22 | ||
[Coke] | brrt++ # one of the more successful GSOC programs (most stuff already integrated into master!) | 13:27 | |
brrt | \o/ yay | 13:28 | |
yes, that is very nice | |||
nwc10 | that's somewhat an understatement | ||
[Coke] | nwc10: was hedging my bet. | ||
nwc10 | :-) | ||
wise | |||
jnthn | Is there anything that isn't integrated into master by now? :) | ||
And yes, brrt++ | |||
I'll be filing my eval later today :) | |||
nwc10 | jnthn: I don't know. There are a lot of branches still | ||
brrt | not in the way of branches, i think | 13:29 | |
jnthn | nwc10: Yes, I meant of brrt++'s work :) | ||
nwc10 | oh, his work - he still has to drink the beer that we're going to buy him. | ||
jnthn | :) | ||
brrt | and for the time being, i'd like to keep moar-jit arround so we have a place to stuff the the breaking jit stuff | 13:30 | |
jnthn | +1 | ||
FROGGS | +1 | ||
:o) | |||
[Coke] | is he even old enough for bier? | ||
JimmyZ | brrt++ # indeed | ||
FROGGS | *g* | ||
brrt | oh, can you all help me out a bit? what would be the most colourful thing to tell on my eval form about the past few months? | 13:31 | |
there are plenty of things of course that happened | |||
nwc10 | [Coke]: oh, most curious. For the purposes of YAPC::Europe, everyone is: en.wikipedia.org/wiki/Legal_drinking_age#Europe | 13:32 | |
brrt | lol | 13:33 | |
well that wouldn't be a problem for me anyway :-) | |||
[Coke] | nwc10: bulgaria++ | ||
jnthn | brrt: Well, I most remember staying up until 3am fixing deopt all + JIT :P | ||
brrt | oh yes, that was a story | ||
[Coke] | Question for the .eu crowd here; would you travel to Belarus? | 13:34 | |
brrt | ... i doubt it | ||
jnthn | [Coke]: Yes, if I had a good reason to. | ||
brrt | why ask? | 13:35 | |
jnthn | [Coke]: And next time I won't try taking a building of "that hilarious ugly building", only to find I have a policeman telling me that it's the presidential palace and I should delete my photos of it. :) | ||
brrt | whut :-o | ||
[Coke] | (my father's family is from belarus) | 13:36 | |
jnthn | Police guy spoke no English. My Russian is awful. His attempt to write my name and address in Cyrillic was hilarious. I'm not sure they'd have found me with that info if they tried. :) | 13:37 | |
nwc10 | your Russian was good enough to deal with the Ukrainian taxi drivers | 13:38 | |
jnthn | Taxi drivers have a simpler interaction model than police. :) | 13:39 | |
Anyway, I don't really consider Belarus a dangerous place to go. It does need some paperwork/prior arrangements that are a small nuisance. Brest is a LOT nicer than Minsk. | 13:40 | ||
brrt | i consider belarus a slightly politically unfriendly place to go | 13:41 | |
although that's probably not that relevant for foreigners | 13:42 | ||
[Coke] | yah, I'd mainly go to consider hitting up town halls for birth records, I think. | ||
... it occurs to me it'd be much cheaper to pay for jnthn to go! | |||
jnthn | Hm, that'd mean dealing with administrationy folks = *certainly* could use a native (or fluent) speaker. | 13:44 | |
brrt regrets not learning russian when it was offered | 13:45 | ||
anyway, cyrillic isn't all that complex if you know the greek alphabet | 13:46 | ||
jnthn | I didn't, but still didn't find it too complete :) | 13:47 | |
uh, complex | |||
[Coke] | I tried bulgarian briefly; seemed doable, but I stopped working with the offshore bulgarian team before I could do more than say "hello, please a beer give me." | 13:49 | |
13:50
woolfy joined
|
|||
brrt | the yapc::eu wiki tells me sofia is 7000 years old... that's pretty amazing i think | 13:50 | |
13:50
woolfy left
|
|||
brrt | oh, timotimo: i'd meant to say that the MVMJitCode structure has both the pointer to and the size of the code, as well as the pointer to the static frame (so you have its' name) | 14:02 | |
14:05
woolfy joined,
woolfy left
14:15
woolfy joined,
woolfy left
|
|||
brrt | submitted | 14:24 | |
pfew | |||
that was a bit of work | |||
[Coke] | brrt++ | 14:42 | |
14:54
cono joined
|
|||
TimToady | that was the hard part :) | 15:32 | |
brrt | evaluations aren't easy, that's for sure | 15:41 | |
15:47
FROGGS joined
|
|||
japhb | self-evaluations particularly so | 15:48 | |
16:28
klaas-janstol joined
16:56
ggoebel11111113 joined
17:26
Ven joined,
brrt left
17:44
tgt joined
17:47
Ven joined
|
|||
timotimo | i'll spend a bit of time on the iterator boolification optimization in spesh now | 18:17 | |
18:19
klaas-janstol joined
|
|||
timotimo | should i put sp_ ops at the very end when i add new ones or should i just put them where i think they fit? | 18:32 | |
as the order of sp ops doesn't matter for serialized bytecode | |||
jnthn | Yeah, the oder doesn't matter | 18:33 | |
uh, order | |||
I'm sure the Oder is a very important river indeed. | |||
timotimo | :) | 18:35 | |
welcome to the new world Order | |||
18:47
Ven joined
|
|||
timotimo | huh. | 19:33 | |
sadly, the spesh_diff script is in somewhat bad repair :\ | |||
jnthn: is there a reason why MVM_spesh_manipulate_insert_ins(tc, bb, ins->prev, new_ins); could end up not putting the new_ins in? | 19:43 | ||
jnthn | In my experience, normally 'cus I did something silly on the calling side :) | 19:44 | |
(Passed the wrong basic block, or tried to insert the wrong thing, or into the wrong thing, or onto a deleted thing, or... :)) | 19:45 | ||
timotimo | don't think i did anything like that | ||
however, i may have put a "isconcrete" in and that turned into a guardconc, but not a const_i64_16 | 19:46 | ||
gist.github.com/timo/1f1ba5dd12f1748e56b2 - but i don't even know if this is what blows up | |||
would ins->prev work even if the instruction is at the very beginning of a basic block? | 19:48 | ||
jnthn | Yeah, it knows what to do with NULL | 19:49 | |
timotimo | i can clearly see the temp register being used in the if_i/unless_i that is the result of my optimization | ||
but i never see the op i insert before that that is supposed to put an actual value in | |||
oh. | |||
dead code elimination | |||
forgot to up the usages of the temp register ... again. | |||
jnthn | :) | 19:50 | |
Yes, the dead code elim is quite efficient :) | 19:51 | ||
timotimo | yup. | ||
it seems like boolify_iter doesn't get used a single time in nqp's build process | 19:52 | ||
jnthn | Did you do some facts on iter? | ||
timotimo | probably not | 19:53 | |
i'll have to check if it gets a MVMList repr'd object, a MVMHash repr'd object or a MVMContext repr'd object and then handle each individually ... hmm. | 19:55 | ||
it'll probably be fine to replicate the type selection logic from MVM_iter in spesh ... | |||
jnthn | Yes, I think that's the kinda thing to do | 19:57 | |
timotimo | this'll better be worth it :P | 19:59 | |
cool, seems to work | 20:07 | ||
i'll strip the debug messages and commit + push if it survives spectests | 20:08 | ||
20:09
woolfy joined
|
|||
timotimo | oh damn | 20:11 | |
spectests are quite unhappy | |||
unbox_i makes things unhappy | 20:14 | ||
hmm. | |||
of course. | 20:33 | ||
it's supposed to return a falsy result if the value is a type object | 20:34 | ||
and unbox_i will blow up instead | |||
jnthn: what's the best suggestion you can come up with to get around this problem? | |||
except for "don't turn iffy ops into unbox_*" | 20:35 | ||
trying to bool_I on a type object will violently explode ... | 20:37 | ||
timotimo puts a KNOWN_CONCRETE check in there to guard the optimization | 20:38 | ||
jnthn | Yes, chekcing it's concrete is the way to go | ||
You need to know an opt is valid before doing it :) | |||
timotimo | oh! | ||
actually | |||
... how does the SSA form react if i put another goto in there? | 20:39 | ||
because i can just turn an if_o into an isconcrete + if_i + unbox_i + if_i for example | |||
er ... not quite | |||
it'd have to be an unless_i and then it'd have to jump to the BB's successor :\ | 20:40 | ||
can i be sure that iter will return something that is concrete? | 20:41 | ||
jnthn | Yes, iter always will returna concrete MVMIter | 20:42 | |
timotimo | OK | ||
jnthn | Uh | ||
But you don't know the type | |||
MVMIter is a repr | |||
You need to look at the RHS to know the type | |||
But I guess you are already :) | |||
timotimo | yes, i am | ||
strange. i have a FACT_CONCRETE guarding my iffy opt, but i still get an "cannot unbox type object" error in many, many spec tests | 20:43 | ||
but maybe it just means i'm accidentally letting a branch happen that shouldn't | 20:48 | ||
like ... an isconcrete was guarding an unbox and i'm accidentally blowing that up | |||
but an isconcrete that is guarded by FACT_CONCRETE should turn into a const and then into a goto | 20:51 | ||
hmm. | |||
if the spec tests are clean for boolify_iter, i'll push and you can have a little look | 20:54 | ||
20:59
tgt joined
|
|||
timotimo | does t/spec/S32-list/uniq.t fail usually? | 20:59 | |
it segfaults here | |||
#0 0x00007fcacf9dc146 in scan_registers (frame=0x6ae1fd0, worklist=0x677bdb0, tc=0x19af650) at src/gc/roots.c:373 | 21:01 | ||
maybe i'm doing dumb things with the registers i'm throwing around? | |||
SPESH_DISABLE=1 makes it pass >_> | 21:05 | ||
er, whaaaaat | 21:06 | ||
#25 0x0000000000000004 in ?? () | |||
No symbol table info available. | |||
that can't be right | |||
at least with disable_jit, the stack doesn't explode as hard | 21:09 | ||
21:14
brrt joined
|
|||
timotimo | oh! | 21:15 | |
it also crashes without my changes! | |||
thta's | |||
that's fine, then | |||
dalek | arVM: c89d083 | (Timo Paulssen)++ | / (6 files): we can have a sp_boolify_iter op to boolify iters quickly |
21:18 | |
arVM: 586e4ce | (Timo Paulssen)++ | src/spesh/ (2 files): facts for iter, spesh iffy into boolify_iter |
|||
timotimo | jnthn: if you could have a look at the other modifications in iffy... | ||
brrt | timotimo: that's not ifne :-) | 21:33 | |
timotimo | uh? ifne? | 21:34 | |
oh | |||
fine. yeah, i get it | |||
jnthn | timotimo: Still working hard on my talk at the moment... :/ | 21:37 | |
timotimo | OK | ||
that's a bit more important | |||
now i have brrt to bother! :D | |||
jnthn | Well, more urgent at least :) | ||
brrt will probably be at my talk, so will be quite bothered if it sucks :P | |||
brrt | i very much intend to be, yes :-) | 21:38 | |
jnthn | Did you work something out for not missing your plane? :) | ||
timotimo | heh :) | 21:39 | |
brrt | yeah, we're staying at my in-laws | ||
which live quite a bit closer | |||
jnthn | Ah, cool | ||
japhb | "we"? Who else is going with you? | 21:40 | |
brrt | but anyway, i haven't seen uniq.t fail | ||
my gf :-) | 21:41 | ||
japhb | Ah! Also a hacker? | ||
timotimo | brrt: did you see my problem? i guard tha iffy changes with FACT_CONCRETE, but i get lots and lots of spectests failing with "cannot unbox type object" | 21:42 | |
but the op that'd try to unbox would be unboxing the thing that's FACT_CONCRETE | |||
brrt | no hacker (yet) :-) | ||
japhb | Let the immersion training commence! ;-) | 21:43 | |
brrt | timotimo: i don't really understand what you do yet in your code | ||
maybe a hacker in non computer related senses, though :-) | 21:45 | ||
timotimo | brrt: if we know the type of the flag used for the if_o/unless_o, we can have a look at what its boolification spec's mode is | ||
brrt | i see | ||
timotimo | so i'm trying to turn, for example, unless_o on an MVMIter into a sp_boolify_iter that generates an int64 and then unless_i | ||
japhb | Oh, brrt, I forgot to say way back when you mentioned you were getting a degree in energy and environmental science, and someone said that gets used by anyone who has a datacenter ... they're not only right, that's not the half of it. At the scale of e.g. Google, there's a LOT of work going on to deal with the externalities of vast energy and equipment usage in concentrated areas. So please apply here when you get your degree. :-) | 21:46 | |
timotimo | in the spectests i get lots and lots of "cannot unbox type object" | ||
brrt nods and thinks that is the right approach | |||
timotimo | but i'm already checking the flag for FACT_CONCRETE | 21:47 | |
so no type object should land in my unbox_i (for example) operation | |||
so i have to guess i'm causing a branch to be evaluated that shouldn't have been evaluated | 21:48 | ||
:\ | |||
brrt | japhb: yeah, it's something i'm actually very excited about | ||
21:48
Ven joined
|
|||
brrt | part of my motive for making a JIT compiler is that compiled code is more efficient = more energy efficient as well | 21:49 | |
i'm looking at the spesh diff you posted, it looks quite different | |||
timotimo | oh, yeah | ||
that was before i added the usages++ to the temporary register | |||
so the dead code eliminator killed the inserted instruction immediately :) | |||
brrt | nice | 21:50 | |
[Coke] | uniq.t fails all the time. | ||
brrt | hmm | ||
timotimo | OK, that's good to know | ||
i was worried i had screwed something up there | |||
brrt | basically, do you know what out_facts->flags held before you did anything with it? | ||
[Coke] | github.com/coke/perl6-roast-data/b....out#L2381 | ||
it's been segfaulting for some time. | 21:51 | ||
timotimo | you mean in the facts discovery for the iter op? | ||
brrt | yeah | 21:52 | |
brrt hadn't seen that yet (uniq.t bustage) | |||
timotimo | i don't, actually | ||
why should that asplode? | |||
oh, i forgot to say: | |||
the "can't unbox type ojbect" only occurs if you remove the return in front of, for example, MODE_UNBOX_INT | 21:53 | ||
so it's nothing to do with the iter facts i'd think | |||
brrt: the out_facts flags are 0 before the iter_facts runs through | 21:56 | ||
brrt | hmm ok | 21:58 | |
brrt is trying to understand what's going on and not quite succeeding yet | |||
timotimo | what's going on or what's going wrong? :) | ||
21:59
klaas-janstol joined
|
|||
brrt | both :-) | 21:59 | |
timotimo | i thought the code ended up somewhat straight-forward %) | 22:03 | |
but i can explain it point for point if you'd like | 22:04 | ||
maybe that'll help us stumble over the mistake | |||
brrt | lets say it in another way | 22:07 | |
timotimo | at least "uncommenting" a few more boolification specs doesn't seem to break spectests | ||
brrt | i have no idea what the code does with the changes you made :-) | 22:09 | |
dalek | arVM: 50edccc | (Timo Paulssen)++ | src/spesh/optimize.c: these speshes don't break spec tests |
22:11 | |
timotimo | here's more changes to make it easier! | ||
please ask more specific questions? | |||
brrt is reading :-) | 22:16 | ||
dalek | arVM: d27d560 | jnthn++ | src/math/bigintops.c: Fix nqp::isbig_I to not consider so much big. This should fix the weird drop-offs in the native benchmarks on native int loops, where we prematurely switched to bigints even though we were well within a 64-bit register. |
22:26 | |
timotimo | er, huh, what. | ||
now the spec tests seem much, much cleaner even after enabling UNBOX_INT again | 22:27 | ||
brrt | uhm, it seems many many more need isconcrete first | 22:30 | |
but that's just me | |||
timotimo | yes. that's why i guarded against FACT_CONCRETE | ||
well ... it works now ... for some reason ... | 22:31 | ||
not sure how often it still triggers for ints now ... | |||
brrt | yeah, mode unbox_int requires to check for concretishness | ||
timotimo | yes. | ||
so ... if i want to put an isconcrete check in, i'd need to emit a jump directly to the BB that's the successor after the isconcrete and then the check for the unboxed int | 22:32 | ||
will that be terribly, tĆØrribly bad for consumers of the SpeshGraph datastructure? | |||
i.e. having a goto that's not at the exact end of the BB? | |||
brrt | worst case we add a manipulate api to split bbs | ||
but i'm not sure what effect this has on the SSA computation? | 22:33 | ||
timotimo | soudns very finnicky | ||
22:33
klaas-janstol joined
|
|||
brrt | yeah, i agree | 22:34 | |
timotimo | i have a pretty good-looking spectest run right now with more modes activated | 22:36 | |
dalek | arVM: d5045ec | (Timo Paulssen)++ | src/spesh/optimize.c: MODE_UNBOX_INT and MODE_BIGINT seem to be safe according to the spec tests |
22:39 | |
timotimo | can you test this? spec tests are clean with it on my machine | ||
brrt | tell you something strange. on this laptop i can actually hear the CPU working :-o | 22:41 | |
timotimo | it's probably the powersaving jumping between frequencies | 22:42 | |
brrt | hmm i imagine so | ||
timotimo | and now i should implement sp_boolify_iter | 22:44 | |
brrt | yeah :-) | 22:45 | |
actually, can't we do sp_boolify_iterhash and sp_boolify_interarray directly | |||
timotimo | we could. do you suggest i do that? | 22:46 | |
brrt | i.e. look at the structure as if encapsulation doesn't exist | ||
timotimo | well, in that case it could turn into a sp_get_i | ||
brrt | hmm... i suggest that i myself won't do it tonight, yet | ||
timotimo | :) | ||
brrt | i'm going to sleep in a few minutes | ||
timotimo | oh | 22:47 | |
sadly, the calculation isn't quite as simple | |||
brrt | let me see how MVM_iter_istrue is done | ||
timotimo | for hash, it's a check for a null in the iter_state.next | ||
but for the array it's a index + 1 < array_state.limit | |||
brrt | uhuh | 22:48 | |
which is why you have the different ops for them :-) | |||
timotimo | it'd seem like we could want to do loop hoisting if we pull the array_state.limit out in one spot and check against the index in another | ||
if we can prove the length of the array we're iterating over doesn't change | |||
which we probably can't do very often | |||
brrt | hmm | ||
no, wouldn't bother with that yet | 22:49 | ||
timotimo | right; but at some point we could | ||
maybe next year ;) | |||
oh damn it | 22:51 | ||
it seems like i'm getting worse spec test results on my desktop machine as compared to my laptop | |||
brrt | yeah, i get not-entirely-clean spectest either | 22:53 | |
timotimo | socket-async and lock on my laptop | 22:54 | |
quite a few more on my desktop | |||
damn it :( | |||
i think the boolify_iterarray vs boolify_iterhash won't be worth as much as the if_o -> boolify_iter + if_i transformation | 22:55 | ||
the body.mode is probably so close to body.array_state.index and hash_state.next that it'll all be fetched at once | |||
brrt | i do think it will, because it completely erases a function call | ||
which means pipeline luv | |||
and code cache hapinness | |||
happiness | 22:56 | ||
timotimo | oh | ||
i hadn't considered that | |||
brrt | well, i had, and it was my main motivation :-) | ||
but you spesh the actual type as a fact, right? | |||
i.e. the facts thingy already differentiates between hash iterator and array iterator | 22:57 | ||
timotimo | yes | 22:58 | |
gist.github.com/timo/d2968def5690342270d1 - this is on my desktop >_< | |||
MVMArray: Can't resize to negative elements - what. | 22:59 | ||
in xx, apparently?! | |||
that happens when you xx -1 | 23:00 | ||
brrt | yeah, that happens when you bug | ||
timotimo | but it also happens with MVM_SPESH_DISABLE=1 | ||
so ... wth. | 23:01 | ||
brrt | compiler failure effect? | ||
timotimo | oh | ||
brrt | i dunno, just suggesting :-) | 23:02 | |
timotimo | i actually didn't get some changes of rakudo on my laptop | ||
brrt | ah | 23:04 | |
timotimo | i didn't break stuff! | 23:05 | |
TimToady did! :) | |||
brrt | well then | 23:06 | |
everything is just fine isn't it :-) | |||
timotimo | \o/ | ||
oh, actually ... do i know the type of the iter at that point? | 23:18 | ||
i'd have to actually look at the type of the thing that gets thrown into the iter | |||
brrt | well | 23:19 | |
yeah | |||
timotimo | i could be mean and put the type into the decont_type | ||
that's *kind of* correct even :P | |||
brrt | hmm | ||
jnthn | There's flag bits; you could have flag for IS_ARRAY_ITER and IS_HASH_ITER | 23:20 | |
In facts | |||
Please don't dual-purpose decont_type :) | |||
timotimo | hmm, seems wasteful, no? | ||
jnthn | I think we've plenty of bits free in the bit field. | ||
timotimo | OK | 23:21 | |
jnthn | Just out of padding reasons I don't think it makes sense for it to be smaller than 32 bits, iirc. | ||
brrt is testing that suggestion right now | 23:24 | ||
timotimo | ah, of course | ||
chat suggestion? | |||
what* | 23:25 | ||
i'm already compiling the boolify_iter_{arr,hash} change | |||
brrt | oh really? :-) | ||
then hopefully yours works a little better than mine | |||
timotimo | heh. hopefully. | ||
building nqp with it right now | |||
you know what | 23:26 | ||
i'll push it directly and you can implement the jit version of that | |||
brrt | ehm, test if it also works with rakudo | ||
but yeah, i'll do that | |||
dalek | arVM/split_iter_boolification: ca7615e | (Timo Paulssen)++ | / (9 files): split boolify_iter into two ops, for hash and array. |
23:27 | |
timotimo | ^- hence the branch | ||
brrt | not trying to be rude, but aren't iterating over a hash and iterating over an array mutually exclusive? :-) | 23:28 | |
timotimo | looking good so far | ||
yeah, well ... | |||
what if we have an iter that's neither? :D | |||
we can just define the HASH_ITER as 0 instead %) | 23:29 | ||
brrt | hmm yeah either of them | ||
timotimo | spec tests look good at the moment | ||
well, ideally the bigger one :) | 23:30 | ||
brrt | i'm really going to sleep now | 23:32 | |
:-) | |||
TimToady | o/ | ||
brrt | see you tomorrow (and on friday :-)) | ||
o/ | |||
23:32
brrt left
|
|||
timotimo | oh | 23:32 | |
in that case, i'll have to implement these ops in the jit apparently :( | |||
jnthn | timotimo: Do you have that link to all the Rakudos over time benchmark you did? And do you mind if I use one or two of the graphs in my talk? | 23:34 | |
timotimo | no problem | 23:35 | |
FROGGS | www.reddit.com/r/perl6/comments/2co...at/cjs4rpv | ||
timotimo | i'll make another addition to that graph as soon as we release, sound good? | ||
oh, yeah, there, too | |||
oh | 23:36 | ||
i have even more benchmarks, jnthn | |||
t.h8.lv/p6bench/2014-08-18-longterm...story.html / t.h8.lv/p6bench/2014-08-18-longterm...-moar.html / t.h8.lv/p6bench/2014-08-18-longterm...-moar.html | 23:37 | ||
those have a moar-jit in them, too | |||
jnthn | Thanks | 23:42 | |
japhb | Hmmm, those scores look really nice ... when comparing with rakudo 2014.01 instead of perl5. | 23:47 | |
jnthn | japhb: jnthn.net/perl6/bench/2014-08-20.html is my run on a latest Moar built on MSVC, and with JIT | 23:49 | |
japhb: See the natvie ones :) | |||
*native | |||
japhb | woah | 23:55 | |
Hmmm, while_int2str_concat* is unhappy | 23:57 | ||
jnthn | Yeah. That graph is the wrong shape. | ||
timotimo | also we regressed, didn't we? | 23:58 | |
japhb wonders why perl5 doesn't scale as flatly as rakudo in the hash tests, despite being faster overall still. | |||
jnthn | timotimo: Regressed on what? | 23:59 | |
japhb | Wondering if the perl5 version of reduce_int_comb_range is incorrect, since it's scaling particularly badly on that test. |