freenode/#clasp - IRC Chatlog
Search
16:09:13
drmeister
I'll backup one commit on my machine, check the timing and if it doesn't look too bad I'll proceed.
16:28:23
drmeister
Bike: I read series of tweets that says that one big difference between X86-64 and ARM processors is the memory ordering in multithreaded situations.
16:29:26
drmeister
Apple solved the problem by adding X86-64 memory ordering to their ARM hardware so they could switch to X86-64 ordering when emulating X86-64.
16:29:30
Bike
yeah x86-64 is strongly ordered iirc, so loads are automatically acquire and stores are automatically release
16:43:02
drmeister
If I want to find all derived classes of a builtin class - I have to walk the list of all builtin classes and crawl through their class-precedence-lists - right?
16:43:55
drmeister
We don't store the relationship between classes and their derived classes any other way - that would be cumbersome because in general it's a bunch of trees.
16:54:24
drmeister
Not in this case - we stick with single inheritance because C++ multiple inheritance and garbage collection is a nightmare.
16:57:04
drmeister
I think it's why Java doesn't support multiple inheritance. I think you get two of the three: tracing garbage collection, performance, multiple-inheritance.
17:05:14
drmeister
With old single dispatch generic functions - 4m30s - I don't usually see such reproducible timing.
17:05:30
beach
I think Java doesn't support multiple inheritance because at the time, it seemed to require two-level dispatch tables like C++ has.
17:18:24
beach
I also wonder whether the vtables of C++ are required by the standard. I hear about them often, which makes me think they are required, but I can't see why that would be the case.
17:23:46
beach
Anyway, I am not sticking around for possible information. I am off to fix dinner for my (admittedly small) family.
17:43:48
Bike
beach: no, vtables aren't required, they're just the usual strategy for C++. i found a paper comparing them in java with something pretty close to your clos method https://www.usenix.org/legacy/event/jvm02/full_papers/zendra/zendra_html/index.html
18:09:23
karlosz
one of the extensions noted is how we can split out unwind into a local unwind followed by a simple-unwind out of the function
18:10:38
karlosz
also thinking of making a new instruction called simple-unwind and just making it a separate pass so we don't need to reanalyze the same unwinds again and again
18:11:16
karlosz
im not an expert on clos but doesn't the change-class strategy cause some problems if people wanna subclass their own unwind?
18:12:56
karlosz
it doesn't really, but it's also not a big deal to make it a post pass, since it can run as late as possible without problem
18:13:13
Bike
i had simplicity as a slot before, which would be fine with subclassing, but switching to doing it this way doesn't obviously slow things down
18:13:26
karlosz
the main thing is that now that i've extended it to look through local functions recursively, its no longer a simple lookup
18:14:07
karlosz
but if there were 1000 unwinds to the same tag you'd have an issue since it doesn't scale nicely anymore with the recursive look through
19:15:41
karlosz
../../src/core/funcallableInstance.cc:353 Adding method to single dispatch method for function EXTEND receiver-class #S(BUILT-IN-CLASS CONS )
19:22:06
drmeister
I did - sorry - I'll take it out in a little while. I accidentally, prematurely pushed some changes to the master branch.
19:23:58
drmeister
I discovered that I don't populate the class-direct-subclasses slot of builtin classes when clasp boots up. I'm fixing that now. Once I have those I'll be able to satiate single dispatch generic functions quickly.
19:25:09
karlosz
Bike: i just pushed the change to IFI which makes it a little more like how things are in AST
19:25:38
karlosz
basically now there are conditional-test instructions like eq-test which must have ifi as its use. that way the backend can handle them specially
19:26:51
drmeister
Is there an equivalent of HIR graphs for BIR? I haven't seen you guys post anything since BIR was developed.
19:28:17
Bike
which i honestly prefer because it's a faster turnaround than going through dot, but i could put together something with graphviz too
19:28:48
Bike
https://github.com/clasp-developers/clasp/blob/master/src/lisp/kernel/cleavir/translate.lisp#L1131-L1136
19:31:07
Bike
that part is pretty much the same as in hir actually, except that in bir it's blocks that have them, not instructions directly
19:31:24
karlosz
Bike: could be good. with graphviz i think we could just splay the text onto the basic block structure like the way llvm ir does
19:34:56
karlosz
Bike: now that i'm looking at the case of (lambda (x) (if (not x) 1 2)) specifically, is there a reason why we inline the NOT on the ast level, but not fully inline it?
1:40:50
drmeister
::notify Bike I've made a mistake, satiation the way I imagined it does fully solve the dispatch problem. Instances of CL defined classes like STANDARD-GENERIC-FUNCTION have FUNCTION in their class precedence list - so the single-dispatch generic functions for FUNCTION have to handle instances of STANDARD-GENERIC-FUNCTION. It's not just C++ classes that have to respond. It looks like I'll have to put a mutex on
1:40:50
drmeister
these objects and update their call history like we do generic functions. A static dispatch table won't work.
1:43:16
drmeister
It looks like I can't avoid a mutex on the single dispatch generic functions.until we switch them to fastgf.