freenode/#clasp - IRC Chatlog
Search
4:36:02
drmeister
You commented out inline.lisp and you could build cclasp - but asdf had a problem.
4:37:46
Bike
i don't really have a concept for what the problem could be. it's pretty rare to be able to build the whole of clasp and then hit a problem just with asdf
4:40:31
drmeister
It's happened to me several times. I have often built clasp and then failed when building or running one of those. Not for the reason you are seeing.
4:42:49
drmeister
I'm worried that it is the inlining criterion. This inlines local functions - could it be a recursive labels function?
11:18:29
kpoeck
Drmeister: I would like to fix interpret_token_or_throw_reader_error to allow all possible float-types in _STARreadDefaultFloatFormatSTAR
11:23:12
kpoeck
Am now compiling under the assumption that I can read both a DoubleFloat and a Long with strtod
11:24:18
drmeister
No DoubleFloat and LongFloat are the same. I've toyed with the idea of using the GMP infinite precision float for long-float.
11:24:55
kpoeck
Still puzzled with SingleFloat is read with strod, since clasp_make_single_float is defined to accept a float and is passed a double
11:25:46
drmeister
ShortFloat and SingleFloat are also confused - SingleFloat is a tagged C 'float'. I think (but I may have forgotten) ShortFloat is still managed by the GC.
11:29:45
drmeister
Yes. SingleFloat values are not stored on the heap at all - they are coded into the tagged pointer itself. Like fixnum or character.
11:30:15
drmeister
They are shifted a few bits, have tag written into the lower three bits and that's how they are represented.
11:31:38
drmeister
They could be aliased to SingleFloat's... Are there any other ideas of what to do with them?
11:32:18
drmeister
What about LongFloat - I'd like to implement them with GMP arbitrary precision floats.
11:33:55
kpoeck
In ccl, for number crunching I used short-floats instead of single-float, since they would not cons
11:33:58
drmeister
kpoeck: Right - I did that with that in mind - I didn't tidy up ShortFloat and LongFloat because I didn't know what to do with them at the time. So I just left them.
11:36:21
drmeister
Cleavir has a way of doing a lot of math without boxing/unboxing operations that I am looking forward to using.
11:39:32
kpoeck
So I just extend interpret_token_or_throw_reader_error for short-float and long-float (testing right now)
11:40:31
kpoeck
On a different matter, could you perhaps test whether issue #531 also crashes your clasp?
11:42:43
heisig
drmeister: Currently, with the whole machine learning hype, 16bit half-floats have become fashionable again. So that could be a use case for ShortFloat_O.
11:50:58
kpoeck
Meanwhile running ansi-tests with the extended interpret_token_or_throw_reader_error
12:14:56
drmeister
heisig: What do you think about arbitrary precision float's - would it be a good idea to expose them as long-float?
12:35:12
heisig
Bike: This is wikipedia on 16bit floats: https://en.wikipedia.org/wiki/Bfloat16_floating-point_format
12:36:17
Shinmera
"The bfloat16 format is utilized in upcoming Intel AI processors, such as Nervana NNP-L1000, Xeon processors, and Intel FPGAs,[1][2][3] Google Cloud TPUs,[4][5][6] and Tensorflow.[6][7]"
12:36:58
heisig
drmeister: Arbitrary precision long-floats sound like a great idea. I know applications where this would be extremely useful.
12:38:33
drmeister
Ok then. short-float will be 16bit floats - I'll need to tweak the tagging scheme. long-float's will be arbitrary precision floats
12:43:21
drmeister
That is correct - single-floats do not cons - they are stored in tagged pointers.
12:46:32
drmeister
I was going to use them as pointers into aligned C++ memory - but that never panned out. Actually, I'll wait until Martin comes on board - he may have some use for another kind of tagged immediate.
12:47:15
stassats`
i think the only thing clasp will benefit from with 16 bit floats is reduced storage
12:48:09
stassats`
otherwise you'll need clasp to run on these TPUs or support SIMD or wherever these floats are used
12:48:40
drmeister
Well, there is interoperability with C++ machine learning libraries if we need to pass 16bit floats back and forth. Interoperability - as you mentioned above.
12:57:59
drmeister
What's up with a language-server-protocol server for Common Lisp? Does anyone use one?
13:00:02
drmeister
jupyterlab appears to be going in that direction - to use language server protocol.
13:00:44
drmeister
ACTION is rummaging around inside of jupyterlab discussion groups and github issue trackers
13:05:10
attila_lendvai
hi! I could use some insights/pointers... so, iclasp is a CL interpreter written in C++. aclasp is iclasp loading a bunch of files implementing a minimal CL system. what I don't understand is that compile-aclasp seems to be actually compiling stuff. how is that happening? what kind of compilation can iclasp do?
13:06:47
Bike
iclasp is the C++ interpreter. then it loads a bunch of files including a compiler, and compiles itself
13:09:31
drmeister
attila_lendvai: If you start from ./waf distclean configure build_iboehm <-- it builds the C++ interpreter iclasp-boehm
13:10:31
drmeister
Then you can use ./waf build_rboehm <-- This loads the C++ interpreter and has it load the aclasp Common Lisp source code as interpreted code - absolutely no Common Lisp compilation happens up to this point.
13:11:09
drmeister
stassats`: You got me: ./waf distclean configure build_iboehm <-- it builds the C++ interpreter of a subset of Common Lisp programming language: iclasp-boehm
13:12:22
drmeister
So: ./waf build_rboehm puts you in a REPL that loaded the aclasp/bclasp Common Lisp compiler as interpreted code. At this point you can compile-file a subset of Common Lisp code.
13:14:10
drmeister
./waf build_aboehm loads the same Common Lisp source files as interpreted functions and then runs 'compile-file' on all of the Common Lisp source files that ./waf build_rboehm and ./waf build_aboehm load.
13:16:07
drmeister
./waf build_aboehm then links the compile-file'd code into a fasl called clasp/build/boehm/fasl/aclasp-boehm-image.fasl <--- Run with this and you get what you get when you run ./waf build_rboehm but everything is compiled. It provides a subset of Common Lisp and can further be used to compile a complete Common Lisp: 'bclasp'
13:17:52
drmeister
The reason for all of this is that the interpreter written in C++ is an S-expression walking interpreter and it expands macros whenever they are encountered during evaluation. This is really, really slow when you start hitting a lot of macros as in loop and CLOS.
13:35:14
drmeister
As ./waf build_aclasp compile-file's it's own code - it LOAD's the fasl files. This replaces interpreted functions with compiled ones as they are generated. This happens in both serial and parallel build. The code is set up to be tolerant to hot-swapping interpreted code with compiled versions in any order.
13:35:58
attila_lendvai
and aclasp is compile-file'ing how? aclasp is already capable of calling the LLVM machinery at runtime?
13:36:28
drmeister
Yes - everything stage of Clasp building has full access to all of the llvm machinery.
13:37:30
drmeister
If you go iclasp-boehm -I -n (loads absolutely no CL code, either interpreted or compiled).
13:38:43
drmeister
You get a repl and a very restricted subset of the Common Lisp language - but everything that is exposed from C++ is exposed here.
13:41:50
drmeister
Its better to build aclasp with fewer parallel processes than more - because more of the code can then take advantage of the compiled fasls that replaced the interpreted code. I think I currently limit aclasp compilation to 8 parallel processes. I haven't timed it carefully.
13:42:54
attila_lendvai
FTR, it'll be here: https://github.com/clasp-developers/clasp/wiki/The-Build-Process/
13:43:50
attila_lendvai
there's docs/bootstrap.rst. maybe I'll extend that and point to it from the wiki. I'll think about it
13:58:35
attila_lendvai
registerClasses.py and src/common/build is obsoleted by the CL scraper that is run by sbcl and wscript, right? I'll delete anything in the codebase and docs related to it. let me know if that's not desirable!
14:00:08
attila_lendvai
or is the python groveler in a good enough state that it's worth keeping it in some tools-for-build/obsolete/ directory?
14:01:23
drmeister
Working backwards. The python groveler can be gently lowered into a grave and buried. It is dead.
14:03:07
attila_lendvai
drmeister: in the docs, and some of its output can be found checked into the repo (by rgrep registerClasses .)
14:07:18
attila_lendvai
drmeister: but I welcome your impulses for cleaning the codebase! it's very nice for the newcomers, thanks! :)
14:08:34
drmeister
It's probably better to do it slowly and methodically. I don't instantly recognize what is being used and what is not.
14:12:45
attila_lendvai
drmeister: I have the following left in src/common. let me know if any of those should also get "gently lowered into a grave"... :) analyzeLldbBacktrace.py build-json.lisp buildJSON.py copywrite.lsp metering-allocations.lisp peakMemory.cc
14:20:38
attila_lendvai
drmeister: I assume analyzeLldbBacktrace.py can also be disappeared. I moved the rest that seemed useful to tools/ and I'll delete src/common/
14:23:57
drmeister
Actually, can you move analyzeLldbBacktrace.py to tools? I have used that to analyze the size of stack frames to figure out if there are functions that allocate too much on the stack.
14:30:29
attila_lendvai
I've pushed it. let me know if I happened to delete anything that you want restored: https://github.com/clasp-developers/clasp/commit/61e2b47c0299baaf89e24c08b1b4a7159a860c64
15:02:37
karlosz
beach: its not explicitly written in the docs, but we are assuming that for phi functions, the order of the predecessors have to match the order of the inputs, right?
15:03:03
karlosz
some code you wrote seems to assume that, and otherwise we have to do the dominator calculations over and over again to find the corresponding input for each predecessor
15:03:33
karlosz
but things like delete-instruction shuffle the order of the predecessors, like if you deleted the first phi of a cluster
15:04:02
beach
Yes, but that is also the reason why I strongly dislike SSA. It imposes such an order whereas the flow graph itself does not. It ruins everything.
15:04:48
beach
And, you are right, I did not take predecessor order into account when I wrote the code to modify the graph.
15:06:17
karlosz
maybe phi instructions can have a mapping between inputs and predecessors as an extra slot?
15:06:47
beach
I especially dislike SSA because I am convinced (but I have yet to do the research) that basically none of the optimization techniques that claim to need SSA takes advantage of the fact that SSA is really S.S.A.
15:08:38
karlosz
beach: https://en.wikipedia.org/wiki/Sparse_conditional_constant_propagation this is the algorithm that i jjust implemented that requires SSA
15:09:04
karlosz
it runs in linear time with SSA, and i think itd be very diffciult to write without assuming definitions are unique and dominate uses
15:09:34
karlosz
the effects are folding something like https://paste.gnome.org/pp2hrvkia to just values 4 4 1 2 3 4
15:11:09
beach
Like SSA, but put an assignment in each incoming arc of what use to be the Phi instruction.
15:11:37
beach
All I am saying is that SSA ruins everything, and no algorithm I know take advantage of the fact that SSA is S.S.A.
15:12:48
beach
karlosz: But I have yet to do the research like I said. It would be a beautiful result though.
15:13:12
karlosz
i do the transformation you are talking aboutl. to actually implement the phi functions, i convert the phi to assignmnet instruction along each arc before lowering to code
15:13:40
karlosz
its standard though, and still considered SSA in the leiterature, because those phi functions still have to be implemented somehow