freenode/#clasp - IRC Chatlog
Search
16:32:29
Bike
drmeister: speaking of the condition printing stuff - if i do %a in bformat will that be like ~a?
17:46:59
drmeister
Bike: No - there is a short list of format specifiers that translate to C++ boost::format specifiers - I don't think ~a -> %a is one of them.
17:47:38
Bike
Just wondering if we could fix that thing where errors during build don't display correctly until you quit.
19:50:14
karlosz
is there a way to tell if there's a path between two instructions? following the directed edges
19:53:08
karlosz
apparently the catch instruction doesn't necessarily have to dominate all instructions before its two branches merge again
20:04:50
karlosz
is it still necessarily true that catch-instruction dominates everything that succeeds it?
20:09:54
karlosz
i mean like a case where you have some directed edge into a block succeeding catch but not itself dominated by catch
20:10:29
Bike
you need to have this catch close instruction at the point the block is no longer valid, right?
20:10:45
karlosz
im inserting catch close instruction at the predecessor dominated by the first successor of catch
20:11:00
karlosz
but thats not working for some convoluted cases, hence why i asked by using the weaker path condition instead
20:15:12
Bike
I mean, if you have like (block inner (return-from outer)) how does the inner block get closed?
20:15:13
karlosz
what i have works for the majority of non local exits. this is some voodoo coming from restart case
20:17:33
karlosz
right, this catch close is just for deallocating the block frame allocated onto the stack
23:51:41
drmeister
::notify karlosz Could you compile alexandria and time it? I'm dying to compare timing values between Clasp and your setup.
0:32:56
Colleen
karlosz: drmeister said 41 minutes, 15 seconds ago: Could you compile alexandria and time it? I'm dying to compare timing values between Clasp and your setup.
0:34:06
karlosz
caveat: this is with cleavir compiled with clisp. it shouldn't matter too much, but im unable to use cleavir entirely compiled with cleavir at the moment because it segfaults while self compiling somewhere in generate ast
0:37:44
karlosz
theres a lot of low hanging fruit on my end in terms of bringing the compile time down
0:38:12
karlosz
using a real basic block representation would shave a lot of linear lookups for successors
0:40:01
karlosz
in fact ill go ahead and implement that right now to see how much of a difference it makes...
1:09:48
karlosz
partially cleavir compiled cleavir and clisp compiled cleavir dont seem to differ much in terms of compile time
1:17:22
drmeister
karlosz: Could I get a copy of what you are running at some point to compare to clasp?
1:22:52
karlosz
into clisp and switching cleavir-clisp::*use-cleavir* on and compiling forms, if you actually want to run it
1:23:25
karlosz
to load alexandria you have to load it once with clisp to get the macros in and then (let ((sys::*load-compiling* t)) (asdf:load-system :alexandria :force t)) to compile it with cleavir
1:31:36
karlosz
you don't have to compile clisp yourself. i think a binary copy from whatever package manager works well enough
1:33:33
karlosz
but i need to load it once and then manually have asdf force compile it with cleavir
1:34:17
karlosz
make sure you load alexandria with clisp first -- some macros are declared in the same file they are used in alexandria
1:45:10
karlosz
the compiler is written in lisp, but it compiles to a bytecode stack virtual machine that is implemented with C
1:49:13
balrog
ugh, this box seems to hang when compiling large projects. might be time to replace it :|
2:36:16
karlosz
i was able to cut the time by more than 2/3rds just by switching to a better basic block representation
2:40:38
karlosz
drmeister: sorry to pull the rug right under you, but i just made cleavir compile things >3x faster
2:44:12
karlosz
there's an interpreter/compielr dichotomy in clisp, if thats what youre talking about
2:47:32
karlosz
but the drawback is it takes 30 minutes for sbcl to compile itself with that generated code
2:51:40
karlosz
anyway, i see promising results from this new block representation. do you think cleavir uses basic blocks enough to benefit?
2:53:19
karlosz
but if i keep track of each block's successors in the block itself it speeds things up
3:09:35
drmeister
I have to use (return-from whatever-function-im-in) to guarantee I'm returning from the current function - right?
3:09:55
drmeister
I'm going to short circuit the compiler and cut everything about LLVM out of the loop.
3:20:57
karlosz
oh great. its not the stack that overflows when self compiling now, its the heap that runs away, eating up all the ram i have
3:23:23
drmeister
I defined a special variable that causes the compiler to short circuit before it starts generating instructions and lowering it to native code.
3:25:07
drmeister
Maybe I screwed up the previous timing? It's kind of tricky to count all of the time spent in llvm.
3:31:55
drmeister
I set this special variable and COMPILE returns immediately in layout-basic-block and then returns immediately from everything that calls it.
3:42:43
Bike
first it means we should do some more comprehensive examination, because i thought this was the case before and you did some timing and hey it wasn't
3:46:29
drmeister
I'm thinking aloud now. I wrap (catch :dont-generate-code ...) around the body of COMPILE.
3:47:30
drmeister
And the first form in (defun translate (...) (when *dont-generate-code* (throw :dont-generate-llvm nil) ... ))
3:59:52
drmeister
I move the (when *dont-generate-code* (throw :dont-generate-llvm nil)) to after the call to (translate ...)
4:00:10
drmeister
(time (let ((clasp-cleavir::*dont-generate-code* nil)) (ccomp 1000))) --> 23.2 secs
4:05:28
drmeister
The time definitely keeps increasing each time I (time (ccomp 1000)) it increases by 2-3 seconds