freenode/#clasp - IRC Chatlog
Search
15:37:33
Bike
hm hm, some optimizations for princ-to-string and friends might be good. in clasp compilation we do a lot of (write-to-string (cleavir-ir:name datum) ...), and if i define a specific function for write-to-string to do when it gets a symbol, that just copies the symbol name, it's 25x faster than the with-output-to-string biznis
15:37:57
Bike
sbcl does it for integers, but the math is a little tricky and clasp isn't good at math anyway
15:41:38
Bike
drmeister: also, you added the write-to-string optimization where it reuses a stream back, right? because the output column thing was fixed? any reason we can't do that for princ-to-string and such?
15:43:11
beach
drmeister: I will be very careful with what I support, but I am willing to make it easy for implementations to do that kind of stuff, provided it is not to hard to do.
15:47:37
Bike
the underlying problem was an issue with read-line, which is why i was messing with it last week.
15:53:01
drmeister
I'm getting cando/slime crashing when I ,restart - that's new - is anyone else seeing that?
15:55:44
drmeister
../../src/main/main.cc:260 There was an unhandled std::exception in process [pid: 88961] e.what()=[std::exception] - do something about it.
16:16:34
Bike
this can probably still be faster if i make a C++ function to apply print-case to a string and return a new string of the same length. we already have that, except it writes to a stream, so shouldn't be anything bad
16:52:33
Bike
i redefined write-to-string to bind a bunch of special variables and then call a function "stringify", and now stringify is over twice as fast as write-to-string with no arguments
16:52:44
Bike
so at least in this instance, binding special variables actually does notably slow things down. that's interesting
16:53:53
Bike
anyway, imma put in a compiler macro so it only binds what it needs to, that ought to help
17:47:01
Bike
something i did resulted in big numbers printing apparently randomly during build. doesn't actually break anything. ooookay
18:01:17
jakewalsh
I'm here! Sorry for being a bit incommunicado - I've spent a lot of today reading membrane papers Yihui sent me
18:02:04
jakewalsh
I was able to build clasp on my own machine but haven't really started working with it
19:14:13
Bike
if i have a SimpleString_sp and i want to access it, do i really have to use cl__char and stuff? compiler says SimpleString_O doesn't provide operator[]
19:31:53
Bike
ok, turns out if i just write this in lisp it's still faster than doing write to string
20:16:11
jakewalsh
drmeister: how should I get started looking into the various llvm pass optimizations?
20:21:15
Bike
if you run `opt -O3 -print-after-all -o=thing-after-O3.ll thing.ll` it'll show you the effect of every single pass. might want to `2>wherever` to put it in a file. you can get an ll from lisp by compile-file-ing anything and running llvm-dis on the resulting bc file.
20:21:32
Bike
https://llvm.org/docs/Passes.html the list of passes is here, but obviously there's not a lot of description
20:21:48
Bike
i don't know if you're familiar with lisp at all, but i can show you that sort of stuff if you need it
20:23:46
jakewalsh
Bike: thanks! I've started reading/working through Practical Common Lisp but I'm definitely still a novice in the language
20:24:53
Bike
you have some experience programming, right? i don't suppose you've ever looked into the murky abyss of compiler internals before?
20:27:42
jakewalsh
yeah, I have some experience in python and C - I've taken a standard undergrad computer systems (the standard one everyone rips from CMU - caches, shells, malloc, x86 assembly, etc) but that's the extent of my lower-level knowledge
20:28:43
pfdietz
"Obscure, profound it was, and nebulous, So that by fixing on its depths my sight -- Nothing whatever I discerned therein." -- Dante on compiler internals
20:30:03
Bike
for now i guess you should learn lisp and llvm-ir. for the latter, what i'd say you should do is write some basic (like very small) C programs, and look at the llvm-ir for them, then crossref with https://llvm.org/docs/LangRef.html until it makes sense
20:31:16
Bike
if you have clang installed you can get llvm-ir by doing `clang file.c -S -emit-llvm -o wherever.ll`