freenode/#clasp - IRC Chatlog
Search
19:48:05
drmeister
Thank you. So at runtime I need to check the result returned by the code that evaluates the function and what are the possibilities? (1) It could be a closure - in which event I can just call it. (2) it can be a symbol - in which case I call the symbol-function. Anything else?
19:49:07
Bike
https://github.com/clasp-developers/clasp/blob/dev/src/lisp/kernel/cleavir/inline.lisp#L802-L811
19:55:01
Bike
deleting the lineno thing didn't break the build, and slime still works, and C-c C-c still works, and the source location is hooked up. so i guess it'sfine.
19:57:51
Bike
and i see, the source debug pathname business sets it up so that slime's temporary file is like the actual file for source pos reasons. right right right. that makes sense. maybe we can avoid storing it in the function though.
19:57:52
drmeister
I've been writing some code to time microbenchmarks to see if I can spot things that are really slow.
19:58:51
drmeister
It figures out how many operations can be run per second and summarizes them in terms of the log base 10 of the number of operations that can be run per second.
19:59:05
drmeister
The code needs to use funcall and funcall turned out to be a bottle neck in bclasp.
20:00:53
drmeister
I recalled that you wrote a compiler macro for cclasp - but that we can't use it because of ... startup/circularity/bootstrapping issues.
20:01:23
drmeister
So I thought since I control the bclasp compiler - I can implement the optimization in the bclasp compiler directly.
20:05:44
Bike
cleavir-primop:funcall is what you referred to as the "(<evaluate something> ...)" case
20:13:04
Bike
i see. we write in the *actual* source pathname for functions, so for slime, the tempfiles
20:29:50
Bike
good that i learn this now, because it means i set up source locations for classes wrong
22:46:15
drmeister
The debug information of the temporary file will be relative to the temporary file - won't it?
22:47:33
Bike
the source information written into the cst doesn't need to have anything about the temporary file at all, i don't think
22:48:10
drmeister
The temporary file name is passed to compile-file. That opens the stream and the stream file offset is relative to the start of the temporary file.
22:49:55
Bike
am i wrong? i mean, at some point we do need to worry about offsets and stuff, but i think we can handle that right off instead of preserving it throughout.
23:13:00
drmeister
Once you write the changes to the original file then the source file and offsets recorded in the debug info will be correct.
1:43:23
drmeister
Bike: Is your make-instance optimization in place - or is it stymied by startup/bootstrapping issues?
1:45:40
drmeister
make-instance is the first thing that jumps out at me as being radically slower in clasp than sbcl 1000x
1:47:35
drmeister
I wonder if we were to slow down clisp's make-instance by 1000x how that would effect it's speed of running cleavir.
1:51:37
drmeister
So: 5.40 (PUSH (MAKE-LIST 100) *MAKE-LIST*) (DEFPARAMETER *MAKE-LIST* NIL) means...
1:52:03
drmeister
10^5.4 (push (make-list 100) *make-list*) can be evaluated per second after (defparameter *make-list* nil) was evaluated.
2:04:24
drmeister
I'm trying to figure out why bclasp is so slow relative to clisp when running cleavir.
2:07:09
drmeister
When I compare cclasp with bclasp using these micro-benchmarks the numbers come out pretty close. It doesn't look like cclasp is getting us much in the way of performance.
2:08:31
Bike
maybe the real problem is we have all these confusing flags so we can't tell what we're benchmarking :p
2:21:58
drmeister
I'm looking for possible explanations why clisp is so much faster at compilation than clasp.
2:25:05
drmeister
I have this in one file called timing.lsp - I use (load (compile-file "timing.lsp")) What does that use?
2:27:20
drmeister
Right now I'm just benchmarking bclasp against clisp. bclasp is comparable and a bit faster on many things.
2:27:44
drmeister
Except make-instance is about 10x slower in bclasp. This gives me something I can test.
2:28:31
drmeister
I can slow down clisp's make-instance to a comparable degree and then compare how clisp+cleavir performs relative to bclasp+cleavir.
2:29:52
drmeister
I think it's fair to compare bclasp+cleavir to clisp+cleavir compilation performance.
2:30:48
karlosz
although you want to watch out and make sure you arent running clisp interpreted cleavir
2:34:51
karlosz
Bike: if you want to try the SSA, the ssa.lisp file is self contained. convert-ssa in that file will convert a closure converted hir properly.
2:36:37
drmeister
Clasp: 4.26 (MAKE-VGIBBLES :X 1 :Y 2 :Z 3) (DEFSTRUCT (VGIBBLES (:TYPE VECTOR) :NAMED) X Y Z)
2:36:53
drmeister
clisp: 6.73 (MAKE-VGIBBLES :X 1 :Y 2 :Z 3) (DEFSTRUCT (VGIBBLES (:TYPE VECTOR) :NAMED) X Y Z)
2:38:38
Bike
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/lsp/defstruct.lsp#L262-L269
2:40:37
Bike
well... that's a bit simpler https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/lsp/defstruct.lsp#L334
2:51:04
drmeister
7.25 (SETF (AREF *TARRAY2* 15) :TEST-SYMBOL) (DEFPARAMETER *TARRAY2* (MAKE-ARRAY 20 :ELEMENT-TYPE T))
5:05:54
drmeister
Some of the timing results were off a bit because of generic function discriminator compilation. I added a warm up stage to the micro-benchmarks that evaluates the form a few times before running the timing loop.