freenode/#clasp - IRC Chatlog
Search
14:46:27
drmeister
The basic function of Cando is to take easy to work with graph representations of molecules and chemical systems and converts them into vectors of packed structures of numbers for efficient calculation.
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".