01:55
ilbot3 joined
02:09
yoleaux joined
05:48
brrt joined
05:59
domidumont joined
06:04
domidumont joined
06:50
brrt joined
|
|||
jnthn yawns | 07:03 | ||
brrt | good hi jnthn | 07:20 | |
jnthn | o/ brrt | 07:21 | |
brrt | any plans for today? | 07:24 | |
nwc10 | lunch! | 07:25 | |
jnthn | Having some nice lights installed in my office. Winter is coming. :-) | 07:26 | |
nine | Screen not large enough to light the room? ;) | 07:27 | |
nwc10 | Aye. I put jeans on today. Shorts felt a bit cold yesterday. | ||
samcv | jnthn, I was thinking of trying to implement perl's -a option to split commands into an array @f for stdin but i am not doing the QAST totally correctly | 07:29 | |
i'm getting Cannot resolve caller STORE(Array: Seq); none of these signatures match: (Array:D $: Iterable:D \iterable, *%_) (Array:D $: Mu \item, *%_) | |||
jnthn stuck with shorts for now, though my commute is pretty short :) | |||
It's a quite large room with high ceilings, so needs some good lights :) | 07:30 | ||
nine | samcv: you asked on #perl6-dev about getting a defined array. That's not solved yet? | 07:31 | |
samcv | no clue | ||
that's what i'm guessing the issue is | |||
nine | samcv: just generate the code for the .new call | ||
samcv | hmm okay | 07:32 | |
jnthn looks up what -a does | |||
samcv | this is what i have right now | ||
github.com/rakudo/rakudo/compare/n...a?expand=1 | |||
it splits the input with a delimiter | |||
jnthn | ah, right | 07:33 | |
Hmm | |||
But I'm quite sure a magically named | |||
@F is not the way to go in Perl 6 ;) | |||
nine | samcv: Something like QAST::Op(:op<callmethod>, :name<new>, QAST::WVal.new( :value($*W.find_symbol(['Array'])) )) | ||
samcv | well i agree jnthn | ||
ah awesome nine | |||
jnthn | Probably we can pass it as an argument to the loop body, perhaps as @_ or something | 07:34 | |
samcv | but i'm guessing it's not defined. though the error doesn't show you if defineness had an effect | ||
which would be nice to add to the errors | |||
jnthn | Anyways, now that the light installers are hear and seemingly getting on with things, I plan to work on the scheduler :) | 07:35 | |
samcv | nice :) | 07:36 | |
jnthn | gist.github.com/jnthn/398d84b088d6...a5bfe89497 in case anyone missed it yesterday | 07:37 | |
brrt just saw the animoji things and is sure to have nightmares | 07:41 | ||
moritz | jnthn: nice | 07:42 | |
fwiw my regex book will be called "Parsing with Perl 6 Regexes and Grammars", subtitle "A Recursive Descent into Parsing" | |||
jnthn | Cute :) | 07:43 | |
moritz | I'm quite fond of the subtitle; bdmatatu++ came up with it | ||
brrt | i like that as well | ||
samcv | looks good jnthn | ||
moritz | and I was positively surprised that the publisher didn't reject it :-) | 07:44 | |
jnthn | Now all I need to do is implement the proposed design and see if it works ;) | ||
moritz | sounds like a walk in the park :-) | 07:45 | |
nine | So a plain normal Perl 6 program will at least have 3 threads? | ||
jnthn | 2 like today; we'll still lazily start further ones | 07:46 | |
(Where 1 is the main thread, and 1 is the specializer/JIT thread) | |||
07:49
domidumont joined
08:24
zakharyas joined
08:29
robertle joined
08:48
cog_ joined
09:53
timo1 joined
10:05
timo1 joined
10:30
timo1 joined
11:16
lizmat joined
12:04
domidumont joined
|
|||
MasterDuke | do things allocated by FSA need any special care when being serialized? | 12:44 | |
brrt | didn't read that yesterday, but i like the idea of monitor threads | 12:58 | |
(i do not know MasterDuke) | |||
timotimo | serialization just means something reads the data and puts it into a file | 13:06 | |
so i don't think any special care has to be taken | |||
jnthn | What timotimo said, fwiw | 13:08 | |
MasterDuke | thanks | 13:09 | |
nqp builds ok...make m-test's ok... | 13:11 | ||
rakudo built ok... | 13:13 | ||
make m-test ok... | |||
doh, did *not* make m-spectest ok... `Error in `/home/dan/Source/perl6/install/bin/moar': free(): invalid next size (fast): 0x0000562ba9c4e2f0` | 13:15 | ||
nwc10 | oooh, hammer that with ASAN | 13:17 | |
timotimo | could very well be a free being called on an fsa alloced piece of memory | 13:19 | |
valgrind will know where it was allocated. not sure if asan can do it, too | |||
MasterDuke | i'm afk for a bunch of hours, but will attempt to debug later | ||
i've never successfully used asan, if someone could post instructions, i'll backlog | |||
timotimo | in that case it might be easier to just valgrind it | 13:20 | |
did you push your code yet? | |||
samcv | so i got -a on perl 6 sort of working (splitting the line into a variable) right now it's $f, but it's not availible to me with perl6 code | 13:29 | |
but i have a QAST::Op.new call say on the variable i declare with the quast nodes | 13:30 | ||
but i'm guessing i need to do something else to have it be availible to the rest of the code | |||
geekosaur | should it perhaps be a dynamic scope variable? | ||
samcv | maybe. though i'm wondering why i can't access it by name. i assigned it $f | 13:31 | |
geekosaur, github.com/samcv/rakudo/blob/a/src...#L871-L892 | 13:33 | ||
running: echo '3,3,4' | perl6 -ae ".say" i get it to print out an array of [3 3 4] which is progress | 13:34 | ||
since i pt a say down there | |||
well the .say in the -e just prints out $_ which is the line, not the array. but i have it print out $f in the qast code i did | 13:35 | ||
MasterDuke | timotimo: work so far is here: github.com/MasterDuke17/MoarVM/tre...r_VMArrays | 13:39 | |
timotimo | did it show you where the free was b0rked? | 13:42 | |
you might be misunderstanding what "root" does | 13:43 | ||
i believe it's the "outermost" object when another object, like a p6opaque, has other object bodies inlined into its own body | 13:44 | ||
you need to refer to the root object to do write barriers correctly for example | |||
the storage spec on the VMArray should tell us if we'll ever inline the body into a p6opaque or similar | 13:48 | ||
so maybe we won't do that ever | |||
but multiple VMArrays might share the same root object, and thus the header bit won't work properly | |||
i wonder if there's a good succinct description of root object and friends somewhere | |||
13:49
ilmari[m] joined
13:51
MasterDukeMobile joined
|
|||
MasterDukeMobile | timotimo: yeah, I am/was pretty sure that was suspect | 13:51 | |
But iirc, set-size-internal only took an arraybody, and I needed an MVMObject to get to the header flags | 13:53 | ||
Any suggestions much appreciated | 13:54 | ||
timotimo | vmarray is already set up to never be inlined it looks like | 13:57 | |
so this shouldn't actually be a problem | |||
nine | samcv: you also need to push the variable to the lexpad | 13:58 | |
geekosaur | was wondering about that but couldn't even say "lexpad" --- don't know internals that well | ||
nine | Something like $*W.cur_lexpad.push(QAST::Var.new( :name(<$f>), :scope(<lexical>), :decl<var>)); | ||
geekosaur | just suspect some symbol-table-y thingy needed to be told about it | 13:59 | |
*suspected | |||
jnthn | Probably more like cur_lexpad[0].push(...) but there's also various things you can call to decalre a varaible | ||
In fact, the sub iirc is called declare_variable :) | |||
samcv | :) | 14:00 | |
oh i set it to $*f and it works | |||
and moved the variable declaration | |||
now how to accept a delimiter as a command line argument | 14:01 | ||
nine | jnthn: no really, declare_variable would be much too readable :) | ||
MasterDukeMobile | timotimo: maybe I need to go back even further in the call chain and pass the actual array everywhere, not just the arraybody, so I have the right thing to get the header from (i.e., not root) | ||
samcv | should have named the sub: `dcv` so everyone can understand it | ||
jnthn | root is the collectable | ||
I think I've abbreviated enough things... :P | |||
$*W ;) | 14:02 | ||
MasterDukeMobile | jnthn: ah, so I do want to be checking its flags? | ||
samcv | tgt | ||
jnthn | MasterDukeMobile: I'd add a github.com/MoarVM/MoarVM/blob/mast...odel.h#L97 enum entry like MVM_CF_REPR_PRIVATE | 14:03 | |
MasterDukeMobile: And then in VMArray.h #define MVM_ARRAY_USES_FSA MVM_CF_REPR_PRIVATE or so | 14:04 | ||
And yeah, you'd set it on root | |||
MasterDukeMobile | I did add an entry to that enum | ||
jnthn | root->header.flags |= MVM_ARRAY_USES_FSA; or so | 14:05 | |
MasterDukeMobile | Yep, that's what I did | 14:06 | |
Can't link it easily from this client, but I put a link to my repo earlier | |||
Anyway, really afk, thanks all, bbl | |||
jnthn | Hm, the flags usage looks right enough | 14:08 | |
timotimo | i'll try to valgrind it | 14:09 | |
14:47
zakharyas joined
|
|||
Geth | MoarVM: 9e7c16e778 | (Jonathan Worthington)++ | src/6model/reprs/ConcBlockingQueue.c Fix elems of ConcBlockingQueue REPR |
14:56 | |
15:01
Skarsnik joined
|
|||
jnthn | Hmmm | 15:08 | |
So for the scheduler to make decent decisions, we could do with having some idea of whether threads are actively working or not | |||
There's a few options here | |||
One is to use uv_cpu_info | 15:09 | ||
Which gets per-CPU utilization info, or at least I figure that's what it is doing | |||
On Linux it does something like this: github.com/libuv/libuv/blob/f1e0fc...nux-core.c | |||
This approach has the benefit of telling us if we're on a system that's under load | 15:10 | ||
Though it doesn't tell us if our process is making any progress | |||
afaict, the data is system global | 15:11 | ||
Which means it's less useful for deciding whether we should add another thread or not | |||
15:11
replacementimo joined
|
|||
replacementimo | the server i irc from has somehow fallen off of the 'net | 15:11 | |
MasterDuke: did you see my comment on your commit? i found out what caused the explosions | |||
jnthn | I'm thinking of a scheme like | 15:12 | |
1) Up to the number of CPU cores, if we see that there's a backlog of work in the queue, add extra threads to help take it on | |||
2) Once we reach that, try to figure out if we're making progress, and only add more threads if we're not (and thus are deadlocked) | 15:13 | ||
uv_getrusage is thus perhaps more useful | 15:14 | ||
Hm, it also looks a lot cheaper to call | 15:15 | ||
Anyway, that's probably the better option in the immediate. | 15:16 | ||
The overall system load maybe wants to be factored into the calculation in part 1 | |||
lizmat would love to see some nqp ops for getting usage statistics :-) | 15:17 | ||
replacementimo | hm, uv_getrusage might not need any setup, perhaps you can just nativecall that | ||
jnthn | A futher option is that we could just use something MoarVM specific since we can look at a thread context and tell if progres *didn't* happen (pc and frame counter wouldn't change would) | 15:18 | |
Though it can give false negatives in a tight fully inlined loop if the PC happens to be at the same point I guess | 15:19 | ||
replacementimo: Maybe, though I'm going to use this in CORE.setting | |||
And also Windows is different :) | 15:20 | ||
replacementimo | ah, of course the scheduler is hll code | ||
jnthn | oh, but calling the libuv one would hadnle that | ||
replacementimo | btw, would you say for the sampling profiler we should have a thread that regularly sends a signal to each of our threads so they hold still for a little bit so we can grab data? | 15:21 | |
jnthn | ohhh...I had a realization about that | ||
We can do something much simpler | |||
Use instrumenting to add a "maybe take a sample now" op | |||
At entry, before each back branch, and after each instruction with a line number annotation | 15:22 | ||
If we don't get any samples, we can extrapolate that all of the last samples were in the same place | |||
replacementimo | i thought something like that, too, but i feared it would be too intrusive | 15:23 | |
jnthn | And if we already did one sufficiently recently, then we don't take one | ||
Well, depends how we engineer it | |||
If we make it just a few instructions... :) | |||
replacementimo | if only the performance counter i'm using for telemeh were available everywhere ... | ||
that's a really cheap thing to query at runtime | |||
jnthn | We could also have a thread that is firing every interval, bumping a global counter | 15:24 | |
And the thread context has a "last time I logged" | 15:25 | ||
So then it's just an integer comparison | |||
I suspect an op to expose rusage is my best bet, anyways | |||
Anyway, that can be for tomorrow :) | 15:26 | ||
replacementimo | my spectest will be done soon. wasn't as explosive as before my change | 15:30 | |
Skarsnik | nativecallable6, raw.githubusercontent.com/libuv/li...clude/uv.h | 15:31 | |
nativecallable6 | Skarsnik, Successfully fetched the code from the provided URL. | ||
Skarsnik, gist.github.com/ac12ef1be686069ec2...fbc419aec8 | |||
Skarsnik | damn, was too easy x) | 15:32 | |
replacementimo | hah | ||
15:38
brrt joined
|
|||
replacementimo | heyo brrt | 15:38 | |
brrt | hey replacementimo | 15:39 | |
replacementimo | spec tests are clean with masterduke's "vmarray uses fsa now" branch; i think it still wants to have the size parameters moved into the allocated blob, too, though | 15:42 | |
that'll be a nice thing to have in the next release | 15:45 | ||
"concurrently changing the size of VMArray now causes only memory loss, not crashes | |||
" | |||
16:43
dogbert17 joined
16:49
leont joined
16:54
robertle joined
17:07
AlexDaniel joined
17:24
domidumont joined
17:48
leont joined
|
|||
nine | I've marked nativecallinvokejit .a in oplist, yet I still get "Bytecode validation error: expected instruction marked 'a' but got ' '" | 19:04 | |
What else would I have to do? | |||
Skarsnik | did you run the script to update the ops? (dumb question | 19:05 | |
nine | I did | ||
19:12
timo joined
19:42
geekosaur joined
20:02
geekosaur joined
20:03
geekosaur joined
20:27
Skarsnik_ joined
|
|||
timo | i think i'll want to reconsider ; as separator for the profiler kind and its options, as shells see that as a character they own | 21:01 | |
lizmat | .oO( everybody wants the semi-colon ) |
21:02 | |
22:33
replacementimo joined
22:38
vendethiel- joined
23:30
replacementimo joined
23:37
geekosaur joined
|