freenode/#clasp - IRC Chatlog
Search
0:55:48
drmeister
Discriminator functions will get compiled as the interpreted discriminator functions age out.
0:56:48
Bike
https://github.com/clasp-developers/clasp/blob/master/src/core/funcallableInstance.cc#L371-L376
0:58:56
Bike
it seems like the improvement in the speed of discrimination is generally dwarfed by the compile time.
1:01:34
drmeister
If it's all interpreted generic functions and satiated ones - then the satiated functions must be slower than the old satiated functions.
1:01:36
Bike
since it's turned off in cleavir, i think this is the only place the compiler is used https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/clos/satiation.lsp#L451-L618
1:02:03
Bike
it's hard to imagine these clos functions being so much slower that it doubles compile time
1:02:17
Bike
especially when in simple comparisons it doesn't look like the new code generated is in fact slower
1:03:10
Bike
like i said, my first suspicion is that something is dispatch missing a lot, but it's hard to tell
1:03:15
drmeister
How about we count the number of gf discriminating functions being compiled and report that with Time and consed in the build output.
1:08:40
drmeister
Here are the slowest ones - they look like the first ones I posted - with the old discriminating function compiler.
1:09:34
drmeister
cracauer told me that when he used to do timing at Google that he took a lot of trouble to get the machines stable for timing measurements.
1:37:12
Bike
anyway, if this is legit, cool i guess. i can do this for the dtree interpreter and then where tags are unneeded. and i can work on something else.
1:58:23
drmeister
The llvm-ir for Instance_O vs FuncallableInstance_O looks identical - is the rack at the same offset at the moment?
1:59:41
Bike
but that could change, or we coudl use the same thing for derivables where the rack is at a different offset.
2:01:01
Bike
splitting it up also means that we do one 3-switch on the header and then a 2- or 3- switch on the rack stamp, rather than a switch on the where tag followed by a 5-switch on the rack stamp.
2:07:14
Bike
should do some metrics on the average spread, at some point when i'm less sick of this code
2:09:18
Bike
i gues a histogram of call history lengths would probably be a good start and easy to do
2:22:46
Bike
bclasp generally. if you put it in a file and you're in cclasp it'll be cleavir, though.
2:24:24
Bike
actually it might be possible to do so now since dispatch misses don't invalidate the function, but i dunno, i don't like going down that rabbit hole
2:27:06
Bike
cleavir-ir:successors is a function i use for this sometimes, since it's inevitably got a call history that's like 60 long
2:28:22
Bike
i usually pick out the form and call macroexpand myself. like (macroexpand-1 (third (fourth (third (third (fourth form)))))) in this case
2:28:53
Bike
like i said. just put #.(clos::generate-discriminator whatever) in an otherwise empty file and compile that.
2:29:29
drmeister
You said "quickest way would probably be #.(clos::generate-discriminator #'generic-function)"
2:29:58
drmeister
The quickest way would probably be to put #.(clos::generate-discriminator #'generic-function) into a file and compile-file it.
2:31:32
drmeister
quickest way would probably be #.(clos::generate-discriminator #'generic-function)
2:33:50
Bike
uh, maybe do #.(clos::compile-time-discriminator #'initialize-instance (clos::generic-function-call-history #'initialize-instance))
2:39:45
Bike
your ir will have some fixnum tests it doesn't need to. i cut those out locally to see if they were the problem