Perl 6 language and compiler development | Logs at colabti.org/irclogger/irclogger_log/perl6-dev | For toolchain/installation stuff see #perl6-toolchain | For MoarVM see #moarvm Set by Zoffix on 27 July 2018. |
|||||||||||||||||||||||||||||||||||||||
00:42
Ven`` joined
00:43
p6bannerbot sets mode: +v Ven``
02:34
Ven`` left
|
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | robertle: so what's the current situation? | 03:42 | |||||||||||||||||||||||||||||||||||||
04:54
MasterDuke joined,
p6bannerbot sets mode: +v MasterDuke,
MasterDuke left,
MasterDuke joined,
herbert.freenode.net sets mode: +v MasterDuke,
p6bannerbot sets mode: +v MasterDuke,
Ven`` joined
04:55
p6bannerbot sets mode: +v Ven``
05:06
Ven`` left
06:20
lizmat left
06:23
MasterDuke left
06:28
llfourn left
06:36
llfourn joined
06:37
p6bannerbot sets mode: +v llfourn
06:43
llfourn left
06:46
lizmat joined,
p6bannerbot sets mode: +v lizmat
|
|||||||||||||||||||||||||||||||||||||||
|Tux| |
|
08:35 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | samcv: I'm wondering… can we abuse atom-language-perl6 to render some basic POD6? D#167 | 10:11 | |||||||||||||||||||||||||||||||||||||
synopsebot | D#167 [open]: github.com/perl6/doc/issues/167 [external] GitHub Pod Parsing | ||||||||||||||||||||||||||||||||||||||
lizmat | Files=1264, Tests=87998, 373 wallclock secs (19.79 usr 6.16 sys + 2666.42 cusr 231.15 csys = 2923.52 CPU) | 10:15 | |||||||||||||||||||||||||||||||||||||
10:40
AlexDaniel left
10:41
AlexDaniel joined,
p6bannerbot sets mode: +v AlexDaniel
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo: c11e7e6bcd | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline Rat == Rat, Rat == Int, Int == Rat - make Rat == Int / Int == Rat up to 15x faster - make Rat == Rat upto 4x faster - fixes Inf.Rat == 1/3 and 1/3 == Inf.Rat R#2578 - use nqp ops instead of accessor methods |
10:59 | |||||||||||||||||||||||||||||||||||||
synopsebot | R#2578 [open]: github.com/rakudo/rakudo/issues/2578 Inf.Rat == Rational bug | ||||||||||||||||||||||||||||||||||||||
roast: 6feffac83c | (Elizabeth Mattijsen)++ | S32-num/rat.t Add tests for R#2578 |
11:03 | ||||||||||||||||||||||||||||||||||||||
synopsebot | R#2578 [open]: github.com/rakudo/rakudo/issues/2578 [testneeded] Inf.Rat == Rational bug | ||||||||||||||||||||||||||||||||||||||
jnthn | m: class C { has $!value; method m() { say $!value; my $value = 42; } } | 11:43 | |||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
jnthn | m: class C { has $!value; method m() { say $!value; my $value = $!value; } } | ||||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 23663609a7 | (Jonathan Worthington)++ | src/Perl6/Actions.nqp Fix missing redeclaration of bound outer error The code `my $a = 42; { say $a; my ($a) }` would fail to give an error that `$a` cannot be redeclared because it is already bound. The error was correctly reported in the non-signature case of a declaration (e.g. `my $a = 42; { say $a; my $a }`). This makes sure it reports in both cases, fixing #2570. |
11:56 | |||||||||||||||||||||||||||||||||||||
synopsebot | RAKUDO#2570 [open]: github.com/rakudo/rakudo/issues/2570 Missing "is already bound to an outer symbol" compilation error when (re)declarations with list assignment are done | ||||||||||||||||||||||||||||||||||||||
roast: dd1b3a8b3c | (Jonathan Worthington)++ | S02-names-vars/variables-and-packages.t Test error for `my $a; { say $a; my ($a) }` The existing test didn't cover the case where the illegal declaration of a symbol bound to an outer variable was located in a signature. |
11:58 | ||||||||||||||||||||||||||||||||||||||
rakudo: 4fecb72a53 | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline other Rat-Rat Rat-Int Int-Rat comparisons - for > >= < <= <=> - use nqp ops solely - add return signatures - about 1.4x as fast - left original code as comment for internal documentation |
12:09 | ||||||||||||||||||||||||||||||||||||||
rakudo: e0cd1d9992 | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Add some more obvious Rat return types |
12:32 | ||||||||||||||||||||||||||||||||||||||
rakudo: d195e14623 | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline negating Rat / FatRat - instead of creating new object using .new - just clone the object and negate the numerator - makes it about 3x as fast |
12:51 | ||||||||||||||||||||||||||||||||||||||
13:07
lucasb joined,
p6bannerbot sets mode: +v lucasb
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo/more-local-lowering: 11 commits pushed by (Jonathan Worthington)++ review: github.com/rakudo/rakudo/compare/9...3f929f05de |
13:26 | |||||||||||||||||||||||||||||||||||||
jnthn | Just a rebase, so I can continue working on it with all the latest stuff | 13:27 | |||||||||||||||||||||||||||||||||||||
lizmat | so what was the reason again for not upgrading Rats to FatRats automatically rather than making them Nums ? | 13:34 | |||||||||||||||||||||||||||||||||||||
lizmat just implemented that | |||||||||||||||||||||||||||||||||||||||
the fallout in spectest is remarkably small, mostly specific tests to Num that now fail | |||||||||||||||||||||||||||||||||||||||
timotimo | memory exhaustion, performance degradation | 13:35 | |||||||||||||||||||||||||||||||||||||
lizmat | is that it really? | ||||||||||||||||||||||||||||||||||||||
we're touting Rats as one of the USP's of Perl 6, yet they silently downgrade to floats if we get out of precision | 13:36 | ||||||||||||||||||||||||||||||||||||||
I think that is much more damaging than performance degradation | |||||||||||||||||||||||||||||||||||||||
jnthn | I think it was also that for the sorts of calculations you're likely to actually run into that in, chances are Num might have been a better choice anyway. | 13:37 | |||||||||||||||||||||||||||||||||||||
timotimo | the first thing people will throw at our rats is probably adding reciprocals, which gets really bad really quickly :) | 13:39 | |||||||||||||||||||||||||||||||||||||
m: my $start = 0.0; for ^100_000 { $start += FatRat.new(1) / $_ } | 13:40 | ||||||||||||||||||||||||||||||||||||||
camelia | ( no output ) | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my $start = 0.0; for ^100_000 { $start += FatRat.new(1) / $_ }; say $start.perl | ||||||||||||||||||||||||||||||||||||||
camelia | FatRat.new(1, 0) | ||||||||||||||||||||||||||||||||||||||
timotimo | oh? | ||||||||||||||||||||||||||||||||||||||
ah | |||||||||||||||||||||||||||||||||||||||
m: my $start = 0.0; for ^100_000 + 1 { $start += FatRat.new(1) / $_ }; say $start.perl | |||||||||||||||||||||||||||||||||||||||
camelia | (timeout) | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my $start = 0.0; for ^10_000 + 1 { $start += FatRat.new(1) / $_ }; say $start.perl | ||||||||||||||||||||||||||||||||||||||
jnthn | I'm pretty sure that isn't what the typical programmer is going to be doing. :P | 13:41 | |||||||||||||||||||||||||||||||||||||
camelia | FatRat.new(597313034085775894957419063900720435075990271615035016466782973836978960833016759908348939758280349893584359200829987209579949248845718511404010106584326236570756261967912057051149825856817631553578794190662280234629951790018159277551900295… | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my $start = 0.0; for ^1_000 + 1 { $start += FatRat.new(1) / $_ }; say $start.perl.chars | ||||||||||||||||||||||||||||||||||||||
camelia | 881 | ||||||||||||||||||||||||||||||||||||||
timotimo | m: my $start = 0.0; for ^10_000 + 1 { $start += FatRat.new(1) / $_ }; say $start.perl.chars | ||||||||||||||||||||||||||||||||||||||
camelia | 8705 | ||||||||||||||||||||||||||||||||||||||
13:45
MasterDuke joined,
p6bannerbot sets mode: +v MasterDuke,
MasterDuke left,
MasterDuke joined,
herbert.freenode.net sets mode: +v MasterDuke,
p6bannerbot sets mode: +v MasterDuke
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo/more-local-lowering: 852a593d98 | (Jonathan Worthington)++ | t/packages/Test/Helpers/QAST.pm6 Use a fake nqp::op for mark start/end of test QAST The variable approach won't work out now that we're lowering lexicals into locals, which loses their names. |
13:51 | |||||||||||||||||||||||||||||||||||||
jnthn | Well, that gets me `make test` clean on that branch at least... | ||||||||||||||||||||||||||||||||||||||
And 2 unhappy spectests | 13:55 | ||||||||||||||||||||||||||||||||||||||
Hm, and 1 seems to be because of a tickled spesh bug | 13:57 | ||||||||||||||||||||||||||||||||||||||
Ulti | as someone who's worked in scientific programming can I gently suggest lizmat is right thinking on this | 14:01 | |||||||||||||||||||||||||||||||||||||
if a Rat can become a Num silently the value of it ever being a Rat is low | |||||||||||||||||||||||||||||||||||||||
lizmat | R#2580 for reference | 14:02 | |||||||||||||||||||||||||||||||||||||
synopsebot | R#2580 [open]: github.com/rakudo/rakudo/issues/2580 [CONSENSUS] Why don't we upgrade Rats to FatRats instead of Nums ? | ||||||||||||||||||||||||||||||||||||||
Ulti | it should either have a hard exception raising edge to the use of a Rat or go into a pathologically bad use case for the Rat being fat | ||||||||||||||||||||||||||||||||||||||
then Im like oh I need more RAM not oh why do I have a weird numeric bug? | |||||||||||||||||||||||||||||||||||||||
added my $0.02 | 14:07 | ||||||||||||||||||||||||||||||||||||||
lizmat | Ulti++ | 14:08 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | lizmat: so basically you're saying that FatRats should be the default? | 14:09 | |||||||||||||||||||||||||||||||||||||
lizmat | no, I'm saying that as soon as an operation exceeds the Rat range on an operation, it becomes a FatRat, rather than a Num | ||||||||||||||||||||||||||||||||||||||
MasterDuke | that's sort of like saying FatRat is the default, Rat is just an optimization/implementation detail? | 14:10 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | yeah, I'm confused | ||||||||||||||||||||||||||||||||||||||
lizmat | well.. I guess you could argue it that way as well | 14:11 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | also, does it really become a Num? I thought just the denominator becomes a Num | 14:12 | |||||||||||||||||||||||||||||||||||||
lizmat | except that 2/3 will still be a Rat | ||||||||||||||||||||||||||||||||||||||
timotimo | no the whole thing becomes a Num | ||||||||||||||||||||||||||||||||||||||
lizmat | it really because a Num | ||||||||||||||||||||||||||||||||||||||
*becomes | 14:13 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | Ulti: you can have Rat typecheck whenever you want to ensure precision | 14:17 | |||||||||||||||||||||||||||||||||||||
m: my Rational $x = ([+] 1 XĂ· 1..99); dd $x | |||||||||||||||||||||||||||||||||||||||
camelia | Type check failed in assignment to $x; expected Rational but got Num (5.177377517639622e0) in block <unit> at <tmp> line 1 |
||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: my Rational $x = ([+] 1.FatRat XĂ· 1..99); dd $x | ||||||||||||||||||||||||||||||||||||||
camelia | FatRat $x = FatRat.new(360968703235711654233892612988250163157207, 69720375229712477164533808935312303556800) | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: my Rational $x = ([+] 1 XĂ· 1..9); dd $x | ||||||||||||||||||||||||||||||||||||||
camelia | Rat $x = <7129/2520> | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: dd [/] 1..21 | 14:19 | |||||||||||||||||||||||||||||||||||||
camelia | 1.9572941063391263e-20 | ||||||||||||||||||||||||||||||||||||||
AlexDaniel wonders what's the golf for getting a Num | |||||||||||||||||||||||||||||||||||||||
MasterDuke | if Rat -> FatRat became the default, would it make sense (or be possible) to remove FatRat altogether? | ||||||||||||||||||||||||||||||||||||||
just have Rat, with the implementation difference just be an optimization detail? | |||||||||||||||||||||||||||||||||||||||
timotimo | hmm, then we can't use native int in Rat at all | 14:20 | |||||||||||||||||||||||||||||||||||||
MasterDuke | like how we only have Int, but there's the smallint/bigint distinction/optimization in the MoarVM code that works on Ints | 14:21 | |||||||||||||||||||||||||||||||||||||
lizmat | my class Rat is Cool does Rational[Int, Int] { # timotimo | ||||||||||||||||||||||||||||||||||||||
timotimo | oh | ||||||||||||||||||||||||||||||||||||||
because our uint is bad? | |||||||||||||||||||||||||||||||||||||||
lizmat | it's not using uint atm anyway | ||||||||||||||||||||||||||||||||||||||
well... I guess | |||||||||||||||||||||||||||||||||||||||
all of the internal logic assumes Int rather than int fwiw | 14:22 | ||||||||||||||||||||||||||||||||||||||
timotimo | mhm | ||||||||||||||||||||||||||||||||||||||
lizmat | so we'd not be losing any performance if we would just get rid of FatRat altogether :-) | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | fwiw this change will have to be versioned (6.e) | ||||||||||||||||||||||||||||||||||||||
timotimo | i don't have the concentration and patience to spread "int" all over the QRegex/NFA.nqp file | 14:23 | |||||||||||||||||||||||||||||||||||||
lizmat | timotimo: does it help ? | ||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: i was just looking at those functions myself | ||||||||||||||||||||||||||||||||||||||
timotimo | at the moment it doesn't even run :) | ||||||||||||||||||||||||||||||||||||||
lizmat | otherwise I might have the determination at least | ||||||||||||||||||||||||||||||||||||||
MasterDuke | i notice a lot of `if $nfadebug`, where $nfadebug is just defined as `my $nfadebug` | 14:24 | |||||||||||||||||||||||||||||||||||||
timotimo | i put the results of profiling into #moarvm, which shows that there's a bunch of BOOTNum being allocated | ||||||||||||||||||||||||||||||||||||||
MasterDuke | can those if's be optimized out? or should that be `my constant $nfadebug = 0`? | ||||||||||||||||||||||||||||||||||||||
timotimo | not like that at least | ||||||||||||||||||||||||||||||||||||||
especially since nfadebug is supposed to be specified via an env var at run time | 14:25 | ||||||||||||||||||||||||||||||||||||||
so constant is too early | |||||||||||||||||||||||||||||||||||||||
lizmat | MasterDuke timotimo perhaps the nfadebug stuff could be put into a source converter logic that would eradicate that code unless specifically wanted ? | ||||||||||||||||||||||||||||||||||||||
AlexDaniel | m: my $x = ([+] 1.FatRat XĂ· 1..9999); dd $x | ||||||||||||||||||||||||||||||||||||||
lizmat | ah, ok runtime | ||||||||||||||||||||||||||||||||||||||
camelia | FatRat $x = FatRat.new(597306931336728925987684846824054295562560760543405396200454739202668259285244563792071357505464405320823201953997922106513789282608343343607573013112635198827211877356253504659634305795875721780867536308742111512487140721579811… | ||||||||||||||||||||||||||||||||||||||
timotimo | i have a branch that makes nqp::atkey on nqp::getenvhash constant, which allows access to NFA_DEBUG run-time-constant and can throw out these checks | 14:26 | |||||||||||||||||||||||||||||||||||||
AlexDaniel | heh I expected it to timeout… | ||||||||||||||||||||||||||||||||||||||
timotimo | it's fiddly, though | ||||||||||||||||||||||||||||||||||||||
and it's also not so great that return values are always pushed through dentout | |||||||||||||||||||||||||||||||||||||||
jnthn | Hurrah, think I found a way to keep S02-names/caller.t passing with my lexical to local lowering branch :) | ||||||||||||||||||||||||||||||||||||||
timotimo | \o/ | ||||||||||||||||||||||||||||||||||||||
more lexical to local lowering is very appreciated | |||||||||||||||||||||||||||||||||||||||
jnthn | Will spectest while I go to langauge class; bbiab | ||||||||||||||||||||||||||||||||||||||
timotimo | viel spaĂź! | 14:27 | |||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: $nfadeb is only set here `$nfadeb := nqp::existskey(nqp::getenvhash(),'NQP_NFA_DEB');`, does your branch help with nqp::existkey also? | 14:28 | |||||||||||||||||||||||||||||||||||||
timotimo | oh, i think it does | ||||||||||||||||||||||||||||||||||||||
however, once the result gets assigned somewhere, the benefit disappears | |||||||||||||||||||||||||||||||||||||||
so "if $nfadeb" will have to be replaced with getenvhash + existskey everywhere | |||||||||||||||||||||||||||||||||||||||
MasterDuke | hm, commenting out all the `<something> if $nfadeb` lines in optimize, mergesubstates, mergesubrules, addedge, and addrule didn't seem to make anything faster | 14:30 | |||||||||||||||||||||||||||||||||||||
timotimo | the calls themselves don't take much time | ||||||||||||||||||||||||||||||||||||||
er, when nfadeb is turned off i mea | 14:31 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | i thought there'd be a little change, but i guess no particular reason to spend much more time on $nfadeb | 14:33 | |||||||||||||||||||||||||||||||||||||
timotimo, lizmat: didn't you do some recent benchmarking of nqp::setelem? | 14:34 | ||||||||||||||||||||||||||||||||||||||
lizmat | not me I don't think | 14:35 | |||||||||||||||||||||||||||||||||||||
MasterDuke | *nqp::setelems | ||||||||||||||||||||||||||||||||||||||
timotimo | i do believe it was you who at least told me it wasn't worth putting it into many more places | ||||||||||||||||||||||||||||||||||||||
lizmat | timotimo: ah, but that was not the result of *recent* benchmarking :-) | 14:36 | |||||||||||||||||||||||||||||||||||||
timotimo | mhm | ||||||||||||||||||||||||||||||||||||||
lizmat | let me put it this way: it had a significant impact on the cases where it wouldn't matter | ||||||||||||||||||||||||||||||||||||||
like pushing something less than ~ 5 times or so | |||||||||||||||||||||||||||||||||||||||
MasterDuke | ah, i see that nqp::setelems was using a variable and that variable was then checked if it was > 3, which made me wonder if it's usually less than 3 and we should get rid of the nqp::setelems | 14:38 | |||||||||||||||||||||||||||||||||||||
but i just turned on the nfa log and that value was actually never less than 3, and got as high as 21982 | 14:39 | ||||||||||||||||||||||||||||||||||||||
for this code: sub prefix:<n1>($) {42}; sub prefix:<n2>($) {42}; sub prefix:<n3>($) {42}; sub prefix:<n4>($) {42}; | 14:40 | ||||||||||||||||||||||||||||||||||||||
timotimo | ha | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 92321beba7 | (Elizabeth Mattijsen)++ | src/core/Int.pm6 Make Int.Rat / Int.FatRat about 4x as fast As the numerator is an Int anyway, and the denominator is always one in the case of an Int being coerced, we don't actually need any checks and can just directly create the object using nqp ops. |
14:43 | |||||||||||||||||||||||||||||||||||||
lizmat | this specifically also makes the creation of Duration about 3x as fast | 14:45 | |||||||||||||||||||||||||||||||||||||
timotimo | *nice* | ||||||||||||||||||||||||||||||||||||||
lizmat | well, if you create a Duration with an Int value, duh | 14:47 | |||||||||||||||||||||||||||||||||||||
timotimo | right | 14:49 | |||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: do you know which functions are allocating all those BOOTNums? | 14:53 | |||||||||||||||||||||||||||||||||||||
timotimo | yes | 14:54 | |||||||||||||||||||||||||||||||||||||
gimme a minute for cro and its dependencies to recompile | |||||||||||||||||||||||||||||||||||||||
oh | |||||||||||||||||||||||||||||||||||||||
never mind that! | |||||||||||||||||||||||||||||||||||||||
14:54
Ven`` joined
14:55
p6bannerbot sets mode: +v Ven``
|
|||||||||||||||||||||||||||||||||||||||
timotimo | MasterDuke: mergesubstates, optimize, isa (from nqpmo.nqp:1292), sanity_check (from lib/MAST/Nodes.nqp:577), capnames (NQPP6QRegex.nqp:1377) | 14:58 | |||||||||||||||||||||||||||||||||||||
MasterDuke | currently, with some missing int's thrown in and a couple other pico-optimizations, i have increased the speed of my sample code by 0% | ||||||||||||||||||||||||||||||||||||||
timotimo | nice. | 14:59 | |||||||||||||||||||||||||||||||||||||
MasterDuke | off to a roaring start in 2019 | 15:00 | |||||||||||||||||||||||||||||||||||||
AlexDaniel doesn't mind that at all unless it's ≥ 0% | |||||||||||||||||||||||||||||||||||||||
whoops flip that sign please | 15:01 | ||||||||||||||||||||||||||||||||||||||
lizmat | hehe | ||||||||||||||||||||||||||||||||||||||
AlexDaniel should write tests for his messages before sending them | |||||||||||||||||||||||||||||||||||||||
lizmat | .oO( testy messages ) |
||||||||||||||||||||||||||||||||||||||
japhb | lizmat: *Why* does the Rat implementation not use native int denominators? | 15:02 | |||||||||||||||||||||||||||||||||||||
Or is that info lost to the depths of time? | |||||||||||||||||||||||||||||||||||||||
lizmat | probably a deficiency in parametric role application | ||||||||||||||||||||||||||||||||||||||
# XXX: should be Rational[Int, uint] | 15:03 | ||||||||||||||||||||||||||||||||||||||
japhb | Ah | ||||||||||||||||||||||||||||||||||||||
lizmat | my class Rat is Cool does Rational[Int, Int] { | ||||||||||||||||||||||||||||||||||||||
japhb wonders if that limitation is still there | |||||||||||||||||||||||||||||||||||||||
lizmat | m: role A[::T] { my T $a = 42; say $a }; class B does A[int8] { } | 15:05 | |||||||||||||||||||||||||||||||||||||
camelia | 5===SORRY!5=== Error while compiling <tmp> Could not instantiate role 'A': Type check failed in assignment to $a; expected int8 but got Int (42) at <tmp>:1 |
||||||||||||||||||||||||||||||||||||||
japhb | That's not the bug I was expecting. | 15:06 | |||||||||||||||||||||||||||||||||||||
Geth | rakudo: de933656bd | (Elizabeth Mattijsen)++ | src/core/Duration.pm6 Streamline Duration.new - make it a multi - makes Duration.new(Rat) about 4x as fast (most common case, I would say) - makes Duration.new(Mu) about 20% faster |
15:07 | |||||||||||||||||||||||||||||||||||||
lizmat | japhb: yeah, maybe some progress was made, but it definitely is not there yet | ||||||||||||||||||||||||||||||||||||||
in any case, all of the Rat internals assume bigints | 15:08 | ||||||||||||||||||||||||||||||||||||||
to really work with that, we'd have to do quite some work | |||||||||||||||||||||||||||||||||||||||
japhb | I guess the other question is whether uint denominator was a premature optimization now that smallint exists | 15:09 | |||||||||||||||||||||||||||||||||||||
timotimo | smallint only goes up to 32bits, though | 15:14 | |||||||||||||||||||||||||||||||||||||
lizmat | japhb: what would using a smallint give us? | ||||||||||||||||||||||||||||||||||||||
all native int ops are 64bit anyway (well, on a 64bit machine) | |||||||||||||||||||||||||||||||||||||||
timotimo | smallint is just a special case in storage of Int | ||||||||||||||||||||||||||||||||||||||
MasterDuke | oooo, may now have a very mildly noticeable speedup | ||||||||||||||||||||||||||||||||||||||
timotimo | MasterDuke: have you tried it with the benchmark i was using? | ||||||||||||||||||||||||||||||||||||||
how long does your test code run? mine was like 15 seconds | 15:15 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: what were you using? i've just been trying with what i showed above | ||||||||||||||||||||||||||||||||||||||
japhb | lizmat: as timotimo says, on MoarVM our supposed bigint is sometimes optimized to a 32-bit int anyway. | ||||||||||||||||||||||||||||||||||||||
MasterDuke | hm, now i'm getting a segfault during the --profile-compile, can't check if BOOTNum allocations are down | 15:16 | |||||||||||||||||||||||||||||||||||||
timotimo | github.com/muldis/Muldis_Object_No...tation.pm6 | ||||||||||||||||||||||||||||||||||||||
japhb | Of course, it's not as efficient as a true native uint for all-native calculations, but I could imagine it may actually be better for mixed calculations with "true" bigints, because the mixed math is all occuring in the VM, not up at the Rakudo layer. | 15:17 | |||||||||||||||||||||||||||||||||||||
MasterDuke | hm, works fine if i disable spesh, not sure how useful that will be though... | 15:18 | |||||||||||||||||||||||||||||||||||||
m: 773672 - 465217 # oh, still a reduction in BOOTNums | 15:20 | ||||||||||||||||||||||||||||||||||||||
camelia | WARNINGS for <tmp>: Useless use of "-" in expression "773672 - 465217" in sink context (line 1) |
||||||||||||||||||||||||||||||||||||||
MasterDuke | m: say 773672 - 465217 # oh, still a reduction in BOOTNums | ||||||||||||||||||||||||||||||||||||||
camelia | 308455 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: how do i test with that code? just clone and `perl6 -I . -M Muldis::Reference::Object_Notation -e ''`? | 15:23 | |||||||||||||||||||||||||||||||||||||
timotimo | i literally use the file as the perl6 file to run | ||||||||||||||||||||||||||||||||||||||
it shouldn't precompile, you see | |||||||||||||||||||||||||||||||||||||||
is mergesubrule supposed to be allocating one hash per run? maybe we can get that down? | 15:25 | ||||||||||||||||||||||||||||||||||||||
ah | 15:26 | ||||||||||||||||||||||||||||||||||||||
well, when the first thing it does is clone %caller_seen, that's what you get i guess | |||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: do you see that comment in optimize() about a small N^2 dup remover? maybe that's an opportunity? | 15:27 | |||||||||||||||||||||||||||||||||||||
timotimo | maybe first measure how much time that part actually takes | 15:29 | |||||||||||||||||||||||||||||||||||||
so as not to improve something that takes like 0.1% of optimize time in total | |||||||||||||||||||||||||||||||||||||||
MasterDuke | crazy talk | ||||||||||||||||||||||||||||||||||||||
timotimo: i'm on my laptop right now, so not the best benchmarking platform, but there might be a small (less than 1s) speedup on the muldis grammar | 15:34 | ||||||||||||||||||||||||||||||||||||||
guess i should move my changes over to the desktop so i can spectest and do better benchmarking | |||||||||||||||||||||||||||||||||||||||
timotimo | you can, if you want to, send me the diff :) | 15:35 | |||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: gist.github.com/MasterDuke17/add2c...899524a56a | 15:36 | |||||||||||||||||||||||||||||||||||||
15:39
Ven` joined,
p6bannerbot sets mode: +v Ven`
15:40
Ven` left
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | spectests clean | 15:55 | |||||||||||||||||||||||||||||||||||||
timotimo | i see numbers decrease | 15:59 | |||||||||||||||||||||||||||||||||||||
MasterDuke | there are still about 400k BOOTNum allocations in mergesubstates. however, i think i've got all the spots that i can and the rest are from operations on arrays (e.g., `@a[2] + @b[3]`) | ||||||||||||||||||||||||||||||||||||||
timotimo: time as well as allocations? | 16:00 | ||||||||||||||||||||||||||||||||||||||
timotimo | 8.185k, 8.911k, 4.598k, 4.296k, 1.686k, 883k | ||||||||||||||||||||||||||||||||||||||
8.185k, 9.982k, 6.209k, 4.296k, 1.686k, 883k | |||||||||||||||||||||||||||||||||||||||
Geth | rakudo/more-local-lowering: 871b6f5462 | (Jonathan Worthington)++ | 2 files Restore CALLER:: behavior on non-dynamic vars We retain the lexical slot, but fill it with something that will always come out as non-dynamic in the PseudoStash check, thus restoring the behavior expected in the spectests. It'd be nice to be able to fully do away with this at some point, but that needs either a better mechanism or a spec change. |
16:01 | |||||||||||||||||||||||||||||||||||||
jnthn | Hurrah, now a clean spectest on that branch :) | 16:02 | |||||||||||||||||||||||||||||||||||||
timotimo | The profiled code ran for 17,053.35ms | ||||||||||||||||||||||||||||||||||||||
The profiled code ran for 17,548.32ms | |||||||||||||||||||||||||||||||||||||||
so yeah, half a second better (in profile mode) | |||||||||||||||||||||||||||||||||||||||
MasterDuke | so a definite improvement, but small | 16:03 | |||||||||||||||||||||||||||||||||||||
timotimo | not entirely sure if it gets as much faster without profiling | ||||||||||||||||||||||||||||||||||||||
408 gc runs vs 388 gc runs | |||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: you weren't getting a segfault while profiling? | 16:04 | |||||||||||||||||||||||||||||||||||||
timotimo | no | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo/master: 14 commits pushed by (Jonathan Worthington)++ review: github.com/rakudo/rakudo/compare/d...36ca4dfae1 |
16:06 | |||||||||||||||||||||||||||||||||||||
jnthn | I've a bit more to do on the lowering front, but will make a new branch to explore that, meanwhile, the stuff I've done so far can get some more testing. | 16:07 | |||||||||||||||||||||||||||||||||||||
timotimo | oooh | ||||||||||||||||||||||||||||||||||||||
MasterDuke | i'm seeing a definite speedup non-profiled, but it's pretty small. about 18.8s for the muldis grammar before my change, about 18.2s after | 16:16 | |||||||||||||||||||||||||||||||||||||
gotta afk for a while, but i'm going to commit what i have now since it spectested clean | 16:17 | ||||||||||||||||||||||||||||||||||||||
timotimo | measurements are pretty noisy on my machine, but a noticeable bit faster than yours are | ||||||||||||||||||||||||||||||||||||||
MasterDuke still needs to get new equipment, those Zen 2s are looking pretty good | 16:19 | ||||||||||||||||||||||||||||||||||||||
timotimo | :) | ||||||||||||||||||||||||||||||||||||||
Geth | roast: 975188e6c3 | (Elizabeth Mattijsen)++ | S32-num/rat.t Fix typo, spotted by Brad Gilbert++ |
16:23 | |||||||||||||||||||||||||||||||||||||
nqp: 2c8b03a76b | (Daniel Green)++ | src/QRegex/NFA.nqp Add some ints and other micro-opts to NFA code Reduces BOOTNum allocations when compiling and makes compiling slightly faster. |
|||||||||||||||||||||||||||||||||||||||
AlexDaniel | 64 cores, hmm. That's pretty cool | 16:24 | |||||||||||||||||||||||||||||||||||||
|Tux| |
|
16:28 | |||||||||||||||||||||||||||||||||||||
timotimo | good: that's already post jnthn's code merges. bad: test-t looks kinda slow? | 16:32 | |||||||||||||||||||||||||||||||||||||
lizmat | timotimo: not slower than the past days | 16:33 | |||||||||||||||||||||||||||||||||||||
jnthn | I'd not expect anything massive immediately from what I just did; it's just the first part of the job, and the thing it most helps is giving PEA more to look at, and of course that's very much a MoarVM branch right now :) | 16:34 | |||||||||||||||||||||||||||||||||||||
timotimo | OK | ||||||||||||||||||||||||||||||||||||||
though i was hoping more regular old blocks could become inlined from all of this | |||||||||||||||||||||||||||||||||||||||
jnthn | timotimo: Seems I still need to do some more changes to convince that to happen :) | 16:35 | |||||||||||||||||||||||||||||||||||||
timotimo | OK! | ||||||||||||||||||||||||||||||||||||||
good work so far anyway :) | |||||||||||||||||||||||||||||||||||||||
16:57
pmurias joined,
p6bannerbot sets mode: +v pmurias
|
|||||||||||||||||||||||||||||||||||||||
pmurias | gist.github.com/pmurias/696c5a9278...395ecbde34 - a script to emit version of tests that run in precompilation mode (has still a few false fails) | 16:58 | |||||||||||||||||||||||||||||||||||||
16:58
pmurias left,
pmurias joined,
p6bannerbot sets mode: +v pmurias
|
|||||||||||||||||||||||||||||||||||||||
pmurias | I mean what do we want to do with the failures and how to we want to integrate the running of the tests? | 16:59 | |||||||||||||||||||||||||||||||||||||
jnthn | pmurias: How faily is it? | 17:03 | |||||||||||||||||||||||||||||||||||||
pmurias | jnthn: maybe like 20 real failing tests | 17:06 | |||||||||||||||||||||||||||||||||||||
jnthn | Ah, that's not so many | ||||||||||||||||||||||||||||||||||||||
pmurias | I'll get rid of the false fails and count it properly | ||||||||||||||||||||||||||||||||||||||
jnthn | I guess "golf and file issues" | ||||||||||||||||||||||||||||||||||||||
pmurias | jnthn: it's mostly some super weird things | ||||||||||||||||||||||||||||||||||||||
jnthn | Maybe there's some common root causes | ||||||||||||||||||||||||||||||||||||||
pmurias | for a lot of them there are | 17:07 | |||||||||||||||||||||||||||||||||||||
like 5 set tests fail due to a similiar bug | |||||||||||||||||||||||||||||||||||||||
jnthn | I now have a prototype of lowering $_ to a local, which in turn lets `for ^10_000_000 { }` run a bunch faster (since spesh can see that the wasteful boxing operation of the unused $_ can go away). It causes epic amounts of failure, however...now to see why :) | 17:09 | |||||||||||||||||||||||||||||||||||||
17:10
Ven`` left
|
|||||||||||||||||||||||||||||||||||||||
pmurias | jnthn: hmm, do you think adding an extra "test under precompilation" target would be a good idea? | 17:13 | |||||||||||||||||||||||||||||||||||||
jnthn | pmurias: Yeah, a makefile target for that sounds nice to have | 17:14 | |||||||||||||||||||||||||||||||||||||
pmurias | jnthn: I'm think of maybe adding an extra option to the harness like we have --fudge | 17:15 | |||||||||||||||||||||||||||||||||||||
jnthn | Hmm, could also work | 17:16 | |||||||||||||||||||||||||||||||||||||
17:26
lucasb left
17:32
pmurias left
|
|||||||||||||||||||||||||||||||||||||||
jnthn | grmbl, seems GitHub notifications are a bit delayed | 17:41 | |||||||||||||||||||||||||||||||||||||
Geth | rakudo/lower-topic: f741374ca6 | (Jonathan Worthington)++ | src/Perl6/Optimizer.nqp Allow lowering of direct lexical params too Some cases of `$_` that we'll want to lower look like this. I'm not sure it will net anything else, but it tests clean, and will allow for easier bissection later if it does cause problems. |
17:44 | |||||||||||||||||||||||||||||||||||||
jnthn | ah, it missed the first couple in that branch | 17:46 | |||||||||||||||||||||||||||||||||||||
Anyway, all groundwork; the change that causes all the trouble I'll keep locally and debug some more tomorrow. :) | 17:47 | ||||||||||||||||||||||||||||||||||||||
17:49
DrForr joined
|
|||||||||||||||||||||||||||||||||||||||
jnthn | o/ | 17:49 | |||||||||||||||||||||||||||||||||||||
17:49
p6bannerbot sets mode: +v DrForr
17:54
pmurias_ joined,
p6bannerbot sets mode: +v pmurias_
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 29d7f70958 | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline Rat +/- Rat, Int +/- Rat, Rat +/- Int - use nqp::getattr instead of accessors - make sure each attribute is only fetched once - makes these about 20% faster |
17:59 | |||||||||||||||||||||||||||||||||||||
dogbert11 | ZOFFLOP: t/spec/S32-io/IO-Socket-Async.t and t/spec/MISC/bug-coverage-stress-6.d.t | 18:10 | |||||||||||||||||||||||||||||||||||||
MasterDuke | jnthn: hm, looks like the branch you just merged to rakudo loses the optimization i just made to nqp. i.e., time went from ~18.8s before my change, down to ~18.2s after my changes, back up to ~18.8s after your merge | 18:19 | |||||||||||||||||||||||||||||||||||||
timotimo | that's weird | 18:24 | |||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: can you repro? | ||||||||||||||||||||||||||||||||||||||
timotimo | i mean the changes were pretty much all in nqp parts of the codebase? | ||||||||||||||||||||||||||||||||||||||
like, before actual perl6 code runs? | |||||||||||||||||||||||||||||||||||||||
measurements on my system are far too noisy to see clearly :| | 18:25 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | it might be that the example code just shows some problem, not that his branch directly effects my changes | 18:26 | |||||||||||||||||||||||||||||||||||||
timotimo | what does stagestats look like? | 18:27 | |||||||||||||||||||||||||||||||||||||
MasterDuke | i forgot to look beforehand | ||||||||||||||||||||||||||||||||||||||
timotimo | good thing we have shareable ;) | ||||||||||||||||||||||||||||||||||||||
MasterDuke | but that won't have a rakudo with my changes and not jnthn's | 18:28 | |||||||||||||||||||||||||||||||||||||
timotimo | ah | ||||||||||||||||||||||||||||||||||||||
right | |||||||||||||||||||||||||||||||||||||||
MasterDuke | hm, but it should have a rakudo before and after jnthn's merge, which theoretically would show some difference even without my nqp changes | 18:34 | |||||||||||||||||||||||||||||||||||||
timotimo: btw, that deduping code gets called a ton of times, but the longest time it took to run was 0.377s, next longest was 0.01s, and it very quickly gets even shorter from there | 18:38 | ||||||||||||||||||||||||||||||||||||||
for that muldis grammar code | |||||||||||||||||||||||||||||||||||||||
timotimo | mhm | ||||||||||||||||||||||||||||||||||||||
18:42
pmurias_ left
18:52
pmurias_ joined,
p6bannerbot sets mode: +v pmurias_
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: i think i just got two extremes in the noise. i just looked at stage parse at rakudo HEAD and after reverting the merge commit and it looks pretty similar (within the noise) | 19:22 | |||||||||||||||||||||||||||||||||||||
timotimo: does this segfault for you? `p6 --profile-compile -e 'sub prefix:<n1>($) {42}; sub prefix:<n2>($) {42}; sub prefix:<n3>($) {42}; sub prefix:<n4>($) {42};'` | 19:36 | ||||||||||||||||||||||||||||||||||||||
timotimo | yeah it does | 19:49 | |||||||||||||||||||||||||||||||||||||
memory corruption, eh? | 19:51 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | weird that it doesn't for the longer muldis grammar compile | ||||||||||||||||||||||||||||||||||||||
timotimo | it's trying to atpos_o on an object that's not actually a valid object | 19:53 | |||||||||||||||||||||||||||||||||||||
haha, valgrind makes it work | 19:54 | ||||||||||||||||||||||||||||||||||||||
fun | |||||||||||||||||||||||||||||||||||||||
MasterDuke | yup, so does disabling spesh, but not jit | 19:55 | |||||||||||||||||||||||||||||||||||||
19:57
SqrtNegInf joined,
p6bannerbot sets mode: +v SqrtNegInf
|
|||||||||||||||||||||||||||||||||||||||
timotimo | i'm trying MVM_GC_DEBUG ... and there it is! | 20:01 | |||||||||||||||||||||||||||||||||||||
20:04
MasterDuke left
|
|||||||||||||||||||||||||||||||||||||||
timotimo | MoarVM panic: Collectable 0x5c03a78 in a gen2 freelist accessed | 20:05 | |||||||||||||||||||||||||||||||||||||
is what i'm seeing | |||||||||||||||||||||||||||||||||||||||
20:50
pmurias_ left
20:54
pmurias joined,
p6bannerbot sets mode: +v pmurias
21:22
MasterDuke joined,
p6bannerbot sets mode: +v MasterDuke,
MasterDuke left,
MasterDuke joined,
herbert.freenode.net sets mode: +v MasterDuke,
p6bannerbot sets mode: +v MasterDuke
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: an easy fix? | 21:22 | |||||||||||||||||||||||||||||||||||||
timotimo | i was rudely interrupted and distracted | 21:23 | |||||||||||||||||||||||||||||||||||||
dogbert11 | by the cats :) | 21:24 | |||||||||||||||||||||||||||||||||||||
timotimo | among other things ;) | ||||||||||||||||||||||||||||||||||||||
21:29
ufobat joined
21:30
pmurias left,
p6bannerbot sets mode: +v ufobat
21:32
pmurias joined,
p6bannerbot sets mode: +v pmurias
21:37
llfourn joined
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | timotimo: as for getting rid of the remaining BOOTNums, i suspect converting nqp's default from float to int is required. if i get my branch rebased up to HEAD, think you'd be able to help troubleshooting? i got it to the point of building nqp and passing it's tests, but rakudo wouldn't build | 21:37 | |||||||||||||||||||||||||||||||||||||
21:37
p6bannerbot sets mode: +v llfourn
|
|||||||||||||||||||||||||||||||||||||||
timotimo | oof | 21:38 | |||||||||||||||||||||||||||||||||||||
it sounds like an intimidating project | |||||||||||||||||||||||||||||||||||||||
MasterDuke | well, i might just need a pointer to where to look for debugging the rakudo failure. IIRC i wasn't even sure how/where to look | 21:39 | |||||||||||||||||||||||||||||||||||||
timotimo | i have a cat head in my hand | 21:41 | |||||||||||||||||||||||||||||||||||||
i need dasher again lol | 21:43 | ||||||||||||||||||||||||||||||||||||||
MasterDuke | fwiw, i think it'll take me a bit to rebase. it's been a while | ||||||||||||||||||||||||||||||||||||||
timotimo | mhm | ||||||||||||||||||||||||||||||||||||||
MasterDuke | and my free time has been drastically reduced. but i'm hoping to get a little time next week | 21:44 | |||||||||||||||||||||||||||||||||||||
timotimo | i think he actually almost fell asleep with his head in my hand <3 | 21:46 | |||||||||||||||||||||||||||||||||||||
MasterDuke | my main distraction now likes to crawl all over me when i'm on the computer and ask to watch videos of babies and doggies | 21:47 | |||||||||||||||||||||||||||||||||||||
22:00
ufobat left
|
|||||||||||||||||||||||||||||||||||||||
MasterDuke | is there any good way to fix merge conflicts in the nqp bootstrap files? | 22:12 | |||||||||||||||||||||||||||||||||||||
[Coke] | I think you have to regen them. | 22:14 | |||||||||||||||||||||||||||||||||||||
MasterDuke | [Coke]: yeah, guess that makes sense | 22:15 | |||||||||||||||||||||||||||||||||||||
ugh, that dies with `This representation (VMArray) cannot unbox to a native string (for type NQPArray)`. back to debugging... | 22:18 | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 6dad5caf3b | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline Rat normalization - save 2 Scalar allocations per normalization - makes it about 15% faster |
22:21 | |||||||||||||||||||||||||||||||||||||
MasterDuke | oh right, i also depended on a MoarVM branch... | ||||||||||||||||||||||||||||||||||||||
Geth | rakudo: daeb7f2634 | (Elizabeth Mattijsen)++ | 5 files Remove accumulated trailing whitespace No functional difference. |
22:28 | |||||||||||||||||||||||||||||||||||||
22:29
robertle left
22:54
Ven`` joined,
p6bannerbot sets mode: +v Ven``
23:03
pmurias left
|
|||||||||||||||||||||||||||||||||||||||
Geth | rakudo: 395d633db1 | (Elizabeth Mattijsen)++ | src/core/Rat.pm6 Streamline final stage of Rat normalization - use multi's to decide about Rat vs FatRat - makes the Rat case about 3% faster - makes the FatRat case about 2x as fast |
23:22 | |||||||||||||||||||||||||||||||||||||
lizmat | and that concludes my hacking for today | ||||||||||||||||||||||||||||||||||||||
good night, perl6-dev& | 23:23 | ||||||||||||||||||||||||||||||||||||||
jnthn | Nice! | 23:31 | |||||||||||||||||||||||||||||||||||||
lizmat++ | |||||||||||||||||||||||||||||||||||||||
timotimo | can't wait for "remove accumulated trailing whitespace, no functional changes" to somehow end up the result of a bisect :D | 23:42 |