freenode/#clasp - IRC Chatlog
Search
13:39:36
drmeister
This is the relevant part of the backtrace - generated with (core:safe-backtrace)
13:40:38
drmeister
This is something I thought we could never do - segfault - catch it - unwind - do it again.
13:41:26
drmeister
Dereferencing NULL is a pretty common way that I segfault because in C++ I sometimes use variables that I haven't set up yet.
13:45:25
Bike
i might be able to have it find the address that caused the problem as well, if that would help
13:47:41
drmeister
This is going to help tremendously with debugging once other people start hitting these.
13:48:15
drmeister
I should use (core:safe-backtrace) when we get a SEGMENTATION-VIOLATION in jupyter notebooks - then it would show the C++ functions as well.
13:51:10
davidlovemore
In one ARM JIT I worked on, we used to regularly BL (Branch and link) to 0 conditionally to generate an error as part of debugging. Brings back memories.
13:54:16
selwyn
drmeister: do your collaborators prefer to develop with jupyter notebooks over emacs?
13:54:43
davidlovemore
The address should be on the stack. You can definitely get at the registers after a fault. The MPS code does this. The return address should be in [rsp].
13:55:26
drmeister
selwyn: They will - yes. I also prefer it because I use it to interactively debug complex things like geometry optimization.
13:55:45
drmeister
selwyn: We connect a slime session into the jupyter notebook - so we get the best of both worlds.
13:56:07
Bike
well i was wondering if we could get the address in memory that was improperly accessed, like 0 in this case
14:03:10
Bike
"For some implementations, the value of si_addr may be inaccurate." good old standards.
14:05:41
drmeister
By implementation they mean operating system - right? Since we only support Linux, FreeBSD and macOS - maybe we will get lucky?
14:13:53
drmeister
I should be able to do this - right? (make-array 2 :element-type 'single-float :initial-contents #( 1.0d0 2.0d0))
14:14:20
drmeister
Initialize a single-float specialized vector with a simple vector of double-floats?
14:15:46
drmeister
No -apparently not. "Each leaf of the nested structure must be of the type given by element-type. "
14:22:39
drmeister
The compiler warnings we are getting now in slime are fantastic! Programming is very zippy.
14:28:56
davidlovemore
Bike: si_addr seems to work on intel linux. You can get at the regs via the u_context_t structure passed to the third argument of the sigaction callback.
14:30:26
Bike
yeah, i've looked at the context a bit. i'm not sure we need to do anything with them in the lisp debugger, though they might help with the float traps debacle
14:34:45
Bike
when we do floating point arithmetic in lisp we'd prefer to signal an error rather than get NaNs like the default. i tried to set it up (by setting the FPU to trap, which ends up as a SIGFPE) but i couldn't get it working consistently
14:36:19
davidlovemore
My guess is something somewhere is messing with the FPU configuration which you can kind of do on intel, so the behaviour might depend on what libraries might have been initialized or called recently.
14:37:18
Bike
ugh. that sounds even worse than i was dealing with. there's no standard way to access the float traps, was my first problem, so i was using intel intrinsics
14:37:34
Bike
and then i found that upon entrance to a signal handler the fpu register is reset, for some reason
14:38:55
davidlovemore
Yes, that makes sense. the fpu is put into a standardized state for the traps but as you indicate, looking at the registers might help you detect what state it was in when the trap happenned.
14:39:26
Bike
that wasn't my only problem, unfortunately, and i want to deal with specifics of mcontext and stuff as little as possible
14:42:45
Bike
plus i dug into the IEEE 754 stndard a bit and there are language independent operations for setting trap states, as far as i understood, so it's annoying that C doesn't provide anything
14:45:21
davidlovemore
But from an implementation point of view isn't it better to do a whole load of floating point and then if x!=x (true on NaN) repeat mre carefully. Traps are slow. Conditional branches that are rarely taken are pretty much instant.
14:47:20
Bike
i don't know what's faster. but we don't have an effective way to automatically group floating point computations together, and doing a check after every operation would probably be slow
14:50:38
Bike
Oh, yes, for the programmer I was intending to allow dynamic control of the fpu traps, and it wouldn't be hard to put specified checking on top of that
14:50:56
Bike
but our language standard specifies errors being signaled, so that's what i wanted to start with
14:52:30
Bike
I could get it working in the simple terminal REPL but not in our usual development environment. i wasn't sure why, but multithreading might be involved
14:53:57
davidlovemore
It could be you have to finsh handling one fault before you get another, but I am beginning to guess here.
14:56:47
Bike
but yes, that was another issue. i have it signaling lisp errors from signal handlers. the lisp error handler can then return control to somewhere up the stack. but that means we're kind of still in the signal handler, and posix doesn't really seem prepared for doing normal things in a signal handler
14:59:11
davidlovemore
That doesn't sound the right way to use signal handlers. But fiddling the machine state so you can continue is hard.
14:59:59
Bike
yeah, i wasn't sure of the best way to do it, but i don't have a lot of examples to go off of. as far as i could tell sbcl works like this, but i'm not totally sure about that
15:02:54
davidlovemore
An obvious way is for each instruction (or instruction region) that can fail is to have a location to jump to on an error. But how do you do that if setcontext fails. You would be better to conditionally jump.
16:16:46
drmeister
selwyn: Here's how I'm using the jupyter notebook to debug the algorithm that I'm implementing.
16:17:44
drmeister
That shows the animation of the optimization process that turns a molecule described as a network of atoms and bonds starting with random coordinates into a pleasing (to a chemist) flat cartoon of the molecule.
16:19:01
drmeister
Kevslinger: At the end of that animation you see the problem that I described yesterday. When I use the scroll mechanism on my mouse to make the molecule bigger and smaller - it also scrolls the jupyter notebook up and down at the same time. This is new behavior that showed up a couple of weeks ago. It's very annoying and hard to figure out where it is coming from.
16:19:50
drmeister
So I end up making the image larger (and scroll down) and then moving the mouse to the left where scrolling only moves the notebook up and go back and forth like that.
16:20:02
selwyn
does the cartoon correspond to the real-life geometric configuration of the molecule in any way? for example are the angles between the bonds
16:20:58
Kevslinger
I guess you could go into full-screen with the molecule, but that's pretty painful if you have to do it often
16:21:42
drmeister
selwyn: The cartoon corresponds more or less to how a chemist would sketch the molecule in a molecule sketching program. This image is rendered with tubes while a chemist would use simple lines and letters for non-carbon elements. But the layout is close to what a chemist would sketch.
16:24:28
selwyn
i am deciding between using the CLIM graphical inspector and jupyter notebooks for something similar for a new project
16:57:18
drmeister
I don't know - it's some molecule that I'm using as a test case. This one isn't one that we make.
17:00:15
selwyn
so.. are you optimising over time the value of a cost function which measures how regular the rendition of the molecule looks on the screen?
18:32:40
Kevslinger
So xeus-python isn't compatible with nglview at the moment because of dependency issues. I think xeus-python is using an outdated IPython (or nglview is), but I'm not sure. Been trying to dig through it
19:59:15
drmeister
selwyn: I learned some new optimization techniques implementing this algorithm. It simulates the motions of the atoms by calculating the forces on each atom and integrating Newton's laws of motion. It has a collection of "correction terms" that give the force a kick in an appropriate direction when the shape of the molecule goes wrong in some way.
20:30:14
scymtym
selwyn: are you aware that the McCLIM inspector has been rewritten and is much better now?