samcv | hmm timotimo split on the \ for what reason | 00:07 | |
or split on the \r\n's? | 00:08 | ||
timotimo | json has many escape sequences | ||
samcv | yes | 00:09 | |
timotimo | if i split on \ i get the pieces that will be of interest, and each string after the first will let me just inspect its first character to see what i have to join it with | ||
samcv | it could be a lot of segments | ||
timotimo | it'd be a bit awkward to do the rest of the parsing, though if i just make the $target "is rw", too, and keep a "original-pos" parameter for error reporting ... | ||
samcv | m: "\t".uniprop('NFG_QC').say | 00:10 | |
camelia | N | ||
samcv | m: "a".uniprop('NFG_QC').say | ||
camelia | Y | ||
samcv | hmm | ||
ok i might be able to improve this | |||
in nfg_is_concat_stable | |||
timotimo | cool | 00:13 | |
but \t isn't very common in the json we have, i don't think | |||
samcv | yeah. but it could be very very common in some | ||
timotimo | of course | 00:15 | |
anything to make more concats stable (or rather make the stability easily and quickly assessible) | |||
00:26
pyrimidine joined
|
|||
MasterDuke | timotimo: did you figure out if J::F is doing the "correct" number of joins? is it doing more than it needs to? | 00:29 | |
samcv | i think i might have solved it. we'll see. haven't tested yet | 00:31 | |
timotimo | i didn't check that | 00:43 | |
cool | |||
i'm not sure if we have a whole bunch of concat-with-combiners tests? | |||
samcv | yeah it's undertested if at all | 00:45 | |
i mean some, but need way more since there's so many different factorsā¦ | |||
in normalization and blah blah | |||
timotimo | mhm | 00:46 | |
MasterDuke | timotimo: btw, had you seen bloaty mcbloatface before? seems like something you could make use of | 00:47 | |
timotimo | i've seen it, yeah | 00:53 | |
it's mostly interesting for our unicode database | |||
other pieces of data we have include our repr structs maybe | |||
those are tiny, though | |||
MasterDuke | ah, cool | ||
timotimo | we can definitely run it on libmoar.so of course | ||
samcv | eek MVM_unicode_codepoint_get_property_cstr strikes again | 00:55 | |
in passes_quickcheck_and_zero_ccc. can speed that up by using int | |||
timotimo | nice | 00:56 | |
MasterDuke | timotimo: re MVMNativeRefREPRData, what's involved in adding a field/flag to it? just changing the struct def in src/6model/reprs/NativeRef.h? | ||
timotimo | that's enough, yeah | ||
samcv | ok i reduced it from 3.14s to 1.89s | ||
\o/ | |||
timotimo | what benchmark is that? | ||
samcv | uh that json file | ||
timotimo | what exact part? | 00:57 | |
samcv | time perl6 -e 'use JSON::Fast; my $j = "mem_leak2.json".IO.slurp; for ^1 { $ = from-json $j;} ' | ||
timotimo | is mem_leak2.json smaller than the original one? | ||
does it only have that long string in it? | |||
samcv | it's basically the same | ||
but missing a few controls | |||
timotimo | huh, okay | 00:58 | |
samcv | but MasterDuke said there was 0 difference between them | ||
MasterDuke | samcv: any change in memory used? | ||
samcv | yeah same time for the original one | ||
haven't checked | |||
timotimo | ugh, i don't have the gist open any more | ||
samcv | but i'm sure | ||
what's the easiest way to see max memory usage | 00:59 | ||
timotimo | just run it w/ time | ||
MasterDuke | /usr/bin/time | ||
samcv | how does that get me momory | ||
MasterDuke | just `time` is usually a shell builtin | ||
samcv | yeah | ||
i don't get memory stats from time | 01:00 | ||
timotimo | right sorry | ||
MasterDuke | have to install time from extra | ||
samcv | not on bash either | ||
cool | |||
timotimo | fish just gives you the right kind of time stuff by default | ||
samcv | 1.94user 0.52system 0:02.47elapsed 99%CPU (0avgtext+0avgdata 2183472maxresident)k | 01:01 | |
0inputs+0outputs (0major+540131minor)pagefaults 0swaps | |||
what am i looking at. maxresident? | |||
MasterDuke | yeah, i was getting 2180912maxresident before | 01:02 | |
samcv | ok from 2621932K to 2183472k | ||
and even bigger time difference | |||
01:10
pyrimidine joined
|
|||
samcv | i'm putting all my notes for unicode here github.com/MoarVM/MoarVM/projects/1 | 01:16 | |
so i can make sure i have it all down in one place that other people can see as well. | |||
timotimo | i saw | 01:19 | |
maybe i want to build such a project thing, too | 01:20 | ||
samcv | :) | ||
timotimo | for example for the line-based profiler | ||
samcv | sounds like a good plan | ||
looks like you can even convert them to issues as well | 01:21 | ||
01:23
ggoebel joined
|
|||
timotimo | i noticed | 01:23 | |
samcv | i just discovered that now | ||
timotimo | i'm surprised trello isn't mad at them for stealign their thing | ||
samcv | just gotta spectest the concat optimizations | 01:29 | |
01:37
pyrimidine joined
|
|||
samcv | ok well spectest is pass timotimo | 01:46 | |
json_fast fails test tho | |||
nvm it fails them on master too | 01:48 | ||
wtf | 01:49 | ||
were they already failing though? | |||
both fail same number of tests. timotimo | 01:51 | ||
i mean with and without change. and even reverting before MasterDuke's changes | |||
timotimo | what test is failing? | ||
samcv | t/05-unreasonable-requirements.t and 06-control | 01:52 | |
only those | |||
timotimo | oh? | 01:53 | |
samcv | yep | ||
timotimo | let me check | ||
o | 01:54 | ||
are you making sure to -Ilib? | |||
both pass for me | 01:55 | ||
samcv | oh. yeah that prolly | 02:00 | |
how do i ilib timotimo | 02:02 | ||
MasterDuke | `perl6 -I lib t/05-unreasonable-requirements.t` | 02:06 | |
samcv | k | 02:08 | |
nope still failing | |||
i did prove -e perl6 -I lib | |||
ok running it manually is fine tho | 02:09 | ||
timotimo | weird. | 02:17 | |
i don't think that's going to work what you did there | |||
it'll be parsed as -e perl6 -I lib | |||
rather than -e "perl6 -I lib" | |||
-l, --lib Add 'lib' to the path for your tests (-Ilib). | 02:18 | ||
though that would have worked | |||
huh, prove can also handle -I apparently | |||
MasterDuke | `prove -e perl6 -I lib` fails 05 and 06 for me, but `prove -e "perl6 -I lib"` passes them all | 02:21 | |
timotimo | well, prove doesn't give it a -I | 02:22 | |
it also doesn't put anything in the environment | 02:23 | ||
so ... ?!?! | |||
prove introduces a separation between "options passed to the perl which runs prove" and "options passed to the perl which runs tests"; this distinction is by design. Thus the perl which is running a test starts with the default @INC. Additional library directories can be added via the PERL5LIB environment variable, via -Ifoo in PERL5OPT or via the -Ilib option to prove. | 02:24 | ||
^- this doesn't tell me whether -Ifoo will change what the prove process is using or what the called process is running | 02:25 | ||
don't want to go on a deep dive through the guts of prove to find out if -l or -Ilib should have worked | 02:28 | ||
02:48
ilbot3 joined
|
|||
samcv | timotimo, ok so my changes appear to work fine for at least simple examples and spectest pass | 04:13 | |
like concatting things that change under NFC for example like letter + diacritic. and \r\n is fine | |||
so i think it's good | |||
Geth | MoarVM: samcv++ created pull request #558: Optimize MVM_nfg_is_concat_stable to speed up concatenation of strings |
04:52 | |
samcv | should be ready for merge. was thinking about being more agressive with the optimization for \r and \n and not forcing normalization if the other character is 'unspecial'. but for now that is good | 04:54 | |
06:32
brrt joined
07:06
domidumont joined
07:12
domidumont joined
|
|||
Geth | MoarVM: 477e023bd8 | (Samantha McVey)++ | src/strings/nfg.c Optimize MVM_nfg_is_concat_stable to speed up concatenation of strings Here we special case '\r' ~ '\n' to ensure it will be normalized, since it is a common possible case. All other characters that have Grapheme_Cluster_Break=Control will always break and do not change under normalization. ... (6 more lines) |
07:20 | |
MoarVM: 029d121826 | (Samantha McVey)++ | src/strings/nfg.c Merge pull request #558 from samcv/nfg Optimize MVM_nfg_is_concat_stable to speed up concatenation of strings |
|||
07:37
travis-ci joined
|
|||
travis-ci | MoarVM build errored. Samantha McVey 'Merge pull request #558 from samcv/nfg | 07:37 | |
travis-ci.org/MoarVM/MoarVM/builds/213726983 github.com/MoarVM/MoarVM/compare/c...9d12182633 | |||
07:37
travis-ci left
|
|||
samcv | how | 07:37 | |
it timed out. restarted the build | 07:38 | ||
07:42
brrt joined
07:43
domidumont joined
|
|||
Geth | MoarVM/even-moar-jit: 4f4c5f2768 | (Bart Wiegmans)++ | 3 files Use macro's to extract tile inserters It's no good to pass half the state of your function to a callee if you can do the same within your own scope (and shorter, too). |
08:29 | |
MoarVM/even-moar-jit: dafb674f7b | (Bart Wiegmans)++ | 4 files Improve prepare_arglist_and_call toposort Adding and removing edges is now much more explicit (spills and arglist/call conflicts are now counted as outbound edges); renamed the variables to make the underlying concept more clear. |
|||
brrt | after i've split ARGLIST and CALL tiles again (which is more or less a simple translation), this should hopefully be correctish | 08:50 | |
samcv | o/ brrt | 08:52 | |
brrt | \o samcv | 08:53 | |
09:07
zakharyas joined
|
|||
lizmat | .tell jnthn I left some comments with gist.github.com/lizmat/b76e88519b7...0941bb6e6a | 09:36 | |
yoleaux2 | lizmat: I'll pass your message to jnthn. | ||
brrt | \o lizmat | 09:51 | |
lizmat | brrt /o | 09:52 | |
samcv | i think i'm going to bed. night all :) | 09:53 | |
brrt | sleep well | ||
lizmat | nighty night, samcv! | ||
good work! | 09:54 | ||
brrt | lizmat: it almost looks like you're writing in lisp there | 09:58 | |
lizmat | ah? | ||
brrt | nqp::while(nqp::islt_i(), nqp::if(ā¦) etc | 10:01 | |
that'd be spelled (while (is_lt ..) ) | |||
in lisp :-) | |||
lizmat | ah, in that sense :-) | ||
yes, there are some visual similarities :-) | 10:02 | ||
brrt | it is horribly complex to read, though..... | 10:06 | |
10:46
Geth joined,
yoleaux2 joined
|
|||
lizmat | .tell jnthn a new gist: gist.github.com/lizmat/1c80d2210ae...18fca7e575 | 11:18 | |
yoleaux2 | lizmat: I'll pass your message to jnthn. | ||
lizmat | .tell jnthn this version created R:It.(Hyper|Race)Actions iterators, that take a list of method => capture pairs to execute: so no special casing needed anymore | 11:19 | |
yoleaux2 | lizmat: I'll pass your message to jnthn. | ||
lizmat | .tell jnthn from where I sit, we only need to fix the syntactic sugar for transforming .hyper.map(foo).grep(bar) to R:It.HyperActions( , (map => \(foo), grep => \(bar) ) | 11:21 | |
yoleaux2 | lizmat: I'll pass your message to jnthn. | ||
lizmat moved/adapted comments to new gist and removed the old gist | 11:39 | ||
12:37
domidumont joined
12:46
domidumont1 joined
14:47
domidumont joined
|
|||
brrt | lizmat: re your comments below, the big thing with concurrent software is always, what happens when a process dies | 15:27 | |
lizmat | you mean when a worker has an exception ? | 15:28 | |
brrt | uhuh | ||
or waits forever | |||
lizmat | then it will wait forever | 15:29 | |
unless you have a promise waiting somewhere that will provide relief | 15:30 | ||
brrt | trueā¦. | ||
my head just says 'condition variable' when you write 'count how many IterationEnd we should get'ā¦ but I guess if you have monitor semantics anyway, it's not going to be a problem | 15:31 | ||
lizmat | I'm trying to avoid using explicit condition variables | 15:33 | |
using the ConcBlockingQueue repr for that, basically | 15:34 | ||
brrt | indeed | 15:36 | |
so probablyā¦ if any one of the proceses dies, the whole thing should be killed? | 15:37 | ||
timotimo | how about letting the developer catch that case? | ||
lizmat | if your .map has a CATCH, you could :-) | 15:38 | |
brb | |||
brrt | i'm smelling danger | ||
(i'm heading to $commute) | |||
timotimo | doesn't it have to be outside the map? | 15:39 | |
16:04
brrt joined
16:14
ZofBot joined
16:18
SourceBaby joined
|
|||
brrt | omg omg omg | 16:39 | |
it works :-o | |||
jnthn | The JIT? :) | 16:40 | |
Calls? | |||
:) | |||
16:41
ZofBot joined
|
|||
brrt | yes | 16:43 | |
c function calls | 16:44 | ||
can't say i've properly tested every bit of it | |||
because i haven't | |||
but | |||
call ordering and spilling and restoring works | |||
jnthn | :-) | ||
That's a rather important piece :) | 16:45 | ||
16:47
Zoffix_ joined
|
|||
brrt | yeah | 16:47 | |
Geth | MoarVM/even-moar-jit: ef816962b9 | (Bart Wiegmans)++ | 3 files Split ARGLIST and CALL tiles This makes the very simple 'say' function call work as expected. Note that not all functions of the prepare_arglist_and_call are completely tested as of yet (that's only possible with more complex calls). Basic parameter ordering and spilling/restoring works. |
16:50 | |
brrt | i thinkā¦ with that done, it's time for me to start working on a blog post again | ||
jnthn | :) | 16:51 | |
brrt++ | |||
brrt | oh and there's another thing i need to resolve, which is generalised two-arg resolution | 16:52 | |
16:59
domidumont joined
17:41
domidumont joined
17:53
synopsebot6 joined
17:55
lizmat joined
|
|||
timotimo | yaaaay | 17:56 | |
Geth | MoarVM: dc974a7353 | (Samantha McVey)++ | .travis.yml [Travis CI] Add travis_retry to apt-get lines to retry package dl probs. |
20:41 | |
MoarVM: samcv++ created pull request #559: Optimize passes_quickcheck_and_zero_ccc to be much faster |
|||
samcv | mmm tea | 20:43 | |
20:45
spebern joined
20:46
travis-ci joined
|
|||
travis-ci | MoarVM build errored. Samantha McVey '[Travis CI] Add travis_retry to apt-get lines to retry package dl probs.' | 20:46 | |
travis-ci.org/MoarVM/MoarVM/builds/213998643 github.com/MoarVM/MoarVM/compare/0...974a735349 | |||
20:46
travis-ci left
|
|||
Geth | MoarVM: a2367a2097 | (Samantha McVey)++ | .travis.yml [Travis CI] Don't use travis_retry and instead just use || |
20:52 | |
samcv | weird got `/usr/bin/ld: src/core/coerce.o: relocation R_X86_64_PC32 against undefined symbol `fast_atoi' can not be used when making a shared object; recompile with -fPIC` | 21:02 | |
gonna try make clean | |||
timotimo | hm, we don't -fPIC by default? | 21:03 | |
it's definitely in my makefile | 21:04 | ||
samcv | we do. | ||
timotimo builds bloaty | 21:05 | ||
um, apparently i already have bloaty | 21:06 | ||
somewhere on my machine | |||
found it | 21:08 | ||
when broken down by compileunit, the vast majority of size is in "[None]" | 21:11 | ||
samcv | ok i think i fixed it | 21:13 | |
Geth | MoarVM: 907cbc7722 | (Timo Paulssen)++ | 44 files give this_repr consts more meaningful names they show up when you print an object in gdb, for example |
21:28 | |
MoarVM: f12a2b5351 | (Daniel Green)++ | src/strings/ops.c Use correct format for repeat/concat errors |
21:32 | ||
MoarVM: 61f02f81c7 | (Jonathan Worthington)++ | src/strings/ops.c Merge pull request #555 from MasterDuke17/master Use correct format for repeat/concat errors |
|||
MoarVM: ddc97f1075 | (Samantha McVey)++ | src/strings/nfg.c Optimize passes_quickcheck_and_zero_ccc to be much faster Use MVM_unicode_codepoint_get_property_int instead of MVM_unicode_codepoint_get_property_cstr and simplify it as well. |
21:53 | ||
MoarVM: d866829cac | timo++ | src/strings/nfg.c Merge pull request #559 from samcv/nfg_2 Optimize passes_quickcheck_and_zero_ccc to be much faster |
|||
timotimo | i took the liberty | ||
samcv | thx timotimo | 21:58 | |
Geth | MoarVM: 1e2a7b90cd | (Samantha McVey)++ | 4 files Streamline MVM_bigint_radix and MVM_radix for Nd Unicode #'s We can use the fast_atoi function in addition by switching to using Numeric_Value_Numerator instead of Numeric_Value (which may have decimal places). This is because all Nd numbers are 0-9 and thus all have a denominator of 1. |
||
timotimo | oh, neat | 21:59 | |
samcv | no speed difference. but change i'd thought about making before | ||
timotimo | OK | ||
samcv | no measurable one at least | ||
timotimo | that's also only for "fancy" digits, right? | ||
samcv | yeah | 22:00 | |
also when i redo the UCD, i'm going to use the Numerator property instead of the Numeric_Value property as well, so thought i might as well change it even if no speed change | |||
will probably get some speedup with the remake becuase it'll be an int proprety and won't have to atoi it. | 22:01 | ||
and Numeric_Value property is probably going bye bye | |||
at least if it doesn't hurt anything | 22:02 | ||
since it's just a string that holds a floating point number | |||
timotimo | ugh :) | ||
samcv | heh | ||
timotimo | comp_l_* are for unicode comparison stuff? | ||
samcv | what's comp_l_*? | 22:03 | |
timotimo | a range of symbols i found with bloaty | ||
samcv | let me see what it does :P | ||
timotimo | oh, they only go from 0 to 21 | ||
maybe more interesting is comp_entry_0 through 375 | 22:04 | ||
samcv | oh canonical composition tables | ||
timotimo | ok, they are all rather small, so they are probably packed tightly | 22:05 | |
12 bytes for every comp_entry_* | |||
and 12 for every uni_seq_* | |||
samcv | yeah | ||
ok i added uni_seq at least | 22:06 | ||
timotimo | except a few that are 16 bytes | ||
oh, and a bunch that are 20 bytes | |||
(and so on) | |||
also 20-byte comp_entry_* | |||
and 24 byte uni_seq_* | |||
*shrug* | |||
samcv | argh and the comp_entry lines reorder on rebuilds | ||
so i can't git log -L very well | |||
timotimo | biggest two comp_entrys are 156 bytes | 22:07 | |
ugh, can we somehow sort 'em? | |||
samcv | by size? | ||
or just to make rebuilds not change order | 22:08 | ||
and make me go insane | |||
timotimo | not change order | ||
samcv | ok just make it reproducaable?. also curious if ordering could affect packing or if the compilier does that automatically | 22:09 | |
at least for seperate arrays | |||
timotimo | absolutely no clue | 22:10 | |
if nm is right, the ordering is lexicographic | 22:11 | ||
so 0, then 1, then 10, then 100, then 101, 102, ..., 11, 110, 111, 112, ..., 12, 120, ... | |||
no, hold on | |||
the addresses to the left of that are kin of scrambled | 22:12 | ||
they are actually put in there in reverse, but in proper order | |||
i.e. 00000000002ea150 r comp_entry_101 | |||
00000000002ea160 r comp_entry_100 | |||
00000000002ea170 r comp_entry_99 | |||
00000000002ea180 r comp_entry_98 | |||
00000000002ea190 r comp_entry_97 | |||
samcv | k | 22:13 | |
installing bloaty myself | 22:18 | ||
22:23
Zoffix_ joined,
hoelzro joined,
leego joined
|
|||
samcv | timotimo, what command to get all this info you're. sharing with me | 22:27 | |
timotimo | one was bloaty -d symbols -n 0, the other was nm | sort | 22:28 | |
it's important to -n 0 or else you won't get the relatively tiny symbols | |||
samcv | 7.7% 407Ki codepoint_names | 22:31 | |
not sure how it stores in 407Ki? | |||
based on my estimate we'd have used a lot more. but maybe it does some packing when it does it in a .so file | |||
so that could be | |||
timotimo | is codepoint_names still a list of strings? | 22:32 | |
in that case it'd have one pointer per entry | |||
samcv | yeah i guses it doesn't count that? | 22:33 | |
it only counts data and not pointers? | |||
timotimo | well, the symbol codepoint_names only has the pointers | 22:34 | |
the individual strings must show up somewhere else | |||
samcv | ah ok. that makes sense | 22:35 | |
timotimo | perhaps with an entry_* name or something? or are they truly anonymous? | 22:37 | |
well, i don't see 'em anywhere | |||
i suppose because nm only shows things that have names | |||
and those strings don't have symbol names to refer to them by | 22:38 | ||
samcv | yeah they don't | ||
they're just in a big array | |||
timotimo | that explains it, then | 22:39 | |
22:39
leedo joined
|
|||
samcv | still unhelpful if it doesn't show what actually uses space | 22:39 | |
not just the uh. things that use space but the uh | |||
pointers and stuff | |||
timotimo | hm, shouldn't it show up as a lot of usage for compileunit unicode.c? | 22:43 | |
samcv | dunno | 22:45 | |
timotimo | gonna go sleep | 22:56 | |
have a good one! | |||
oh | 22:58 | ||
samcv | night | ||
timotimo | gist.github.com/cygx/9c94eefdf6300...e-graph-md - i wonder if we can figure this out together some time | ||
maybe even find the bottleneck to one of these benchmarks and troll this graph by making it flatline :P | 22:59 | ||
o/ | |||
22:59
Geth joined
23:04
ZofBot joined,
yoleaux2 joined
23:09
Zoffix joined
|
|||
samcv | that benchmark is not fair | 23:22 | |
%words = ($input ~~ m:g/(<-[\n\t]>+)\t(\N+)/).map(*>>.Str.Slip); when perl 5 version is much simpler | |||
perl 5 is %words = ($input =~ /([^\n\t]+)\t(\N+)/g); | |||
goes to 7.57s from 13.27s when i remove all that extra stuff. but i guess they're wanting the values to be strings or whatever | 23:32 | ||
i think it's a bad benchmark | 23:33 |