Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
00:02
reportable6 left
00:03
reportable6 left
01:04
reportable6 joined
02:04
linkable6 left,
evalable6 left
02:05
linkable6 joined
02:06
evalable6 joined
04:44
linkable6 left,
evalable6 left
04:47
linkable6 joined
05:46
evalable6 joined
06:04
reportable6 left
06:06
reportable6 joined
|
|||
Nicholas | good *, #moarvm | 07:53 | |
jnthnwrthngtn: *NQP* build failure? For me NQP is fine. Rakudo 6.c setting goes boom with "Language revision must be a concrete string" | 07:54 | ||
and did on the previous commit, IIRC | |||
nine | jnthnwrthngtn: if you're seeing "Attribute '$!result_reg' not declared" as well, that seems to be caused by inlining gen/moar/stage2/NQP.nqp:546 (pkg_add_attribute) into variable_declarator | 08:20 | |
Or method new of QAST::Stmts, that's also inlined with unspecialized inlining active. | 08:42 | ||
MasterDuke | nine: do you have any thoughts re making ex_release_mutex an array vs passing the particular mutex down to where the exeption is thrown vs something better? | 08:44 | |
nine | I hope we can come up with something better. Alas yesterday evening my creativity was sapped by a 3 course dinner | 08:48 | |
lizmat | .oO( the horror! ) |
08:50 | |
08:59
linkable6 left,
evalable6 left
09:01
evalable6 joined
09:32
patrickb joined
|
|||
jnthnwrthngtn | moarning o/ | 09:43 | |
Nicholas | \o | ||
jnthnwrthngtn | Nicholas: It doesn't break because the lines that break it are communt out | ||
Nicholas | ah OK | ||
so, for me, setting build failed. With all the MVM ENV stuff set | |||
I'm a bit busy with $other so wasn't digging hard | 09:44 | ||
jnthnwrthngtn | nine: Yes, exactly that, and I'd got it to variable declarator too, but it looked about right in the spesh log | ||
10:00
linkable6 joined
|
|||
nine | Yeah, haven't found anything obvious either | 10:03 | |
10:30
sena_kun joined
|
|||
nine | jnthnwrthngtn: one thing I do find odd. The inline log says that it inlines unspecialized pkg_add_attribute and unspecialized new but both inlined graphs do look specialized. There are a lot of sp_ ops in both | 10:33 | |
Ah, because it gets optimized after picking | 10:35 | ||
jnthnwrthngtn | Yes, what it should really say is it wasn't specialized before we came to trying to inline it | 10:44 | |
nine | Well it's definitely inlining of pkg_add_attribute, not of method new that's causing it | 10:46 | |
Oh, one more thing: in pkg_add_attribute, there are 2 calls. The second one is sp_dispatch_v lits(lang-meth-call), callsite(0x24f4d10, 5 arg, 5 pos, nonflattening, interned), sslot(0), litui32(3), r8(2), r7(2), r6(5), r1(2), r5(2) | 10:47 | ||
jnthnwrthngtn | OK, that's more than I knew. (I've got a few other things to work on this morning, so I'm not actively looking into it yet. Thanks for doing so.) | ||
Yeah, I didn't figure out if it somehow passes along the wrong name for the attribute or some such | 10:48 | ||
nine | The r6(5) argument is sslot(1) which is an NQPClassHOW in the inlined graph. The inlined version passes r110(5) there which is sslot(59) which is Instance (NQPRoutine) | 10:49 | |
Are we picking the wrong spesh slot here? | |||
jnthnwrthngtn | Oh. This sounds ungood. | ||
nine | Actually no spesh slot of the resulting graph at all holds an NQPClassHOW | 10:50 | |
jnthnwrthngtn | o.O | ||
Then something is very wrong | |||
I just...can't imagine where/how/why right away | 10:51 | ||
nine | Also no register fact talks about NQPClassHOW despite the inlinee having 2 registers with known values of type NQPClassHOW | ||
All the more curious since AFAICT you didn't change anything about inlining mechanics like merging of spesh slots or renumbering of registers | 10:52 | ||
jnthnwrthngtn | No, exactly | 10:53 | |
oh, oops | 10:54 | ||
This doesn't explain things too well but | |||
It seems that I forgot to stack up the guards ahead of the inline | 10:55 | ||
That does seem to fix it | 10:58 | ||
nine | \o/ | 10:59 | |
jnthnwrthngtn | (I forgot because a) late, but b) I restructured the optimization process so that we don't insert guards if we can't actually do an optimization, which we would in the previous impl, but the previous one was a bit fiddly to do the re-org) | ||
Sorry for the wild goose chase. Although tbh I still don't understand why the problem caused the symptoms you saw | 11:00 | ||
nine | Both calls in pkg_add_attribute have the comment # [000] Never dispatched | 11:01 | |
Could it be that those new guards actually prevent the faulty code from running? | 11:02 | ||
jnthnwrthngtn | I think it's a lie. | ||
Though let me check | 11:03 | ||
Yeah, it's a very dubious claim indeed. | 11:04 | ||
When we produce the specialization like this, we don't have any stats to hand | |||
And it doesn't differentiate that from "we have stats and they're all zero" | 11:05 | ||
nine | Ah, of course, that makes sense | 11:06 | |
With that fixed we're now at <43s for stage parse | 11:08 | ||
Geth | MoarVM/new-disp: 2ecb380497 | (Jonathan Worthington)++ | src/spesh/optimize.c Fix and re-enable inlining without specialization It didn't work because the guards weren't added; d'oh. |
||
MoarVM/new-disp: f08c7f9332 | (Jonathan Worthington)++ | src/spesh/disp.c Less confusing spesh comment when no stats |
|||
jnthnwrthngtn | nine: What did you have before this? | 11:09 | |
And what is master's time on your machine? | 11:10 | ||
nine | Got between 43 and 44s before this. master's at 34 | 11:11 | |
jnthnwrthngtn | Getting closer :) | 11:12 | |
We don't have JIT re-enabled yet | |||
And there's not a good solution for the megamorphic exploision in !protoregex yet | 11:13 | ||
And I've not even looked at new-disp under the eye of callgrind yet | |||
And - though it's probably a drop in the ocean - we've still got branching all over the place for legacy vs. new calling convs | |||
(About JIT: not re-enabled in so far as we don't yet JIT any of sp_dispatch, sp_runbytecode, nor sp_runcfunc) | 11:14 | ||
(Which will limit many things) | |||
sena_kun has started Blin for new-disp | 11:15 | ||
jnthnwrthngtn | Cool, hopefully callwith being present will help some of them | ||
sena_kun | btw, is it known the spectest hangs as bug-coverage.t hangs? | 11:16 | |
jnthnwrthngtn | Yes | 11:17 | |
It's a code-gen bug that exists on master | 11:19 | ||
sena_kun | yup, heard about it, though maybe was fixed already, thanks for the info | 11:20 | |
jnthnwrthngtn | But on master we get "lucky" and it doesn't result in an infinite loop | ||
Nicholas | And we now have to distract timo's cat long enough for timo to implement some JIT? | 11:37 | |
jnthnwrthngtn | That'd be one approach. :) I'm quite sure most people would choose petting a cat over writing x64 assembly. | 11:44 | |
lizmat | aahh...the days when I was able to write 8086 machine code using integers only :-) | 11:52 | |
(1986-1993 abouts) | |||
the language in question had a Buf like data structure that you just could tell it to run it on the processor | 11:53 | ||
MasterDuke | you had integers! back in my day we only had natural numbers | 11:55 | |
jnthnwrthngtn | I got the idea to run callgrind on the CORE.setting build while I had lunch. Lunch is finished. It's still running. | 11:56 | |
In stage optimize, mind | |||
Nicholas | clealy you need one of those 3-course lunches | 11:57 | |
jnthnwrthngtn | Only 1 more week until vacation, and then I'll at least get 4 course dinners... :) | 11:58 | |
MasterDuke | i'm currently waiting for pypandoc to convert a bunch of files from .md to .rst. it takes about 50m for ~140 files totaling ~115kb | ||
i have no idea how it can be this slow | |||
jnthnwrthngtn | Wow | ||
I think I could get a decent way through the job by hand in that time :P | |||
MasterDuke | i did seriously consider it | 11:59 | |
Nicholas | is there a pypypandoc that goes much faster once the JIT is done? | ||
MasterDuke | ha. i've never actually used pypy. i assume it runs on windows? | 12:01 | |
12:02
reportable6 left
12:05
reportable6 joined
|
|||
Geth | MoarVM/new-disp: 134ed518ed | (Stefan Seifert)++ | src/jit/x64/tiles.dasc Support loading values from int16 arrays in expr JIT |
12:07 | |
MoarVM/new-disp: c54d49adc1 | (Stefan Seifert)++ | 2 files Expr JIT templates for sp_getarg_* ops |
|||
nine | That was quite a bit harder than expected... | 12:08 | |
jnthnwrthngtn | nine++ | 12:09 | |
Are you looking at the lego JIT of sp_dispatch and friends? | |||
(If not, I was just about to.) | 12:10 | ||
nine | Well I'm getting reaquainted with JITing things by doing the seemingly simple ones first :) | 12:11 | |
Geth | MoarVM/new-disp: 91e5b144d9 | (Jonathan Worthington)++ | src/jit/graph.c Throw out dead code |
12:14 | |
sena_kun | ⏳ 1569 out of 1676 modules processed | 12:20 | |
the rest are fighting over a small number of alive builds, but we can already get some stats out of it | |||
the callsame ones are gone (yay!), though there are now some with :CallsameIsNotInTheDynamicScope and some with :NextsameIsNotInTheDynamicScope. | 12:21 | ||
nine | jnthnwrthngtn: is it me, or will JITing dispatch be much easier than invoke? | ||
jnthnwrthngtn | nine: I think quite a lot easier, especially as it's one instruction | 12:24 | |
nine: The part I'm currently trying to figure out is where to store the argument maps | |||
ah cool, maybe in a data section | 12:25 | ||
nine | well it is data after all :) | 12:26 | |
Good thing we have extops, since it looks like that's what we have support for data sections in the lego JIT for | 12:28 | ||
jnthnwrthngtn | Yes! | ||
I was just looking at that | 12:29 | ||
sena_kun | MoarVM oops: MVM_str_hash_fetch_nocheck called with a stale hashtable pointer when trying to install Prometheus::Client | 12:34 | |
jnthnwrthngtn | nine: If you're interested to work on JIT of those, I'd happily look at something else instead. | 12:38 | |
i mean, I can do it, it's just not...very fun...for me :) | |||
It seems runbytecode and runcfunc will be the easier of the two | 12:40 | ||
nine | jnthnwrthngtn: sure, I'd be happy to give it a go. Will try runcfunc first as that comes first in the spesh logs I'm looking at. | 12:41 | |
jnthnwrthngtn | OK, thanks | 12:42 | |
For the data segment, I think the stuff to stick in there is just going over the applicable operands and pulling out the 16-bit .reg.orig | 12:43 | ||
nine | Of course with runcfunc and runbytecode the interesting part starts at how to actually pass that MVMArgs struct by value | 12:52 | |
If the size of the aggregate exceeds two eightbytes and the first eight- | 12:55 | ||
byte isn’t SSE or any other eightbyte isn’t SSEUP, the whole argument | |||
is passed in memory. | |||
So I think it's passed in memory and not split up into registers | 12:56 | ||
Nicholas | structs by value - dyncall *that*! | ||
jnthnwrthngtn | Sigh, and it may be different on Windows too | 12:58 | |
Maybe we should make MVM_frame_dispatch a wrapper that unpacks and passes on the components to a real underlying impl | 12:59 | ||
And maybe make the wrapper a static inline, to make sure it doesn't ever really make two levels of call | |||
nine | Windows: "Structs or unions of other sizes are passed as a pointer to memory allocated by the caller. For these aggregate types passed as a pointer, including __m128, the caller-allocated temporary memory must be 16-byte aligned." | ||
At least for a first version, having a wrapper that puts the individual values into a stack allocated would get us off the ground | 13:01 | ||
jnthnwrthngtn | Yeah, I'd do that | 13:02 | |
MasterDuke | there are some existing moarvm (or maybe nativecall) issues about passing structs by value (requesting that i think) | 13:04 | |
jnthnwrthngtn | Just been looking over the callgrind output. The interpreter is the top thing by far so more JIT will help | ||
The second is running dispatch programs. A better solution for megamorphic things will no doubt help a lot. | 13:05 | ||
MasterDuke | just did a new-disp build. stage parse of 56s vs 44s for master | 13:09 | |
jnthnwrthngtn | Another task for those looking to help with speed: MVM_disp_program_run can make use of computed goto when available. | 13:10 | |
See interp.c for inspiration | |||
It's the second most hot thing after the interpreter itself, so likely worth doing | 13:11 | ||
nine | MasterDuke: it's kinda impossible to pass a struct by value in NativeCall, but the show stopper there is there's no way to specify a struct as a value in the first place. We interpret MyStruct as Pointer[MyStruct]. That's in the vast majority of cases what you want, but not in all of them | ||
MasterDuke | jnthnwrthngtn: i suspect this is no different than what you have, but this is what perf has to say about building CORE.c gist.github.com/MasterDuke17/e7fe2...c904cd0e3a | 13:13 | |
jnthnwrthngtn | MasterDuke: Those are exclusive times? | 13:16 | |
MasterDuke | yeah | ||
`perf report --call-graph=none --no-children` | |||
i added just a plain `perf report` to the gist | 13:17 | ||
13:22
[Coke]_ joined
|
|||
timo | 1% on interning callsites, that's curious | 13:24 | |
jnthnwrthngtn | Dispatch programs are pretty into those, but yeah, it's a new hotspot I suspect | 13:25 | |
Maybe worth looking at | |||
Trying to figure out a good design for the megamorphic situation | 13:26 | ||
I guess I'll just do it with resumption in the first pass and then we'll see | |||
How well we can opt that | |||
MasterDuke | timo: github.com/MoarVM/MoarVM/blob/new-...#L210-L217 here's an opt for you | 13:30 | |
13:34
[Coke] left
|
|||
timo | i wonder how often that flag is set that's checked on the inner side | 13:57 | |
"force" | 13:58 | ||
also, i wonder how big that storage tends to become for each of the arities | 14:00 | ||
and what percentage has named argument strings in them at all, but probably the vast majority | 14:01 | ||
Nicholas | jnthnwrthngtn: seems that MVM_SPESH_NODELAY=1 breaks the Rakudo setting build. | 14:11 | |
sena_kun | ~80 out of 1676 modules (that's the upper estimate) modules have some issues with new-disp. | 14:12 | |
jnthnwrthngtn | That's quite a lot less than last time, I think? | 14:13 | |
sena_kun | I don't remember the exact previous number, alas, but it's smaller, yes. | 14:15 | |
The pool of failures is similar, though. | |||
The callwith is replaced with a smaller number of "not in the dynamic scope" for callwith/nextwith, the rest are similar: issues with type checks (bind, param), too many/little params etc (not surprising). | 14:17 | ||
if anyone fancies some spesh there is a "unhandled case of return_o" | 14:18 | ||
jnthnwrthngtn | Ah, those are because we don't yet do subsignature-based multiple dispatch | ||
Nicholas | " MVM_str_hash_fetch_nocheck called with a stale hashtable pointer" implies a bug in concurrent code, where 2+ threads are accessing the same hash without locking it | 14:19 | |
MasterDuke | sena_kun: btw, looks like the bump was one behind 2ecb380497, which was a fix | ||
sena_kun | MasterDuke, a fix for? return_o? | ||
MasterDuke | some problem with spesh inlining | 14:20 | |
jnthnwrthngtn | Nicholas: I suspect that will be for debugging next week | ||
Geth | MoarVM/new-disp: 8ec4f60215 | (Jonathan Worthington)++ | 5 files Provide introspection to identify megamorpism |
14:25 | |
jnthnwrthngtn | sigh, spelling | 14:26 | |
Geth | MoarVM/new-disp: 1d70be9a63 | (Jonathan Worthington)++ | 5 files Provide introspection to identify megamorphism |
||
nine | Writing assembly: fun. Debugging assembly: ... | 14:44 | |
jnthnwrthngtn | painful | 14:47 | |
MasterDuke | but hey, your recent jit work might mean you're another person besides brrt to help with gist.github.com/MasterDuke17/6529d...363b16b392 (adding new shl/shr operators) | 14:50 | |
nine | Ooooh...looks like we're at least calling something. Possibly even the correct function (just with wrong args). Progress! | 14:58 | |
jnthnwrthngtn | Yay | 15:04 | |
Meanwhile, I'm making progress on letting us stick a lookup table into a dispatch program for handling megamorphic by method name sites | |||
dogbert17 | MoarVM oops in spesh thread: Spesh inline: unhandled case of return_o | 15:05 | |
MasterDuke | what do you mean megamorphic by method name? i thought a callsite was always just for one method, it'd just be the num+types of the invocant+args that'd differ? | 15:06 | |
sena_kun | dogbert17, where? We have such one in the last Blin run, if there is a golf that's cool. | 15:07 | |
jnthnwrthngtn | MasterDuke: $obj."$name"() | 15:08 | |
dogbert17 | It's from one of the spectests | ||
MasterDuke | ah | 15:09 | |
jnthnwrthngtn | !protoregex does exactly that | ||
We thus end up stacking a HUGE load of disaptch programs there | |||
Up to the max of 64 entries, and then we try all 64 linearly... :) | |||
And 64 is still way too many | |||
dogbert17 | e.g. t/spec/S32-str/sprintf.t, note that I ran with MVM_SPESH_NODELAY=1 MVM_SPESH_BLOCKING=1 | ||
I've also seen: 'Internal error: inconsistent bind result' | 15:10 | ||
MasterDuke | runbytecode_ins->info->opcode always seems to be 921 in those cases. i also saw a `===SORRY!=== | 15:17 | |
Cannot find method 'push_code_object' on object of type Perl6::World` when i ran without the BLOCKING | |||
i think 921 is MVM_OP_sp_runbytecode_s | 15:20 | ||
timo | runbytecode_ins->info->name should say that | 15:24 | |
but there's also a #define you should be able to find by searching for the number | 15:25 | ||
that is runbytecode_s indeed | |||
MasterDuke | cargo-culting from rewrite_str_return, just adding `case MVM_OP_sp_runbytecode_s` right above `case MVM_OP_sp_runbytecode_o:` seems to work | 15:26 | |
well, is rakudo's `make m-test` supposed to be ok now? | 15:27 | ||
jnthnwrthngtn | MasterDuke: One failure | 15:45 | |
So the good news is that the ability to do a method lookup table deals nicely with the !protoregex situation | 15:46 | ||
MasterDuke | ok, i still see that one failure in test, but there are also a bunch in spectest | 15:47 | |
jnthnwrthngtn | The bad news is that we get a lovely blow-up around the new/bless transition, although I note NQP lacks the obvious opt that Rakudo enjoys and could really cheat a bit more | ||
MasterDuke | blow-up == failure? or another megamorphic case? | 15:50 | |
jnthnwrthngtn | The latter | ||
MasterDuke | ah | ||
i see a bunch of the same fails in a spectest without my change, so maybe it is valid | 15:51 | ||
Geth | MoarVM/new-disp: 6da8ac9b1c | (Jonathan Worthington)++ | 3 files Provide lookup tables in dispatch programs So that a callsite that is megamorphic in method names is able to install a lookup table, guard on the type, and then enjoy O(1) lookup at that location. |
||
MasterDuke | jnthnwrthngtn: is adding MVM_OP_sp_runbytecode_s to this case github.com/MoarVM/MoarVM/blob/new-...ne.c#L1125 correct? | 15:52 | |
nine | Turns out it's just not possible to load a 64 bit constant into a register directly | 16:00 | |
timo | oh, you always have to load lower and upper separately? | 16:01 | |
jnthnwrthngtn | nine: mov64 | 16:04 | |
Geth | MoarVM: MasterDuke17++ created pull request #1524: Handle sp_runbytecode_s like *_o in rewrite_obj_return |
16:07 | |
jnthnwrthngtn | MasterDuke: Well, it's correct to add that case, but it needs to insert an unbox | ||
You can't just put a `set`, otherwise probably things go quite badly later | 16:08 | ||
nine | jnthnwrthngtn: mov64 doesn't seem to work on immediates | 16:09 | |
MasterDuke | huh. the comment for return_to_set says '...doing any needed boxing or unboxing" | ||
nine | From what I read on the internets, it should be possible. But I can't get it to work. It always only reads the lower 32 bits and sign extends. Which is not that useful for addresses | 16:10 | |
jnthnwrthngtn | nine: Hm, curious, I see stuff like `| mov64 TMP6, arg.v.lit_i64;` | ||
MasterDuke: I think the comment is about the whole bunch of functions that follow | 16:11 | ||
nine | Ah darn...yes, mov64 does work. But the compiler only allows reading ints, not pointers | 16:12 | |
jnthnwrthngtn | Ah, so it needs a cast to MVMuint64 maybe? | ||
nine | yes | 16:13 | |
MasterDuke | ah. so a `return_to_unbox` needs to be added and used? | ||
timo | this is for the callsites that we pretend are numbers but really are pointers? | ||
jnthnwrthngtn | MasterDuke: Yes but I'm a bit curious why we didn't really need this before... | ||
A bit more time off the CORE.setting build thanks to doing better at, or having less, megamorphic points. | 16:24 | ||
All those that remain are about flattening, which is going to need some thought | |||
nine | timo: yes | ||
timo | i wonder if during one spesh run we see the same callsite a whole bunch of times and can be smarter about interning? or are the intern attempts coming from somewhere else? | 16:26 | |
the interned callsites are already stored in multiple areas based on what arity they have, so i'm guessing that's already relatively quick | 16:28 | ||
jnthnwrthngtn | timo: Very likely the majority of them happen during the recording of dispatch programs | 16:30 | |
Well, notably, when we finish the dispatch program | |||
MasterDuke | what would the `target_facts->type` be for the unbox case? | ||
jnthnwrthngtn | MasterDuke: It's an unboxed value, so it doesn't have a type (it's a native implied in the register) | 16:31 | |
timo: One thing I considered before but didn't do was a means - for small callsites with only positions - is to keep some kind of data structure for handling transforms | 16:32 | ||
*positionals | 16:33 | ||
timo: Since we do a lot of callsite transforms. That would mean we could finish up with an already interned one in many situations at the end of recording a dispatch program | |||
MasterDuke | oh, master doesn't have a return_to_unbox either... | 16:40 | |
timo | ah, so like we'd intern at the start and have a lookup structure that immediately gets us from one interned callsite to the interned callsite that results from the same transformation | ||
kind of like the "with_invocant" pointer | |||
nine | All I need now is that argument map | ||
jnthnwrthngtn | timo: yeah, although it'd be nice if it's not "inside" the callsite | 16:45 | |
timo | yes | 16:46 | |
Geth | MoarVM/new-disp: a292856744 | (Jonathan Worthington)++ | src/6model/sc.c Optimize MVM_sc_find_code_idx The indirection shows up relatively high in a profile of a CORE.setting build. |
16:48 | |
jnthnwrthngtn | Hm, I wonder why we bother interning all these intermediate callsites | 16:54 | |
I'm pretty sure that's pointless makework | |||
Since it's only really result ones that end up in dispatch programs that need to be interned | 16:55 | ||
For those made while we're working on the dispatch it doesn't matter at all | |||
So I think we can just not do most of this work at all | |||
Rather than trying fancy opts :) | |||
nine | Huh.... I got the map in the data section and it looks ok. I get register number 14 for arg 0 which looks sensible. However an object like the one we're looking for is actually in register 15 | 16:56 | |
And since we're looking for an iterator, that's probably the one we need | |||
I wonder how I can get that kind of off-by-one error here. gist.github.com/niner/f566f86fc525...92cbca20f9 | 16:58 | ||
Geth | MoarVM/new-disp: 84a5c1c3a8 | (Jonathan Worthington)++ | src/core/callsite.c Don't do lots of throwaway callsite interning We don't need the intermediate ones interned, and the places that do need it already make sure it's the case. |
16:59 | |
jnthnwrthngtn | nine: |.word (MVMuint16)runcode->map[i].lit_ui16; | 17:01 | |
I think that should be | |||
|.word (MVMuint16)runcode->map[i].reg.orig | |||
| mov FRAME:TMP5->cur_args_callsite, TMP6; | 17:02 | ||
And cur_args_callsite isn't needed under the new calling convs | |||
So that instruction can go away | |||
nine | Indeed! | 17:03 | |
Geth | MoarVM/new-disp: b61e45a4fa | (Stefan Seifert)++ | 5 files First JIT support for sp_runcfunc_i Won't work on Windows yet as it's using POSIX calling conventions. |
17:13 | |
sena_kun | no idea if this info is interesting, but stage parse time increased (sic) for 1s on average for me with the "don't do lots of throwaway" commit. | 17:14 | |
nine | The other runcfunc and runbyte ops should be fairly trivial now as they hardly differ from runfunc_i :) | 17:15 | |
Alas, gotta prepare dinner | |||
sp_dispatch isn't that far off either | 17:16 | ||
jnthnwrthngtn | sena_kun: That's...weird | 17:17 | |
Is it really more than noise? | |||
I'll have to look at another callgrind output after these tweaks, maybe that'll reveal something | |||
I'm easily getting ~1s variance build to build, fwiw | 17:18 | ||
sena_kun | yes, pretty much. I did 2 runs for each without any load, the two without the commit are 42.030 and 42.607, while after the commit it becomes 43.429 and 43.134. | ||
maybe just the noise, never mind it then | |||
Geth | MoarVM/new-disp: 1b3fe9f209 | (Jonathan Worthington)++ | src/core/args.c Optimize arg processing handling * We know there's no flattening at this point in the new calling conventions, so do a cheaper calculation of the number of named arguments * No need to zero out something we'll never look at again |
17:20 | |
jnthnwrthngtn | OK, enough for now | 17:48 | |
Home time for me | |||
o/ | |||
17:52
sena_kun left
|
|||
MasterDuke | nine: `src/jit/compile.c:101:13: warning: implicit declaration of function ‘MVM_jit_emit_runcode’; did you mean ‘MVM_jit_emit_invoke’? [-Wimplicit-function-declaration]` | 17:54 | |
18:02
reportable6 left
18:05
reportable6 joined
18:29
[Coke]_ is now known as [Coke]
|
|||
Geth | MoarVM/new-disp: 2193a6506e | (Stefan Seifert)++ | src/jit/internal.h Add missing forward declaration of MVM_jit_emit_runcode MasterDuke++ for the heads up |
18:38 | |
MoarVM/new-disp: a3c5efb5d2 | (Stefan Seifert)++ | src/jit/graph.c Extend JITing to other sp_runcfunc_ variants |
18:50 | ||
MoarVM/new-disp: af8eae171f | (Stefan Seifert)++ | src/jit/x64/emit.dasc Hopefully fix MVM_jit_emit_runcode on Windows Windows requires structs and other aggregates to be put into caller allocated memory and a pointer to this memory passed as an ordinary argument. On POSIX we put the struct's fields individually onto the stack. Since the stack is memory and as such guaranteed to be available until the caller exits, we can use it for Windows as well. So all that should be needed is that pointer. Completely untested, as I don't have Windows available. |
18:57 | ||
MasterDuke | hm, for return_to_unbox, since we don't need to look up the type, we don't need to add the unbox, we can just overwrite the return, correct? | 19:02 | |
i.e., return_to_box == return -> type lookup + box, but return_to_unbox == return -> unbox | 19:04 | ||
Geth | MoarVM/new-disp: af79f12518 | (Stefan Seifert)++ | 6 files JIT support for sp_runbytecode_* |
19:40 | |
MoarVM/new-disp: f597e4053c | (Stefan Seifert)++ | 6 files JIT support for sp_runbytecode_* |
19:44 | ||
20:29
linkable6 left,
evalable6 left
20:31
linkable6 joined
|
|||
jnthnwrthngtn | nine++ | 21:00 | |
MasterDuke: yes | 21:03 | ||
It should be like the set code, except emitting an unbox | 21:04 | ||
MasterDuke | jnthnwrthngtn: thanks, github.com/MoarVM/MoarVM/pull/1524 updated | 21:35 | |
no longer get the oops in t/spec/S32-str/sprintf.t. same fail in m-test, looks like same other fails in m-spectest | 21:36 | ||
21:39
patrickb left
|
|||
jnthnwrthngtn | Cool | 22:19 | |
[Coke] | Do we need a windows canary for new-disp? | 22:26 | |
jnthnwrthngtn | Could be useful info. At some point CI will tell us I guess. | 22:27 | |
Curiously, the JITting ends up slower so far as wallclock goes; I'm doing some measurements with callgrind to see if there's any clues | |||
[Coke] | I can try to do a build, will report back. | 22:29 | |
jnthnwrthngtn | Where "doing measurements" mostly means doing other things while callgrind runs for a long while :) | ||
23:30
evalable6 joined
|