|
00:02
woosley joined
00:08
cognome joined
00:09
cognome joined
00:34
cognome joined
01:14
FROGGS_ joined
06:35
_sri joined
|
|||
| sergot | hi o/ | 06:51 | |
| nwc10 | \o | 06:52 | |
|
07:11
kjs_ joined
07:21
zakharyas joined
08:09
brrt joined
08:31
kjs_ joined
08:41
JimmyZ joined
|
|||
| JimmyZ | good afternoon, #moarvm | 08:41 | |
| FROGGS | hi JimmyZ | ||
|
08:41
brrt joined
|
|||
| JimmyZ | hello FROGGS | 08:42 | |
| brrt | \o JimmyZ | 08:43 | |
| just the person i need :-) | |||
| i need to really really be certain | |||
| JimmyZ | o/ brrt | ||
| brrt | do we /want/ divide-by-zero to crash or do we want to throw an exception | ||
| i.e. hardware exception | |||
| or software exception | |||
| JimmyZ | I don't know, maybe we can ask jnthn++ :P | 08:44 | |
| brrt | also, is round-to-negative-infinity for integer division specced | ||
| without jnthn all is panic :-P | |||
| JimmyZ | we are talking about native int | ||
| not Int :P | 08:45 | ||
| brrt | hmm | ||
| no i know | 08:46 | ||
| basically, i'm okay with a 'safety brackets are off' approach to natives | |||
| but that means you'll have to catch /native/ hardware exceptions too | |||
| and taken further, you might argue that you want native rounding behavior | 08:47 | ||
| JimmyZ | actually, I 'd like hardware exception( for native int ), if users want software exception, the users can catch it by themself | ||
| brrt | fair enough | ||
| but i'd want some consensus on that :-) | 08:48 | ||
| i'm indifferent about it | |||
| JimmyZ | this conforms to TimToady++'s fast division, methinks | ||
| brrt | fair enough | 08:49 | |
| what about the rounding behaviour then :-) | |||
| JimmyZ | I don't know... but for native int, I wish it behaves like C. :P | 08:51 | |
| brrt | hmm | 08:53 | |
| but C might differ between architectures | |||
| as in, i really suspect there is a reason for the logic in interp.c | 08:54 | ||
| although | |||
| if that is so | |||
| then the logic would never be correct | |||
| uhm | |||
| JimmyZ | TimToady, jnthn: how do think about it? | 08:58 | |
|
09:26
JimmyZ_ joined
10:01
kjs_ joined
10:24
zakharyas joined
|
|||
| jnthn | Good evening o/ | 10:31 | |
| nwc10 | Good UGT heresy | ||
| jnthn++ # profiler | 10:32 | ||
| jnthn noticed TimToady++ made some spec commits on native division, and wonders if those cover whta was being discussed some hours ago... | 10:33 | ||
| nwc10: Oh...have folks been up to great good with it? :) | 10:34 | ||
| nwc10 | jnthn: strangely, not as much as one might have hoped | ||
| can I --profile NQP code? | 10:47 | ||
| jnthn | Sure | ||
| nwc10 | oh, yes, by putting after nqp.moarvm | ||
| jnthn | bbi10 | ||
|
10:50
kjs_ joined
|
|||
| timotimo | jnthn: the spec change was just to turn the "return a Failure for div by 0" into a straight exception | 11:04 | |
| the call to failure caused our optimizations to bail, making a tight loop in example code very costly | |||
| jnthn | yes, i twould... | 11:06 | |
| Well, is Rakudo itself guarding that now? | |||
| timotimo | gimme a sec | 11:09 | |
| no, we rely on the vm to throw an exception | |||
| from inside nqp::mod_i | |||
| not sure if the jvm and parrot backends do that, but supposedly that commit went through spec testing | |||
| brrt | jnthn: these spec commits are exactly what is up | 11:10 | |
| :-) | |||
| jnthn | Well, I'm not sure the VM dying with sigfpe is the way to go... | ||
| brrt | i /think/ that is what parrot does | 11:11 | |
| (i.e. dying with sigfpe) | |||
| one could argue that we should catch signals but threads | |||
| and windows | |||
| i.e. translate signals to exceptions | 11:12 | ||
| jnthn | I guess one solution i shave the JIT check if it's zero and branch to something that throws an exception if so. | 11:14 | |
| So that if it's not zero there is no branch | |||
| (e.g. by noticing we need such code, making a label, then right at the end of code-gen attaching that exceptional path) | |||
| brrt | that's pretty much what i did yesterday :-) | ||
| jnthn | ah, ok | 11:15 | |
| brrt | except that the exception-throwing is inline | ||
| and what you're saying.. we could do that in principle | |||
| jnthn | Yeah, that means we have to jump... | ||
| (in the normal case) | |||
| brrt | uhuh | ||
| i agree that this is suboptimal | |||
| jnthn | Which is avoidable, which can be cheaper | ||
| brrt | ok, i have an idea of how to do that | 11:16 | |
| jnthn | Oher thing is that if we're dividing by a constant, we can see that in facts. | ||
| And elide the check. | |||
| brrt | you're asking for things that the jit graph can't really express yet :-0 | ||
| :-) | |||
| which goes to show how much work is still left to be done :-) | 11:17 | ||
| although, now that i think about it, we /could/ do that now | 11:19 | ||
| timotimo | aye, we'll need many more changes to do more amazing optimizations | 12:04 | |
| though ... we'll probably have to see if we can do some nice things at the spesh level, too | 12:05 | ||
| i'm very curious how we'll do the "hypers on native arrays will turn into sse instructions" thing | 12:06 | ||
| brrt | har har | 12:07 | |
| har-dee-har-har | |||
| timotimo | hm? | ||
| brrt | we're quite far away from expressing that | ||
| is what i'm saying | |||
| timotimo | yeah :S | ||
| we also don't have these native arrays yet ;) | |||
| brrt | exactly | 12:08 | |
| timotimo | and if the ints are not packed tightly, i don't think sse would work well | ||
| brrt | no, you'll need contigous blocks before you can do that | ||
| if we have native arrays and real-codegen and a host of other things | |||
| timotimo | it'd end up being a full copy into a packed space, then a calculation and a copy back | 12:09 | |
| brrt | then for one thing, we'll have an enormous speed boost just from that | ||
| timotimo | you said you had an epiphany related to phi nodes and how to do set removal? | ||
| brrt | not on spesh level, but on register-allocation level, yes | ||
| timotimo | thought so, yeah | 12:10 | |
| brrt | and i mean register-assignment not allocation | ||
| timotimo | mhm | ||
| i really wonder how expensive that stuff ends up being | |||
| brrt | register allocation is this subtly different thing wherein you assign a register for a loop or so | ||
| sets? | |||
| timotimo | yes | ||
| excessive sets | |||
| brrt | but set removal kind of follows out of register assignment | ||
| timotimo | right | 12:11 | |
| brrt | as in, when you assign a value to be held in a cpu register, and set copies the value to another moar register, then that just means the cpu register now holds the value for the other moar register too | 12:12 | |
| timotimo | will we have to treat object/string register and int/num registers differently for set deduplication, btw? | ||
| brrt | depends on which level you want to do that, but for spesh yes, since the GC sees them as different | 12:13 | |
| timotimo | not only that | ||
| if you set a num to a different register, you have two different copies you can mutate individually | |||
| brrt | for the cpu level, object/string/int just go into gprs, and num go into sse registers | ||
| timotimo | if you have an object in two registers, they are "by reference" | ||
| brrt | i see | 12:14 | |
| timotimo | maybe that's what has ruined jnthn's and my early attempts at set removal? | ||
| brrt | yes, in that sense the algorithm would have to take a different approach | ||
| timotimo | at least in my approach it didn't | ||
| (this was spesh-level back then) | |||
| brrt | how do you handle deopts? | 12:15 | |
| timotimo | hope and pray :) | ||
| i wasn't handling deopt properly at all back then | |||
| brrt | well.... that would kill it too | 12:16 | |
| timotimo | jnthn probably did, but i didn't look closely at the code, i believe | ||
|
12:24
kjs_ joined
13:18
brrt joined
13:53
kjs_ joined
14:10
odc joined
|
|||
| jnthn | I don't think I've tried the set removal patch again since fixing dead code elim's deopt issues... | 14:22 | |
| carlin | if conditions that are always true: github.com/MoarVM/MoarVM/pull/132 | 14:33 | |
|
14:35
woolfy joined
|
|||
| timotimo | in C, char is a signed byte? | 14:36 | |
| in that case, we'll probably want to check for < 0 instead | |||
| brrt | yes | ||
| char is signed byte, this bytes many people | |||
| timotimo | instead of removing the check, that is | ||
| jnthn | Yeah, github.com/carbin/MoarVM/commit/24...41c12a3b6b is wrong | 14:37 | |
| timotimo | haven't looked at the other diffs yet | 14:38 | |
| jnthn | Should use MVMuint8 or MVMint8 in the code to make it clearer, thus avoding the confusion. :) | ||
| timotimo | yup | ||
| jnthn | Others looks sane to me. | ||
| dalek | arVM: 459436a | Carlin++ | src/ (3 files): Fix implicit declaration of function warnings Makes clang a tiny little bit happier |
14:39 | |
| arVM: 216b415 | jonathan++ | src/ (3 files): Merge pull request #121 from carbin/noise-functions Fix implicit declaration of function warnings |
|||
| timotimo | using clang's static analysis tools would probably be a good thing for moarvm | ||
| dalek | arVM: 9056d44 | Carlin++ | 3rdparty/libtommath/ (2 files): use arc4random on platforms that support it This fixes MVM_bigint_rand not being random on the various BSDs due to broken rand() implementations on those platforms |
14:40 | |
| arVM: c629ef5 | jonathan++ | 3rdparty/libtommath/ (2 files): Merge pull request #119 from carbin/master use arc4random on platforms that support it |
|||
| arVM: d155b9f | Carlin++ | src/core/exceptions.c: Fix conversion warnings in exceptions.c This file is now exceptionless compiling with clang |
14:41 | ||
| arVM: f73877a | jonathan++ | src/core/exceptions.c: Merge pull request #122 from carbin/noise-exception Fix conversion warnings in exceptions.c |
|||
| carlin | how's this?: github.com/carbin/MoarVM/commit/db...0cb9b20c1d | 14:52 | |
| brrt | seems-better-to-me | 14:54 | |
| i still have to figure out why the getcodeobj JIT breaks | 14:55 | ||
| timotimo is still somewhat stubbornly hoping for param_* to be implemented soon | 14:56 | ||
| brrt | hahaha | 14:57 | |
| i know i know | |||
| maybe jnthn++ can provide some ideas | 14:58 | ||
| timotimo | i don't want to annoy you too much ... i'm just being a little kid about this :P | ||
| brrt | basically, i want to remove the dispatching from those ops | ||
| right now if you look at src/core/args.c, there's basically a bunch of dispatching macro's | |||
| but in fact, if you know the type you want - which you do - you can remove about half them | 14:59 | ||
| half of them | |||
| it seems | |||
| and that should speed stuff up | |||
| interpreter and jit both | |||
| timotimo | would that mean we'll get more instructions for those param_* ops that would be the result of spesh? | ||
| brrt | uh, no, not really | 15:00 | |
| the other 'issue' i see with the current params_* implementation is that | 15:01 | ||
| you basically have this path between what's provided and what is desired | |||
| i.e. you may provide an int, and want a string | |||
| well, we can do that | |||
| timotimo | ah, that's partially the big "autounbox" thing? | 15:02 | |
| brrt | yes | ||
| but the current implementation is basically a greedy hardcoded search | |||
| timotimo | mhm | ||
| brrt | and autobox too, btw | ||
| timotimo | ah, indeed | ||
| brrt | also, basically if you have an object that can box an int and a num, for example, then the autounbox will get the int only (iirc), even if you wanted the num | 15:03 | |
| none of this is a problem as in 'broken' | |||
| timotimo | ah, d'oh | ||
|
15:03
JimmyZ joined
|
|||
| brrt | especially as nearly everything in perl6 is an object | 15:03 | |
| so you don't pass natives directly that often | 15:04 | ||
| timotimo | nearly everything in perl6, but not necessarily everything in a performance-tuned piece of code ;) | ||
| brrt | but i think you can see that ehm... i don't have a single good solution for this | 15:06 | |
| other than just changing the signatures and not caring about the implementation itself | 15:07 | ||
| timotimo | and a "shoddy" first stab at implementing a few of these ops in the jit would be too much duplicated work, i suppose? | ||
| brrt | no, that's not really it i think | ||
| for another thing, i really think the required flag is a waste in that function | 15:08 | ||
| no reason the interpreter can't throw if it expected something and didn't get it | |||
| in optional ops the interpreter must jump too, right? | |||
| timotimo | ah, hm. | ||
| brrt | but what i don't know is what the tradeoffs were in writing it in this fashion | 15:09 | |
| long story short | |||
| i'm overly cautious perhaps | |||
| timotimo | mhm | ||
| brrt | but personally i care more about segfaults than having them anyway | ||
| timotimo | %) | 15:10 | |
| brrt | since - and this is totally unscientific guesswork from my part - if we couldn't spesh the arguments, that probably means we get a lot of different types, and we're going to end up deopting really often | 15:11 | |
| but i can be totally wrong about that | |||
| whereas a segfault may mean that we have a bug lurking somewhere that needs a good smash | 15:12 | ||
| jnthn | m: say $*TZ | 15:18 | |
| camelia | rakudo-moar 72852f: OUTPUT«0» | ||
|
15:21
mj41 joined
|
|||
| brrt afk | 15:24 | ||
| diakopter | m: say $*TZ | 15:53 | |
| camelia | rakudo-moar 72852f: OUTPUT«0» | ||
| timotimo | camelia should really use a CTCP Time on the caller to get the proper timezone. | 15:54 | |
| diakopter | m: $^ # Form module? LTA error? | ||
| camelia | rakudo-moar 72852f: OUTPUT«===SORRY!=== Error while compiling /tmp/ndJEtD7klGUnsupported use of $^ variable; in Perl 6 please use Form moduleat /tmp/ndJEtD7klG:1------> $^⏏ # Form module? LTA error?» | ||
| TimToady | that's more of a #perl6 issue | 15:59 | |
|
16:25
Ven joined
17:06
tgt joined
17:52
Ven joined
19:22
Ven joined
19:26
Ven_ joined
20:00
FROGGS joined
21:18
donaldh joined
21:36
itz_ joined
21:40
btyler joined
21:41
ggoebel111118 joined,
itz joined
21:42
donaldh_ joined
21:46
itz joined
22:10
avuserow joined
|
|||