github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
00:06
eater left,
dogbert2 left,
avarab left
00:07
eater joined
00:10
wictory[m] left,
ilmari[m] left
|
|||
jnthn | bah, my spellchecker nearly had me change decrement into excrement... | 00:10 | |
timotimo | oh crap | 00:11 | |
i've sketched out the perl6 side of how host and port will be passed to the user; want to have a quick look if i'm on the right path? | 00:12 | ||
gist.github.com/timo/508a2ee6023da...5177d5b750 | 00:13 | ||
00:15
dogbert2 joined,
avarab joined,
Voldenet joined
|
|||
jnthn | 6guts.wordpress.com/2018/07/20/bet...ecializer/ # no excrement :D | 00:22 | |
timotimo | hooray, bloggage! | ||
jnthn | timotimo: Hmm, but what if we tap it multiple times? | ||
The two tappings would start two listeners, which'd get their own distinct ports... | 00:23 | ||
Probably we need something more like | 00:25 | ||
timotimo | oh, that's a good point. mhm. | ||
jnthn | react { | ||
my $tap = do whenever IO::Socket::Async.listen(...) { ... } | |||
whenever $tap.listen-port -> $port { say "I'm on port $port. Connect to me today and you could win a roll of duck tape!" } | 00:26 | ||
} | 00:27 | ||
:) | |||
timotimo | ah, put it on the tap, i see. | ||
MasterDuke | jnthn: "more in the a future" | 00:29 | |
this is really minor, but in the chars bytecode example (the before), r11(2) isn't aligned the same as the rest | 00:35 | ||
timotimo | well, it aligns the version number to match up | ||
Geth | MoarVM: jstuder-gh++ created pull request #911: Rm 'unsafe' templates already in core_templates |
00:36 | |
timotimo | good post, jnthn++ | 00:38 | |
MasterDuke | yes, very informative | ||
jnthn | MasterDuke: Thanks, fixed | 00:40 | |
(the typo; life's too short to figure out how wordpress managed spaces...) | 00:41 | ||
sleep, 'night o/ | 00:43 | ||
timotimo | gnite jnthn | 00:45 | |
00:47
ilmari[m] joined
|
|||
MasterDuke | timotimo: any idea why the routines implementing (add|sub|mul|div|mod)_I all return the value, but (neg|abs)_I sets the value into a passed in variable? | 00:50 | |
timotimo | they were all implemented like that initially | ||
then i put the code to create the object into the functions in bigintops.c and made it return the result instead | 00:51 | ||
so that i could jit the functions | |||
MasterDuke | yeah, i just saw a bail because of neg_I which is why i'm looking at them now | ||
from this code: 'my @lines; for "i100k.txt".IO.lines>>.words -> @g { my int $index = @g[0].Int; @lines[$index - 1] = @g.tail(*-2); }; say +@lines; say now - INIT now' | 00:52 | ||
timotimo | should be easy to find an example commit by using "git blame" on interp.c and looking for the _I ops | ||
MasterDuke | but the weird thing is that there isn't even an implementation of MVM_bigint_neg (which neg_I calls). just the whatever-you-call-it in the header | 00:53 | |
timotimo | ah | ||
because it's so simple i guess? | |||
MasterDuke | `void MVM_bigint_neg(MVMThreadContext *tc, MVMObject *result, MVMObject *a);` | 00:54 | |
timotimo | oh, you mean the forward declaration | ||
MasterDuke | yes | ||
timotimo | that's odd | ||
MasterDuke | yes | ||
timotimo | ah | ||
MVM_BIGINT_UNARY_OP(neg, { sb = -sa }); | 00:55 | ||
this implements it with a macro | |||
that's how many of the ops are implemented, actually | |||
MasterDuke | right, i remember that now | ||
really was throwing me for a loop there for a while | 00:56 | ||
timotimo | "for a loop", haha | ||
get it | |||
MasterDuke groans | 00:57 | ||
if i'd had an 'until' in the sentence i could have had all the looping constructs | |||
any reason not to re-write the unary ops like you did for the binary ones? | 00:59 | ||
also, any reason not to jit the speshguard* ops? i also saw a bail from speshguardtype in the same example | 01:01 | ||
timotimo | "it threw you for a loop until you got to grips with that", unless i misunderstood? | 01:03 | |
i don't see a reason not to rewrite the unary ops like that | 01:04 | ||
MasterDuke | heh, i think you understood correctly (it's getting hard to follow the levels of indirection) | 01:08 | |
timotimo | i just had to get an "unless" in there, too | 01:12 | |
there's also a "with" in there | |||
i'm going to bed, seeya! | |||
MasterDuke | later... | 01:13 | |
01:14
lizmat left
01:21
lizmat joined
01:50
wictory[m] joined,
AlexDaniel[m] joined
05:09
Kaiepi left,
Kaiepi joined
|
|||
Geth | MoarVM: 8b52229112 | (Jeremy Studer)++ (committed by Bart Wiegmans) | src/jit/unsafe.expr Rm 'unsafe' templates already in core_templates These templates have working versions in src/jit/core_templates.expr |
06:26 | |
06:35
domidumont joined
06:41
domidumont left
06:42
domidumont joined
07:27
domidumont left
07:28
domidumont joined
07:31
buggable left
07:51
domidumont left
07:54
domidumont joined
08:09
zakharyas joined
|
|||
Geth | MoarVM: e3e1d0d0ca | (Samantha McVey)++ | 4 files Use sized types for uthash (instead of using unsigned everywhere) unsigned is only guarenteed to be at least 16-bits, which is insufficent for what we want (we really want uint32 on all platforms for these variables). |
08:28 | |
08:46
robertle joined
|
|||
Geth | MoarVM/master: 25 commits pushed by (Jeremy Studer)++, (Bart Wiegmans)++ review: github.com/MoarVM/MoarVM/compare/e...1aa0d64848 |
08:55 | |
MoarVM: dad8a39f6e | (Samantha McVey)++ | src/strings/uthash_types.h Remove a line that shouldn't have been added in the last commit |
09:06 | ||
09:12
zakharyas left
09:19
robertle left
09:20
zakharyas joined
09:42
wictory[m] left,
ilmari[m] left,
AlexDaniel[m] left
09:45
benchable6 left,
nativecallable6 left,
statisfiable6 left,
bisectable6 left
09:46
zakharyas left,
undersightable6 left,
greppable6 left
09:47
zakharyas joined
09:49
robertle joined
09:53
ilmari[m] joined
10:03
zakharyas left
10:22
zakharyas joined
10:36
domidumont left
10:41
AlexDaniel[m] joined,
wictory[m] joined
10:43
benchable6 joined,
greppable6 joined,
nativecallable6 joined,
undersightable6 joined
10:45
MasterDuke left
10:51
Ven`` joined
11:04
zakharyas left
11:17
Ven`` left
11:27
yoleaux joined
11:46
lizmat left
11:48
lizmat joined
12:00
domidumont joined
12:10
domidumont left
12:11
domidumont joined
12:15
domidumont left
12:16
domidumont joined
12:24
domidumont left
12:25
harrow joined,
domidumont joined
12:35
domidumont left,
domidumont joined
12:40
domidumont left
12:41
domidumont joined
12:45
domidumont left
12:46
domidumont joined
12:50
domidumont left
12:53
domidumont joined
13:01
statisfiable6 joined
13:10
zakharyas joined
|
|||
Geth | MoarVM: jkramer++ created pull request #912: Add +x and shebangs for scripts. |
13:27 | |
MoarVM: 33363d321c | (Jonas Kramer)++ | 15 files Add +x and shebangs for scripts. Related to rakudo/rakudo#2077. |
13:31 | ||
MoarVM: 36cd04e57b | (Aleks-Daniel Jakimenko-Aleksejev)++ (committed using GitHub Web editor) | 15 files Merge pull request #912 from jkramer/issue-2077 Add +x and shebangs for scripts. |
|||
synopsebot | RAKUDO#2077 [open]: github.com/rakudo/rakudo/issues/2077 [easy to resolve][good first issue][meta] Extensions, shebangs, executable permissions in tools/ and elsewhere | ||
dogbert11 | aha, a SEGV (in t/spec/S02-lexical-conventions/unicode-whitespace.t) | 14:46 | |
Geth | MoarVM: 4d22fb9e72 | (Jonathan Worthington)++ | 3 files Fix protect handling in continuationcontrol Make sure we re-instate the tag at the base frame when the continuation is invoked. |
||
jnthn | Good news: got things fixed up | 14:47 | |
Bad news: Ah, was talking about it in #perl6-dev, will continue there | 14:48 | ||
dogbert11 | jnthn: have a juicy SEGV if you're interested | 14:52 | |
crashes here github.com/MoarVM/MoarVM/blob/mast...rp.c#L2814 context == NULL | |||
15:04
zakharyas left
|
|||
jnthn | dogbert11: Odd, not sure about that | 15:07 | |
dogbert11 | jnthn: i ran - MVM_SPESH_NODELAY=1 MVM_SPESH_BLOCKING=1 ./perl6-gdb-m t/spec/S02-lexical-conventions/unicode-whitespace.t | 15:08 | |
with a bit of luck you can repro it | 15:09 | ||
15:09
brrt joined
|
|||
brrt | jnthn++ post | 15:09 | |
15:11
zakharyas joined
|
|||
jnthn | Another crash I see comes from trying to execute a paramnamesused instruction when there's no args context | 15:20 | |
15:23
brrt left
15:29
robertle left
|
|||
jnthn | Seems I can provoke the lock-async-stress2.t crash with spesh disabled, so at least it's not going to turn out to be about that | 15:30 | |
15:39
domidumont left
15:50
zakharyas left
|
|||
jnthn | Also with the fixed size allocator disabled | 15:58 | |
With --no-optimize so I have useful debug symbols, and spesh and FSA disalbed to rule them out, it fails annoyingly rarely | 16:08 | ||
Certainly seems like something racy, but what... | 16:09 | ||
timotimo | rr offers a "chaos mode" where it tries to make race conditions more likely to appear | 16:10 | |
16:10
Dogbert4711 joined
|
|||
timotimo | i have not yet tried it | 16:10 | |
Dogbert4711 power outage, sigh | 16:11 | ||
timotimo | BBL | 16:13 | |
jnthn | Odd, now I can't get it to break even optimized | 16:14 | |
16:15
Dogbert4711 left
|
|||
jnthn | *sigh* ever since I put in an extra bit of diagnostic output, I just can't get it to break | 16:19 | |
Clearly the solution is to include that diag :P | 16:20 | ||
Geth | MoarVM: 54dc849da8 | (Jonathan Worthington)++ | src/6model/reprs/MVMMultiCache.c Add extra diagnostic output to multi cache panic So we can see if it's a discrepancy in the lookup algorithms or if something more sinister is going on. |
16:21 | |
jnthn | bah, even the stresstest passes now :P | 16:28 | |
japhb | Declare "Better than it was before" and move on? | ||
jnthn | Well, it's Friday late afternoon, so moving on is close to a certainty :) | 16:29 | |
Anyway, yes, better than it was once I push my Rakudo patch | |||
16:31
diakopter joined
|
|||
japhb | jnthn++ # Good blog post | 16:32 | |
diakopter | that cur_node error looks wrong? | ||
japhb | jnthn: In the example with annotations, do the annotations apply to the following instruction or the preceding instruction? | ||
jnthn | japhb: The following one | 16:33 | |
japhb | Ah, thank you. | ||
jnthn | Just like the square brackets annotation syntax in C#, though I suspect that's familiar to a small subset of my readers :) | ||
diakopter: How so? | 16:34 | ||
japhb looks forward to the next post (that was hinted at multiple times) | |||
masak, probably. Beyond that, I suspect you're right. :-) | |||
diakopter | jnthn: it says cur_node == 0 in the error, or is the error implying that claim/check failed | ||
jnthn | oh, I see :) | ||
Right :) | |||
Yes, the condition is correct, the error is not | |||
Geth | MoarVM: 403460ecc8 | (Jonathan Worthington)++ | src/6model/reprs/MVMMultiCache.c Correct error text to match the condition Spotted by diakopter++. |
16:36 | |
diakopter | japhb: yoooooooooo | 16:37 | |
jnthn | Grrr...it failed this time in the stresstest but not in 100 runs under gdb :S | ||
(yes, all the gdb runs while I was running stresstest, so there was the same kind of load) | |||
lizmat | .oO( I'm hearing an AI go 'na na na na na' somewhere in the background ) |
||
16:38
ChanServ sets mode: +o diakopter,
diakopter sets mode: -o diakopter
|
|||
diakopter | just checking lol | 16:38 | |
(bumping question I asked a few years ago) - is it possible to write jit expressions for object access routines yet | 16:43 | ||
er, repr access routines, to be clearer | 16:46 | ||
and while I'm on that note, here's an even more bizarre thought - what about an API in nqp:: ops that builds up jit expressions, so that someone can write their own jittable repr in high level code | 16:47 | ||
(obviously extremely unsafe, haha) | 16:48 | ||
16:49
domidumont joined
|
|||
jnthn | .tell brrt If you have a spare moment, please could you take a look at github.com/rakudo/rakudo/issues/2070 which shows we still have JIT issues on Windows. I wonder if it's related to that ARG5/ARG6 thing... | 16:51 | |
yoleaux | jnthn: I'll pass your message to brrt. | ||
jnthn | diakopter: Don't think that got done yet; all we do in the JIT is devirtualize the calls to REPR operations. | 16:52 | |
diakopter: Though now we have the expression JIT that sort of thing should be much more possible to make happen | |||
diakopter | enabling jittable repr routines could enable big overall performance bumps, if I had to guess :o | 16:54 | |
especially if the jit does a lot of the standard, low-hanging fruit assembly optimizations | |||
*already, I mean | 16:55 | ||
timotimo | it doesn't do much of those :) | 16:57 | |
diakopter | oh :D | ||
timotimo | and the exprjit doesn't yet devirt repr routines, i don't thinks | 16:58 | |
hm, that could mean that exprjitting more can make our stuff slower in that way | |||
diakopter | in that case, enabling jittable reprs would likely pessimize performance overall XD | ||
timotimo | don't we actually have repr ops in the exprjit yet? | 16:59 | |
yes, we do | |||
jnthn goes for food/rest; bbl o/ | 17:00 | ||
diakopter | timotimo: where's that | ||
timotimo | core_templates.expr | ||
for example push_i! | |||
diakopter | timotimo: oh, but I was asking about making the repr op routines themselves jittable, not just calling to them | 17:01 | |
timotimo | that's more difficult :) | 17:02 | |
that requires having some expansion mechanism for the exprjit | |||
i.e. it must find the right templates by looking at the REPR it has | |||
diakopter | right, but it wouldn't be worth it before the jit is doing most of the standard assembly optimizations | 17:03 | |
timotimo | i'd claim it'd be worth a noticable bit | 17:05 | |
but you probably know more than me, so ... | |||
diakopter | I doubt it, but I'm basing that on the theory that C optimizers have already done a much better job with the repr op code | 17:06 | |
timotimo | ah, so we should probably "just" call into the functions directly from the exprjit? | 17:07 | |
japhb | diakopter: yo ... yo? | ||
diakopter | timotimo: yeah that's my theory, at least until the jit gets a lot more optimizers | ||
timotimo | we should be able to eliminate switches inside of reprops from inside the exprjit by knowing an object's type | 17:08 | |
i.e. we'll know not only the REPR, but also the repr_data | 17:09 | ||
diakopter | ah, yeah, I guess some of them do that | ||
timotimo | i.e. we can have a push_i, but inside the exprjit we'll also know if it's an i64, i32, i16, or i8 array we're pushing into | 17:10 | |
so not only can we throw out the check "does the kind of the op, i.e. _i vs _n, match the array type", but also directly do the index calculation properly | 17:11 | ||
diakopter | I wonder if the jit could use the fact engine in spesh | ||
timotimo | it will have to learn that, yeah | ||
it does have a path to get the facts by chasing a few pointers | |||
17:12
ZofBot left
17:13
huggable left
|
|||
masak | diakopter: suddenly I really want to see what "fruit assembly" looks like :P | 17:22 | |
diakopter | yes, and how to make it low-hanging | 17:23 | |
17:24
domidumont left
17:26
ZofBot joined
17:28
huggable joined
17:32
lizmat left
17:55
brrt joined
18:07
domidumont joined
18:10
lizmat joined
18:12
domidumont left
18:16
AlexDaniel left
18:18
AlexDaniel joined
18:27
dogbert17 joined
19:13
zakharyas joined
|
|||
timotimo | i think i want to change how the three byte counts in the gc profile are counted | 19:34 | |
if i remember correctly, the "freed bytes" contains unmanaged bytes, which means that cleared + promoted + retained does not equal the nursery size | 19:35 | ||
19:47
zakharyas left
|
|||
dogbert17 | jnthn: added github.com/MoarVM/MoarVM/issues/913 | 19:58 | |
jnthn | timotimo: iirc it's promoted bytes that contains unmanaged, or at least, that's where it's most usefully retained :) | 20:01 | |
yoleaux | 18:18Z <brrt> jnthn: will do | ||
jnthn | dogbert17: Got some other things I need to do right now, but you could try on github.com/MoarVM/MoarVM/blob/mast...plist#L435 adding :noinline at the end, then run perl6 tools/update_ops.p6 and re-compile and see if that helps | 20:03 | |
dogbert17 | jnthn: will try | 20:04 | |
brrt | jnthn: I don't have enough memory on my machine to start a VM at this point :-( | 20:18 | |
will have to do so later | |||
it probably is something silly | 20:19 | ||
at least, I hope it is | |||
jnthn | Yeah, I suspect it'll be silly rather than deep also | ||
brrt | :-) | ||
jnthn | ABI is about the only thing that differs | ||
timotimo | jnthn: do you think it makes sense to count unmanaged bytes separately for all three categories? | 20:20 | |
20:23
brrt left
|
|||
jnthn | Hm, I guess we could | 20:23 | |
Dunno how easy it is though | 20:24 | ||
Or rather, easy to do cheaply | |||
dogbert17 | jnthn: tried your suggestion, changed the line and ran update_ops, rebuilt and installed MoarVM and then ran the test file. It SEGV'd again. Perhaps I don't understand the procedure or some other change is needed to fix the problem | 20:40 | |
jnthn | Maybe | 20:41 | |
Hmm | |||
Sounds like you did it right | 20:42 | ||
I think that change is necesary | |||
But clearly it's not sufficient on its own :) | |||
20:58
Kaiepi left
20:59
Kaiepi joined
|
|||
Kaiepi | is there documentation on how the async parts of moar work? | 21:07 | |
21:13
Kaiepi left
21:14
Kaiepi joined
21:16
AlexDaniel[m] left,
wictory[m] left,
ilmari[m] left
21:19
benchable6 left,
nativecallable6 left,
nativecallable6 joined,
benchable6 joined,
undersightable6 left
21:20
statisfiable6 left
|
|||
timotimo | i don't know, but i can tell you a bit of what i know | 21:39 | |
there's one thread spawned when we want to do async stuff, and there's channels that we can push "work items" to | 21:40 | ||
that's what you often see, first a callable gets pushed into an array, then a bunch of arguments, then it gets pushed into a queue just with MVM_repr_push_o | 21:41 | ||
there's also work item management, which i haven't looked into much yet | |||
Kaiepi | how would i be able to tell which code would need to be pushed to the queue? | 21:54 | |
timotimo | the async ops tend to let the "user" give it one or more callables | 21:55 | |
those are the ones you'd push into the queue | |||
for example, listenasync pushes a code block that takes socket, error, peer-host, peer-port, socket-host, socket-port | 21:56 | ||
and it uses that for both errors and receiving a new connection | |||
Kaiepi | so would it be a good idea to push a callback that gets the fd of a socket onto the queue? | 22:00 | |
timotimo | honestly, i'd tend towards re-using the same callback that already exists and make it distinct by what arguments you pass | 22:01 | |
Kaiepi | which one do you mean? | 22:02 | |
timotimo | which one are you interested in right now? building a connection? | 22:03 | |
line 173 | |||
that's for connecting | |||
Kaiepi | i'm trying to write introspection methods for async sockets | 22:08 | |
22:09
ilmari[m] joined
|
|||
jnthn | Such as the socket fd? | 22:12 | |
timotimo | you'd probably want it to give the native id right when it gets created and just stash it in an attribute i think | ||
jnthn | If so, I'd just send it along as an extra argument to the callback | 22:13 | |
timotimo | ideally as a promise | ||
i mean expose the fd to the user as a promise | |||
jnthn | I don't think we need to do that | ||
timotimo | because of the asynchronous nature of the queue you're pushing the task to | ||
jnthn | In this particular case | ||
timotimo | that's fair, too | ||
jnthn | Because we know the fd at the point we create the socket | ||
So we can send along to the listen/connect callbacks | |||
And since that runs before the user ever gets the object to ask for its descriptor, we're all good ;) | 22:14 | ||
Kaiepi | sounds good | 22:15 | |
jnthn | After github.com/MoarVM/MoarVM/blob/mast...ket.c#L534 and github.com/MoarVM/MoarVM/blob/mast...ket.c#L702 is the place to push the fd, boxed into an integer | 22:16 | |
22:17
statisfiable6 joined
|
|||
jnthn | And you'll receive it as an extra arg at github.com/rakudo/rakudo/blob/mast...c.pm6#L175 and github.com/rakudo/rakudo/blob/mast...c.pm6#L218 respectively | 22:17 | |
Then add has $.native-descriptor on the class, do a bindattr in each of those two places I just mentioned, and that should be good. | 22:18 | ||
Geth | MoarVM: Kaiepi++ created pull request #914: Update dyncall to latest commit |
22:19 | |
22:28
MasterDuke joined
22:45
bisectable6 joined
22:55
wictory[m] joined,
AlexDaniel[m] joined
|
|||
Kaiepi | oh i figured out what was wrong with the oriignal way i wrote the code | 22:56 | |
i was being very smart and freeing the pointer to the fd before returning it |