freenode/#clasp - IRC Chatlog
Search
14:47:00
drmeister
The graph representation of molecules is nicely handled by Common Lisp and automatic memory management.
14:49:17
Bike
«A “raw” slot is one whose declared type is a subtype of exactly one of: double-float, single-float, (complex double-float), (complex single-float), or sb-ext:word; but as an exception to the preceding, any subtype of fixnum is not stored as raw despite also being a subtype of sb-ext:word. »
15:09:34
drmeister
It's probably less trouble to leave fixnums as they are because of the way they are tagged.
15:10:09
drmeister
SBCL and Clasp use the same tagging for fixnums, we use 0 in the low bits. So there are several math operations that you can do without shifting.
15:12:05
aeth
drmeister: I understand leaving fixnums as they are, but unless it's declared as a sb-ext:word (which seems to be larger than a positive fixnum and only positive?) it looks like it's not optimized, so no e.g. (unsigned-byte 32) or (unsigned-byte 8)
15:12:39
drmeister
In sbcl you have structs with raw data types in slots but fixnums are left as they are - is that true?
15:14:10
drmeister
If so - why are fixnums left as they are and not shifted and stored as regular machine integers.
15:17:11
drmeister
Thinking - if you do integer division between two fixnums - then you need to shift the fixnums right first or shift the result left to turn the result into a fixnum.
15:18:21
drmeister
I'm getting deeper into the idea than I wanted. Feel free to leave this conversation on the floor.
15:19:31
stassats
it's a fixnum, it doesn't need any special treatment for slots/array elements, unlike word/sword
15:23:32
stassats
if you do some math you'll have to untag, but on the other hand you won't have to tag if you don't need to
15:29:12
drmeister
When I said packed above I should have said "structs containing memory adjacent, unboxed values".
15:30:36
drmeister
I'm doing a lot of arithmetic where I iterate and load 6 to 12 values out of a position vector (vector of doubles) and then operate on them using parameters (doubles) pulled out of a vector of structs.
15:34:19
drmeister
The NONBONDRB_xxx are C++ macros that read and write doubles into structs and vectors
15:34:42
drmeister
That code was generated by a program I wrote in Mathematica that does automatic differentiation.
15:35:14
drmeister
Uh - automatic differentiation and then optimization of the resulting expressions into reasonable C code.
15:40:10
drmeister
I needed one that would generate C code in the form that I needed it. I didn't spend a lot of time looking for other code that could do exactly what I wanted.
15:41:01
drmeister
I wouldn't be surprised if it's even older than that. It was one of the first parts of Cando that I wrote.
15:42:06
drmeister
https://github.com/cando-developers/cando/blob/master/src/mathematica/amber_energy_force_hessian.nb#L6
15:46:26
drmeister
So - you raise an excellent point. It may be a good idea to reevaluate the automatic differentiation approach that we use.
15:46:54
drmeister
If I can generate code that can be plugged into my geometry optimization code - I would be very interested in that.
15:47:13
drmeister
Also, I hate Mathematica because I can never get the damn license manager to work when I need it.
15:47:18
Bike
i kind of imagine power user options letting the programmer lay out pretty explicitly how things are laid out in arrays
15:49:46
drmeister
efm: The code that I linked to - that directory that contains it contains the Mathematica code generator for the dozen or so functions that I carry out automatic differentiation on.
15:50:53
drmeister
I calculate the first and second derivatives and generate C code that evaluates the expression and then first and second analytical derivatives and branches out if only say the function and the first derivative are needed.
15:51:30
drmeister
The second derivative is important because I implement a truncated Newton Raphson algorithm - one of the bigger free lunches in optimization theory.
15:52:49
drmeister
I'm actually debugging it today because I'm seeing occasional long bonds - and that indicates there is a problem somewhere.
15:55:37
drmeister
efm: I'd like to introduce you to Michael Yonkunas - he is our computational chemist.
15:56:35
yonkunas
Most of "us" meaning comp chem types use a machine with at least one GPU. I think this addition would be welcome during generation times.
15:57:44
efm
I'll poke at getting a single one of those expressions into Enoki on GPU. It's not my strong suit, but I might be able to figure it out.
15:58:33
yonkunas
stassats: yes of course. What I mean is that a bench chemist, a key demographic CANDO would like to target, may not have access to a GPU unless they are invested in these types of things.
16:00:00
yonkunas
efm: this is something I am interested inn and would eliminate a CANDO dependency to boot. If you want to work together I am up for it.
16:05:08
drmeister
I don't have it running at the moment. I'm on a loaner macbook Air while my macbook Pro with all my development software is going back to Apple to be repaired again (second time in two weeks).
16:35:18
Bike
replaced the set implementation with a deterministic one and now i can deterministically never produce the problem
17:47:13
drmeister
Do we need the set implementation? Is there a big speed difference? Can the deterministic one every give the wrong answer deterministicly?
18:09:01
drmeister
Yeah - any print statements I put into the code made the problem vanish - "poof".