|
02:48
ilbot3 joined
06:57
domidumont joined
07:03
domidumont joined
08:19
domidumont joined
08:40
zakharyas joined
09:31
vendethiel- joined
10:17
xtt joined
11:19
mtj_ joined
11:52
vendethiel joined
|
|||
| viki | A gdb breakpoint is placed at the start of the line, right? So when it breaks the line hasn't been executed yet? | 12:54 | |
| I guess I can try out with a small program first. | 12:58 | ||
| And the answer is: yes, before the line runs. | 13:01 | ||
| I don't follow the p *ia output tho... it gives "$7 = {used = 1, alloc = 32, sign = 0, dp = 0x2da28e0}" so what's the value of the number? is it 1? | 13:06 | ||
| jnthn | I'd guess it's in dp? | 13:10 | |
| I suspect that's where the digits are represented | |||
| viki | Ah | ||
| How big a number can fit into MVMnum64? Can 8.9E-308 fit? | 13:29 | ||
| jnthn | It's just an IEEE double | ||
| See table in en.wikipedia.org/wiki/IEEE_754-1985 | 13:30 | ||
| viki | aha | ||
| jnthn | So, looks like "no" | ||
| It's just out of range | |||
| Oh but | 13:31 | ||
| viki | So then nqp::div_In(Int $l, Int $r) op is not working right on MoarVM? | ||
| r: use nqp; say nqp::div_In(1, 2**1024) | |||
| camelia | rakudo-moar 6e7782: OUTPUT«0» | ||
| ..rakudo-jvm 76b061: OUTPUT«6.0E-309» | |||
| jnthn | The range in that table does not factor in denormals | 13:32 | |
| viki | r: use nqp; say nqp::div_n(1, 2**1024) | ||
| camelia | rakudo-moar 6e7782: OUTPUT«This type cannot unbox to a native number: P6opaque, Int in block <unit> at <tmp> line 1» | ||
| ..rakudo-jvm 76b061: OUTPUT«This type cannot unbox to a native number in block <unit> at <tmp> line 1» | |||
| viki | r: use nqp; say nqp::div_n(1e0, 2e0**1024) | 13:33 | |
| camelia | rakudo-moar 6e7782, rakudo-jvm 76b061: OUTPUT«0» | ||
| jnthn | In double precision: | 13:34 | |
| The positive and negative numbers closest to zero (represented by the denormalized value with all 0s in the Exp field and the binary value 1 in the Fraction field) are | |||
| ±2−1074 ≈ ±4.94066×10−324 | |||
| From the page I linked | |||
| So it'd seem it is representable as denormal? | 13:35 | ||
| viki | hmm | ||
|
13:37
brrt joined
|
|||
| viki | sounds fancy pants :) | 13:37 | |
| Well, I think I fixed at least half a bug :D | 14:03 | ||
| jnthn | :) | ||
| timotimo | jnthn: got an idea why turning the types of some of Attribute's BOOTSTRAPATTRs from int into int8 gives us segfaults when trying to gc_mark P6opaque objects? | 14:09 | |
| jnthn | No idea | 14:10 | |
| nqp: say(int8.^name) | 14:11 | ||
| camelia | nqp-moarvm: OUTPUT«Confused at line 2, near "say(int8.^" at gen/moar/stage2/NQPHLL.nqp:625 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/NQPHLL.moarvm:panic) from gen/moar/stage2/NQP.nqp:908 (/home/camelia/rakudo-m-inst-2/share/nqp/lib/nqp.moarvm:comp_unit) from gen/moar…» | ||
| jnthn | nqp: say(int8.HOW.name(int8)) | ||
| camelia | nqp-moarvm: OUTPUT«int8» | ||
| jnthn | Hm, it exists | ||
| timotimo | does it sound worthwhile to go through the bootstrap and make things less wasteful? | ||
| jnthn | Well, BOOTSTRAPATTR only gets used a handful of times | ||
| The heap analyzer suggests things like Parameter are far more costly | 14:12 | ||
| timotimo | right | ||
| however | |||
| i wasn't changing BOOTSTRAPATTR, i was changing Attribute :) | |||
| jnthn | Ah | ||
| No idea why it'd be so explosive. Worth fixing. | |||
| timotimo | though it could be easier to just change things that already use Attribute rather than BOOTSTRAPATTR | 14:13 | |
| is it actually enough to change the things inside BOOTSTRAP.nqp? there's at least two cases where we rely on the layout of a specific p6opaque | 14:14 | ||
| (those are both in rakudo's container_ops) | 14:15 | ||
| jnthn: do you know if turning MVMArrayBody into a union instead of struct prevents me from taking its address with prefix:<&>? | 14:48 | ||
| jnthn | Uhhh...why would you do that? :) | ||
| timotimo | maybe i want to store arrays with not-so-many-elements inside the array body directly :) | 14:49 | |
| arrays with just two or three int64 items are rather common apparently during rakudo compilation | |||
| viki | Well, my first PR against master sent: github.com/MoarVM/MoarVM/pull/442 | 14:52 | |
| I don't 100% understand the code involved, but it fixes 3 tickets... | |||
| nine | /win/win 13 | 14:55 | |
| timotimo | that's a win/win situation | ||
| catch 13! | |||
| oh, btw, jnthn: in one of the whateverable bots i've got a valgrind log of a free-use-free_again situation inside some workloop stuff | 14:56 | ||
| jnthn | workloop? | ||
| timotimo | eventloop* | 14:57 | |
| concblockingqueue_poll frees the thing, then the same function uses the thing, and then the same function tries to free it again | |||
| jnthn | o.O | 14:58 | |
| On HEAD? | |||
| timotimo | yup-the-yup | ||
| This is Rakudo version 2016.11-44-gf928a20 built on MoarVM version 2016.11-20-g0f7277a | |||
| jnthn | Ugh. Was gonna say, e998e2e5b0933 went in Nov 1st | ||
| And is in that territory | 15:00 | ||
| timotimo | it does free directly, though. not via the gc it seems like | 15:01 | |
| gist.github.com/timo/063a86b2b01a2...d06c57014d - have a look-see for yourself if you like | 15:02 | ||
| jnthn | Will in a bit; need branecells for $dayjob design task at the moment :) | 15:04 | |
| timotimo | sure | 15:06 | |
| so ... is some piece of work being put into the concblockingqueue twice? | 15:12 | ||
| or maybe an item is put into two concblockingqueues at the same time and both free it individually | |||
| during compilation i see a crapton of i64 arrays being deserialized that have two-digit numbers in them | 15:19 | ||
| i wish it were a bit easier to figure out what they are for | |||
| diakopter | lengths of somethings? | ||
| timotimo | oh hey diakopter | 15:20 | |
| diakopter | are they deterministic | ||
| in value | |||
| heyyyyyyy | |||
| timotimo | um, i haven't checked | ||
| i think it might be interesting to have smaller int arrays available in nqp | 15:21 | ||
| for example, i imagine the numbers that are involved in statelists aren't going to go beyond 32bits | |||
| er, statelists? | |||
| i mean NFAs | 15:22 | ||
| diakopter | heh yeah | 15:24 | |
| but I think at runtime they're in C arrays anyway | 15:25 | ||
| timotimo | except they live two lives at the same time | ||
| every NFA gets serialized as its native NFA form, and then on top of that a whole bunch of NQPArrays | |||
| diakopter | maybe the arrays are profile counters | ||
| timotimo | how do you mean? | 15:26 | |
| diakopter | the values; is a profiler running | ||
| timotimo | these are values that are being deserialized from a serialized blob | 15:27 | |
| it'd be quite terrible if we wrote profiler data into compiled blobs | |||
| diakopter | stranger things have happened, lol | 15:28 | |
| timotimo | it's been so long since i last touched underlying metamodel stuff ... now i don't quite know how i would create an 8bit or 16bit int MVMArray with only nqp ops | ||
| diakopter | but yeah I agree it's far-fetched | ||
| timotimo | seems easier than i thought; at least to fake it :D | 15:36 | |
| just newtype with knowhow and 'MVMArray', and compose it with the right arguments in the composition hash | 15:37 | ||
| but clearly that's not good enough for the long term | 15:40 | ||
| diakopter | I bet such a type is already instantiated globally | 15:41 | |
| timotimo | inside nqp? | 15:42 | |
| diakopter | in moar, yeah | ||
| ohh nqp ops | 15:43 | ||
| yeah I bet it's accessible from the HLL | |||
| timotimo | i can verify that | ||
| diakopter | registered or such | 15:44 | |
| timotimo | i don't really want to install more slots in the hll struct and add more ops to get these things :\ | 15:45 | |
| anyway | |||
| throughout the build of nqp, we never build any mvmarrays with sizes other than 8 bytes per slot | |||
| diakopter | oh | 15:46 | |
| timotimo | the first time we get different sizes (and also the first time we see unsigned rather than just signed) is in building the core setting | 15:47 | |
| gist.github.com/timo/fbd1ccb77a5b0...17b23f931d - what do you think of this, diakopter? | 15:49 | ||
| how does it believe it's MVMArrayBody when i'm clearly taking its address with the & operator? | 15:50 | ||
| diakopter | struct layout fail? | ||
| no idea | |||
| sec | |||
| timotimo | could be i don't understand unions | 15:51 | |
|
15:59
FROGGS joined
|
|||
| FROGGS | o/ | 16:00 | |
| timotimo | yo FROGGS | ||
| brrt | good * #moarvm | 16:17 | |
| timotimo | yo brrt | ||
| diakopter: there would be great memory savings (and Grammar.moar size savings probably) from fixing up the branch i started a long time ago to save NFAs only as the NFA, rather than the NFA and the list of states ... | 16:23 | ||
| if you're interested, i can point you in the right direction | 16:25 | ||
| brrt | memory savings ftw | 16:32 | |
| i'd forgottten what i was doing, but i recall now | |||
| i need to change the tile structure a bit | 16:33 | ||
| the template-less tile thingy | |||
| i wonder if there is a way in which I can do that and not immediately break the expr jit | |||
| i.e. the existing allocator | |||
| timotimo | Grammar.moar is about 3.6 megs in size :) | 16:58 | |
| that's too much :) | |||
| brrt | waaay to much | 17:01 | |
| timotimo | did i say i wanted to build something that'll build a graphical representation of what's in the serialized blob in a .moar file? %) | 17:03 | |
|
17:35
vendethiel joined
18:07
domidumont joined
18:16
cygx joined
|
|||
| cygx | timotimo: re your gist, cf irclog.perlgeek.de/perl6/2016-11-24#i_13622070 | 18:19 | |
| timotimo | oooooh | 18:20 | |
| fantastic! | |||
| and i thought i was already too generous with parenthesis in my macros | |||
| dalek | arVM/mvmarray_in_situ_storage: f35da54 | timotimo++ | src/ (4 files): initial draft of how mvmarray could store data in-situ |
18:26 | |
| timotimo | (pushing this so i can reach it from my laptop) | ||
| jnthn | timotimo: Hmm | 19:05 | |
|
19:06
vendethiel- joined
|
|||
| jnthn | timotimo: That...is very likely going to be incompatible with my vmarray plans to deal with thread safety | 19:06 | |
| (Which boil down to VMArray becoming 1 pointer big, and pointing to a fixed size buffer that starts with a header indicating its size, elems, and start) | |||
| FROGGS .oO( Talk early, talk often ) | 19:11 | ||
| jnthn shoulda paid more attention earlier to the union question... | 19:12 | ||
|
19:29
domidumont joined
19:47
domidumont joined
|
|||
| timotimo | oh, i see | 19:51 | |
| well, that pointer could also point directly after itself :P | 19:52 | ||
| but we don't really have variable-sized objects that'd allow for that | |||
|
20:08
Ven joined
20:22
Ven joined
21:01
zakharyas joined
21:11
Ven joined
21:22
Ven_ joined
|
|||
| timotimo | jnthn: do you think it'd be worth it to take $why out of a few things inside BOOTSTRAP? | 21:32 | |
|
21:36
Ven joined
|
|||
| timotimo | sorry. $!why, of course | 21:39 | |
| i'm not sure how big the overhead would be for that, i.e. if it'd be worth the trade | |||
| well, at least Parameter's $!flags can become 32bit instead of 64bit, as we only use 25 bits of it so far | 21:42 | ||
| given a perl6 -e '' fetches about 6900 Parameter objects, that is at least a few kilobytes of space theoretically won | 21:43 | ||
| unless of course it's thrown out again by alignment constraints, but it should be fine | |||
| jnthn | Hm, if there's a pointer after it, it probably aligns to an 8-byte boundary... | 21:53 | |
| timotimo | these objects are pointers all the way down | 21:54 | |
| until you reach flags | |||
| anything speak against putting rw, onlystar, and yada into a single flags field for Routine? | 21:55 | ||
| (yes, routine isn't really hot, but still ...) | |||
| jnthn | Not really, just needs the work to do it | 21:58 | |
| timotimo | good | ||
| jnthn | We have quite a few routines too (every sub, method) | ||
| timotimo | right, but my primary optimization target is perl6 -e '' ;) | ||
| timotimo tries the BOOTSTRAP changes with the jvm backend | |||
|
22:08
Ven joined
|
|||
| timotimo | aha, the jvm dies with "cannot use reference attribute as native attribute" when building the core setting | 22:11 | |
| trying without my changes to verify | |||
| of course it works now | 22:16 | ||
| jnthn | You'll have to change everything - including ops written in Java and probably also C - to fix this up, I suspect | 22:22 | |
| timotimo | hm, do we have similar problems on moar? | 22:23 | |
| (this isn't about making these flags a single flag field, just about moving them to the end and giving them a smaller size) | |||
| jnthn | Yes, potentially | ||
| We have C structures shadowing some P6opaques | 22:24 | ||
| timotimo | i thought it's only ContainerDescriptor and that one other thing | ||
| Rakudo_Scalar | |||
| jnthn | I thougth there was something about returning too | 22:27 | |
| timotimo | hum. are you refering to actual .c files? | 22:31 | |
| because if so, i really only see those two | 22:33 | ||
| maybe whatever you're remembering got moved to moar recently-ish? | |||
| can't fold $!onlystar into $flags because it's part of the invocation protocol | 22:45 | ||
| every avenue i explore for making things better results in frustration ;( | 22:59 | ||
| i was really positive and enthusiastic about the container descriptor sharing ... until it b0rked | 23:01 | ||
| jnthn | I fear we've had quite a lot of the easy wins by now... :S | 23:11 | |
| timotimo | i thought i could maybe share [ord1, ord2] lists generated when we build the nfa for enumcharlist | 23:16 | |
| but it turns out there's only like 30 all in all in the entirety of rakudo's grammar | |||
| oh, hm. a lot more inside rakudo's core setting | |||
| and the ord1 almost perfectly predicts the ord2 | 23:17 | ||
| aha, i missed a bunch of creations that i should also log | 23:20 | ||
| m: say .&uniname for 91, 123 | 23:38 | ||
| camelia | rakudo-moar 64343d: OUTPUT«LEFT SQUARE BRACKETLEFT CURLY BRACKET» | ||
| timotimo | i don't think we have to match those with ignorecase %) | ||