01:31
dalek joined
02:13
FROGGS_ joined
02:48
ilbot3 joined
04:26
geekosaur joined
04:31
geekosaur joined
04:35
geekosaur joined
07:03
geekosaur joined
07:38
domidumont joined
07:45
domidumont joined
|
|||
dalek | arVM/even-moar-jit: 0764f9f | brrt++ | src/jit/linear_scan.c: Free spilled and values arrays ASAN rightly complains about me spilling memory. |
09:19 | |
arVM/coroutine: 3da6c00 | (Jimmy Zhuo)++ | / (19 files): Add basic coroutine implementation. This will a little more cheap than one shot conituation version, becase it saves more stacks and invocation according to Revisiting Coroutines. See www.inf.puc-rio.br/~roberto/docs/MCC15-04.pdf for further reading. |
09:35 | ||
JimmyZ | ^^ my experiment, doesn't work and segfault. | 09:36 | |
dalek | arVM/coroutine: 033d34b | (Jimmy Zhuo)++ | src/core/ (2 files): fix to run a simple test |
10:12 | |
JimmyZ | ^^ this only for nqp -e 'my $coro := nqp::corocreate( { nqp::coroyield(2);}); say(nqp::cororesume($coro, nqp::null));' | 10:14 | |
samcv | doesn't work and doesn't segfault you mean? | 10:17 | |
or doesn't work and segfaults? or works and doesn't segfault? | |||
JimmyZ | only works for above test ,haha | 10:23 | |
co-workers are welcome :) | 10:24 | ||
dalek | arVM/even-moar-jit: 71152c9 | brrt++ | src/jit/compile.c: Remove stderr spam in compile.c |
11:13 | |
jnthn | lowlevelbits.org/java-papers/ # some other potentially applicable papers | 13:01 | |
I need to read that coroutines one properly too; skimmed, it seems quite interesting. | 13:07 | ||
timotimo | wow, 2004? that's really fresh! | 13:08 | |
jnthn | :P | ||
timotimo | as far as compsci papers go | ||
i'm not sure i know what "full asymmetric" means in the context of coroutines | 13:09 | ||
jnthn | It does make the (I think reasonable) point that with a coroutine you allocate the coroutine object once and use it many times, while with continuations it's one per time you "yield" | ||
timotimo | hm, but that's already the difference between coroutines and continuations i thought | 13:10 | |
hm | |||
though that's more like "one point where you yield from" vs "multiple points you can yield from" perhaps? | |||
jnthn | Yeah, but brings home the GC costs quite clearly. :) | ||
timotimo | i ... dunno? | 13:11 | |
jnthn | Thing is, though, I find it easy to think of a continuation as something we can just take and invoke on another thread. | ||
timotimo | mhm | ||
jnthn | Since you've just sliced off a bunch of stack frames, and can re-instate them wherever you want | ||
Which is exactly what we want for non-blocking await | |||
timotimo | right, we do | 13:12 | |
jnthn | And under this model only things that `await` pay the cost of allocation for doing so | ||
We can't really know from the "outside" if something is going to await, so we'd need to allocate a coroutine for every scheduled bit of work. It's a lot less predictable than gather/take in that sense, where you can assume that if somebody wrote gather, they're gonna take, probably quite a lot. | 13:14 | ||
timotimo | oh, so the difference is that we don't "create" a costly coroutine object from the start which may or may not be used ever | ||
jnthn | Yeah | ||
timotimo | right | ||
jnthn | So it's an interesting trade-off | ||
On the other hand, many gather/take usages are in eager contexts where we don't yield every time (that got optimized away in the GLR refactor) | 13:15 | ||
So it's only the truly lazy uses of gather/take that benefit. | |||
(From switching to a coroutine model) | 13:16 | ||
Which may still be worth it, of course. | |||
timotimo | lik dis if you yild everytim | ||
13:19
brrt joined
|
|||
brrt | .tell japhb there are some things left before i can call the register allocator 'fully functional' | 13:20 | |
yoleaux2 | brrt: I'll pass your message to japhb. | ||
6 Jan 2017 17:39Z <japhb> brrt: Now that you have a working register allocator, what's left before you can merge that branch? | |||
brrt | .tell japhb specifically, i need to test handling PHI resolution, and i need to implement the magic that does call argument setup, preferably in a cross-platform way | 13:21 | |
yoleaux2 | brrt: I'll pass your message to japhb. | ||
jnthn | Ah, 'cus calling convs differ between POSIX and Windows... :) | 13:22 | |
timotimo | aye | ||
you can also freely mix-and-match inside a program | |||
most notably, WINE will do something like that | |||
not sure if the linux-on-windows10 thing does anything like that, or if it requires all the stuff to be built for that platform in order to work | 13:23 | ||
"partial continuations" ... is that what we have, where we have the outer continuationcontrol that defines where the continuation slice starts? | 13:26 | ||
brrt | indeed, the calling conventions differ, and i've also mostly separated the architectures, and i want to maintain that somehow | 13:30 | |
anyway, after that, we can realistically start talking about merging | 13:31 | ||
btw, ASAN is not happy about extop register buffer allocation. i know how to solve that though... | |||
but that will have to wait until i have time | |||
dogbert17 | jnthn: about the free-spesh-log-slots branch, I checked it out and tried both htmlify.p6 and the RT code example. Perhaps that wasn't the right way to do it because I can't see any significant improvements in memory usage. | ||
brrt | see you later | 13:32 | |
jnthn | dogbert17: That was only one part of the reason for higher memory use, and alone without some of the other PRs may not make a big difference. | 13:36 | |
dogbert17 | jnthn: ah that explains it, many thanks | 13:38 | |
jnthn: so when are you going to release these changes? | 13:39 | ||
jnthn | Well, I was hoping they might get some code review :P | 13:40 | |
timotimo | i'm not sure i can provide anything beyond basic "yup, looks good", which the compiler could also do :P | 13:41 | |
and maybe spelling | |||
it's annoyed me a bunch in the past that python's generators aren't stackful | 13:42 | ||
jnthn | timotimo: Well, last week I managed to commit something that null-checked the wrong pointer, then deref'd it, and one of the PRs I put up fixed that, but it's not like it'd have needed deep knowledge of the code to spot that one. :) | 13:43 | |
timotimo | ah | ||
jnthn | So spotting small mistakes is certainly worthwhile :) | ||
timotimo | so ... how did "hurl"ing pull requests originate? %) | 13:53 | |
jnthn | timotimo: Why did I decide to put them up as PRs? Just because I wanted to see if this workflow could help us improve quality and also help spread understanding of the codebase. :) | 13:55 | |
timotimo | no i mean | ||
why do we say "hurl" | |||
jnthn | Oh | ||
'cus it's got url in it? :P | 13:56 | ||
timotimo | that's good 'nuff for me | ||
the change of moving fixed_size_free of frame->env from before continuation_free_tags to after it seems superfluous :P | 13:58 | ||
since continuation_free_tags doesn't seem to look at env | |||
jnthn | hmm :) | 14:00 | |
timotimo | look, i'm reviewing! | 14:01 | |
view, i'm relooking! | |||
jnthn | Yeah, think that's an accident from removing/re-instating it :) | ||
14:01
FROGGS_ joined
|
|||
jnthn | leave a comment, I can tidy it | 14:02 | |
lunch; bbiab | |||
JimmyZ | jnthn: finishing the coro branch is really hard to me, haha. it has many tricky thinks about exception and frame . | 14:03 | |
*things | |||
and the java papers look good | 14:04 | ||
timotimo | oh, cool, when the frame is no longer in dynamic scope we can also ignore the args buffer in gc | 14:05 | |
i haven't looked yet if we clear those out whenever we remove a frame from dynamic scope | |||
JimmyZ | re PR: postgresql takes many months to review a *good* patch. | 14:13 | |
timotimo | um, yeah, that's what args_proc_cleanup does | 14:18 | |
but that's only called from frame_destroy and remove_one_frame, is that enough? | 14:20 | ||
jnthn | timotimo: I believe so. A frame was either never in dynamic scope, or if it ws can only die in two ways: via remove_one_frame, or by ending up in a never-invoked continuation and getting GC'd. | 14:56 | |
timotimo | good | 15:01 | |
my somewhat shallow review is thus complete | |||
samcv | morning jnthn | 15:10 | |
timotimo | i wonder if we win anything if we make marking thread blocked/unblocked cheaper as long as there's no user threads | 17:48 | |
jnthn | evening, samcv | 18:26 | |
jnthn was away playing a game and freezing his hands in the nippy weather | |||
18:37
zakharyas joined
|
|||
japhb | .oO( WOPR: "Would. You. Like. To. Play. A. Game?" ) |
19:20 | |
yoleaux2 | 13:20Z <brrt> japhb: there are some things left before i can call the register allocator 'fully functional' | ||
13:21Z <brrt> japhb: specifically, i need to test handling PHI resolution, and i need to implement the magic that does call argument setup, preferably in a cross-platform way | |||
japhb | Ah, interesting. Oh well, I was hoping to have something to play with this weekend. :-) | 19:22 | |
jnthn | The game and the freezing weather were unrelated, fwiw. :-) | 19:28 | |
japhb | Ah. I figured it implied that your game was e.g. a snowball fight. :-) | 19:29 | |
japhb returns to coding the dragon battle | 19:30 | ||
jnthn | Heh, no, the game was Ticket To Ride Switzerland. And the freezing hands was because somehow I thought it would be nice to make some photos of the snowy weather. :-) | 19:33 | |
japhb | I didn't realize TTR had a Switzerland-specific variant. I've played U.S. and general Europe, but that's it. | 19:34 | |
jnthn | I never played the U.S. one. Have the general Europe one, which is fun, but the Switzerland one is even more so. It comes with the India extension. | 19:35 | |
japhb | Those are ... disjoint. That's an odd pairing. But I guess makes the extension more valuable. | 19:36 | |
jnthn | Yeah, it's a tad odd. They sell it primarily as the India variant which happens to include Switzerland, but we actually really wanted the Switzerland one. | ||
japhb | heh | ||
timotimo | giving mark_thread_*blocked an extra path when there's no user threads doesn't show an improvement for the core setting | 20:22 | |
jnthn | I'd be surprised, we don't hit it that often | 21:12 | |
21:28
ilbot3 joined
|
|||
timotimo | you think? :) | 21:53 | |
t.h8.lv/telemeh.log - check it out for a rough idea (this is from core setting parse, aborted it a short while into optimize) | 21:59 | ||
i haven't put in the effort to translate the cycle counts into seconds | 22:06 | ||
23:44
Geth joined
|