EnzymeAD / Enzyme

High-performance automatic differentiation of LLVM and MLIR.

Home Page:https://enzyme.mit.edu

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Correctness Issue 1 with Kalman Filter

gaurav-arya opened this issue · comments

The enzyme gradient seems to be proportional to the correct one:

not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
not handling more than 6 pointer lookups deep dt:{[-1]:Pointer, [0,-1]:Anything, [8,-1]:Pointer, [8,8,-1]:Anything, [8,16,-1]:Pointer, [8,16,8,-1]:Anything, [8,16,16,0]:Pointer, [8,16,16,8]:Pointer, [8,16,16,8,-1]:Anything, [8,16,16,16]:Anything, [8,16,16,17]:Anything, [8,16,16,18]:Anything, [8,16,16,19]:Anything, [8,16,16,20]:Anything, [8,16,16,21]:Anything, [8,16,16,22]:Anything, [8,16,16,23]:Anything, [8,16,16,24]:Pointer, [8,16,16,24,-1]:Pointer, [8,16,16,24,8,-1]:Anything, [8,16,16,32]:Anything, [8,16,16,33]:Anything, [8,16,16,34]:Anything, [8,16,16,35]:Anything, [8,16,16,36]:Anything, [8,16,16,37]:Anything, [8,16,16,38]:Anything, [8,16,16,39]:Anything} only(-1): 
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
freeing without malloc ptr %0
f(A) = 48.001035, f(A + delta) = 48.267872, f'(A)[0] fd = 266.837353
f(A) = 48.001035, f(A + delta2) = 48.001301, f'(A)[0] fd = 266.285760
f(A) = 48.001035, f(A + delta) = 48.212941, f'(A)[1] fd = 211.906350
f(A) = 48.001035, f(A + delta) = 48.212941, f'(A)[2] fd = 211.906350
f(A) = 48.001035, f(A + delta) = 48.001035, f'(A)[10] fd = 0.000000
Adup[0] = 316.808103, Adup[1] = 252.806723, Adup[2] = 252.806723, Adup[10] = 0.000000

To reproduce: run cmake on ZuseZ4/kalman@0dc936d and then execute example_robot1

It won't be too much work to inline the whole example into one file. So if this example needs minimization, I would be happy to do that inlining. Also note that correctness issue 2 (#1504) is more directly blocking and has a dgemm warning that could make it easier to debug.

With #1501 this example now segfaults rather than giving incorrect gradients