Differentiating Gridap code
Gridap is a great example of code that can only be differentiated by Enzyme. The following is a snippet that can be used as a test case. It currently fails. This isn't minimal at all but it would be great to understand why it's failing:
using Pkg
Pkg.add("https://github.com/JuliaTopOpt/TopOptGridap.jl")
using TopOptGridap, Enzyme
f, x = TopOptGridap.get_domain()
g = x -> sum(f(x))
# Enzyme.gradient(Enzyme.ForwardMode(), g, x)
dx = similar(x)
Enzyme.gradient!(Enzyme.ReverseMode(), dx, g, x)
Can you post how it is failing, and also try on latest main (and if so, what commit)
I tried the latest main branch today. For forward mode, I get a segfault after printing a wall of text starting with
not handling more than 6 pointer lookups deep dt:{[]:Pointer, [0,0]:Float@double, [0,8]:Float@double, [0,16]:Float@double, [0,24]:Float@double, [0,32]:Integer, [0,33]:Integer, [0,34]:Integer, [0,35]:Integer, [0,36]:Integer, [0,37]:Integer, [0,38]:Integer, [0,39]:Integer, [0,40]:Integer, [0,41]:Integer, [0,42]:Integer, [0,43]:Integer, [0,44]:Integer, [0,45]:Integer, [0,46]:Integer, [0,47]:Integer, [0,48]:Integer, [0,49]:Integer, [0,56]:Integer, [0,57]:Integer, [0,58]:Integer, [0,59]:Integer, [0,60]:Integer, [0,61]:Integer, [0,62]:Integer, [0,63]:Integer, [0,64]:Integer, [0,65]:Integer, [0,66]:Integer, [0,67]:Integer, [0,68]:Integer, [0,69]:Integer, [0,70]:Integer, [0,71]:Integer, [0,72]:Integer, [0,80]:Integer, [0,81]:Integer, [0,82]:Integer, [0,83]:Integer, [0,84]:Integer, [0,85]:Integer, [0,86]:Integer, [0,87]:Integer, [0,88]:Pointer, [0,88,0]:Pointer, [0,88,0,0]:Float@double, [0,88,0,8]:Float@double, [0,88,8]:Integer, [0,88,9]:Integer, [0,88,10]:Integer, [0,88,11]:Integer, [0,88,12]:Integer, [0,88,13]:Integer, [0,88,14]:Integer, [0,88,15]:Integer, [0,88,16]:Integer, [0,88,17]:Integer, [0,88,18]:Integer, [0,88,19]:Integer, [0,88,20]:Integer, [0,88,21]:Integer, [0,88,22]:Integer, [0,88,23]:Integer, [0,88,24]:Integer, [0,88,25]:Integer, [0,88,26]:Integer, [0,88,27]:Integer, [0,88,28]:Integer, [0,88,29]:Integer, [0,88,30]:Integer, [0,88,31]:Integer, [0,88,32]:Integer, [0,88,33]:Integer, [0,88,34]:Integer, [0,88,35]:Integer, [0,88,36]:Integer, [0,88,37]:Integer, [0,88,38]:Integer, [0,88,39]:Integer, [0,88,40]:Integer, [0,96]:Pointer, [0,96,0]:Pointer, [0,96,0,0]:Pointer, [0,96,0,0,0]:Pointer, [0,96,0,0,0,0]:Integer, [0,96,0,0,0,1]:Integer, [0,96,0,0,0,2]:Integer, [0,96,0,0,0,3]:Integer, [0,96,0,0,8]:Integer, [0,96,0,0,9]:Integer, [0,96,0,0,10]:Integer, [0,96,0,0,11]:Integer, [0,96,0,0,12]:Integer, [0,96,0,0,13]:Integer, [0,96,0,0,14]:Integer, [0,96,0,0,15]:Integer, [0,96,0,0,16]:Integer, [0,96,0,0,17]:Integer, [0,96,0,0,18]:Integer, [0,96,0,0,19]:Integer, [0,96,0,0,20]:Integer, [0,96,0,0,21]:Integer, [0,96,0,0,22]:Integer, [0,96,0,0,23]:Integer, [0,96,0,0,24]:Integer, [0,96,0,0,25]:Integer, [0,96,0,0,26]:Integer, [0,96,0,0,27]:Integer, [0,96,0,0,28]:Integer, [0,96,0,0,29]:Integer, [0,96,0,0,30]:Integer, [0,96,0,0,31]:Integer, [0,96,0,0,32]:Integer, [0,96,0,0,33]:Integer, [0,96,0,0,34]:Integer, [0,96,0,0,35]:Integer, [0,96,0,0,36]:Integer, [0,96,0,0,37]:Integer, [0,96,0,0,38]:Integer, [0,96,0,0,39]:Integer, [0,96,0,0,40]:Integer, [0,96,0,8]:Pointer, [0,96,0,8,0]:Pointer, [0,96,0,8,0,0]:Integer, [0,96,0,8,0,1]:Integer, [0,96,0,8,0,2]:Integer, [0,96,0,8,0,3]:Integer, [0,96,0,8,8]:Integer, [0,96,0,8,9]:Integer, [0,96,0,8,10]:Integer, [0,96,0,8,11]:Integer, [0,96,0,8,12]:Integer, [0,96,0,8,13]:Integer, [0,96,0,8,14]:Integer, [0,96,0,8,15]:Integer, [0,96,0,8,16]:Integer, [0,96,0,8,17]:Integer, [0,96,0,8,18]:Integer, [0,96,0,8,19]:Integer, [0,96,0,8,20]:Integer, [0,96,0,8,21]:Integer, [0,96,0,8,22]:Integer, [0,96,0,8,23]:Integer, [0,96,0,8,24]:Integer, [0,96,0,8,25]:Integer, [0,96,0,8,26]:Integer, [0,96,0,8,27]:Integer, [0,96,0,8,28]:Integer, [0,96,0,8,29]:Integer, [0,96,0,8,30]:Integer, [0,96,0,8,31]:Integer, [0,96,0,8,32]:Integer, [0,96,0,8,33]:Integer, [0,96,0,8,34]:Integer, [0,96,0,8,35]:Integer, [0,96,0,8,36]:Integer, [0,96,0,8,37]:Integer, [0,96,0,8,38]:Integer, [0,96,0,8,39]:Integer, [0,96,0,8,40]:Integer, [0,96,8]:Integer, [0,96,9]:Integer, [0,96,10]:Integer, [0,96,11]:Integer, [0,96,12]:Integer, [0,96,13]:Integer, [0,96,14]:Integer, [0,96,15]:Integer, [0,96,16]:Integer, [0,96,17]:Integer, [0,96,18]:Integer, [0,96,19]:Integer, [0,96,20]:Integer, [0,96,21]:Integer, [0,96,22]:Integer, [0,96,23]:Integer, [0,96,24]:Integer, [0,96,25]:Integer, [0,96,26]:Integer, [0,96,27]:Integer, [0,96,28]:Integer, [0,96,29]:Integer, [0,96,30]:Integer, [0,96,31]:Integer, [0,96,32]:Integer, [0,96,33]:Integer, [0,96,34]:Integer, [0,96,35]:Integer, [0,96,36]:Integer, [0,96,37]:Integer, [0,96,38]:Integer, [0,96,39]:Integer, [0,96,40]:Integer, [0,104]:Pointer, [0,104,0]:Pointer, [0,104,0,0]:Integer, [0,104,8]:Integer, [0,104,9]:Integer, [0,104,10]:Integer, [0,104,11]:Integer, [0,104,12]:Integer, [0,104,13]:Integer, [0,104,14]:Integer, [0,104,15]:Integer, [0,104,16]:Integer, [0,104,17]:Integer, [0,104,18]:Integer, [0,104,19]:Integer, [0,104,20]:Integer, [0,104,21]:Integer, [0,104,22]:Integer, [0,104,23]:Integer, [0,104,24]:Integer, [0,104,25]:Integer, [0,104,26]:Integer, [0,104,27]:Integer, [0,104,28]:Integer, [0,104,29]:Integer, [0,104,30]:Integer, [0,104,31]:Integer, [0,104,32]:Integer, [0,104,33]:Integer, [0,104,34]:Integer, [0,104,35]:Integer, [0,104,36]:Integer, [0,104,37]:Integer, [0,104,38]:Integer, [0,104,39]:Integer, [0,104,40]:Integer, [0,112]:Pointer, [0,112,0]:Pointer, [0,112,0,0]:Pointer, [0,112,8]:Integer, [0,112,9]:Integer, [0,112,10]:Integer, [0,112,11]:Integer, [0,112,12]:Integer, [0,112,13]:Integer, [0,112,14]:Integer, [0,112,15]:Integer, [0,112,16]:Integer, [0,112,17]:Integer, [0,112,18]:Integer, [0,112,19]:Integer, [0,112,20]:Integer, [0,112,21]:Integer, [0,112,22]:Integer, [0,112,23]:Integer, [0,112,24]:Integer, [0,112,25]:Integer, [0,112,26]:Integer, [0,112,27]:Integer, [0,112,28]:Integer, [0,112,29]:Integer, [0,112,30]:Integer, [0,112,31]:Integer, [0,112,32]:Integer, [0,112,33]:Integer, [0,112,34]:Integer, [0,112,35]:Integer, [0,112,36]:Integer, [0,112,37]:Integer, [0,112,38]:Integer, [0,112,39]:Integer, [0,112,40]:Integer, [0,120]:Pointer, [0,120,0]:Pointer, [0,120,0,0]:Pointer, [0,120,0,0,0]:Pointer, [0,120,0,0,0,0]:Integer, [0,120,0,0,0,1]:Integer, [0,120,0,0,0,2]:Integer, [0,120,0,0,0,3]:Integer, [0,120,0,0,8]:Integer, [0,120,0,0,9]:Integer, [0,120,0,0,10]:Integer, [0,120,0,0,11]:Integer, [0,120,0,0,12]:Integer, [0,120,0,0,13]:Integer, [0,120,0,0,14]:Integer, [0,120,0,0,15]:Integer, [0,120,0,0,16]:Integer, [0,120,0,0,17]:Integer, [0,120,0,0,18]:Integer, [0,120,0,0,19]:Integer, [0,120,0,0,20]:Integer, [0,120,0,0,21]:Integer, [0,120,0,0,22]:Integer, [0,120,0,0,23]:Integer, [0,120,0,0,24]:Integer, [0,120,0,0,25]:Integer, [0,120,0,0,26]:Integer, [0,120,0,0,27]:Integer, [0,120,0,0,28]:Integer, [0,120,0,0,29]:Integer, [0,120,0,0,30]:Integer, [0,120,0,0,31]:Integer, [0,120,0,0,32]:Integer, [0,120,0,0,33]:Integer, [0,120,0,0,34]:Integer, [0,120,0,0,35]:Integer, [0,120,0,0,36]:Integer, [0,120,0,0,37]:Integer, [0,120,0,0,38]:Integer, [0,120,0,0,39]:Integer, [0,120,0,0,40]:Integer, [0,120,8]:Integer, [0,120,9]:Integer, [0,120,10]:Integer, [0,120,11]:Integer, [0,120,12]:Integer, [0,120,13]:Integer, [0,120,14]:Integer, [0,120,15]:Integer, [0,120,16]:Integer, [0,120,17]:Integer, [0,120,18]:Integer, [0,120,19]:Integer, [0,120,20]:Integer, [0,120,21]:Integer, [0,120,22]:Integer, [0,120,23]:Integer, [0,120,24]:Integer, [0,120,25]:Integer, [0,120,26]:Integer, [0,120,27]:Integer, [0,120,28]:Integer, [0,120,29]:Integer, [0,120,30]:Integer, [0,120,31]:Integer, [0,120,32]:Integer, [0,120,33]:Integer, [0,120,34]:Integer, [0,120,35]:Integer, [0,120,36]:Integer, [0,120,37]:Integer, [0,120,38]:Integer, [0,120,39]:Integer, [0,120,40]:Integer, [0,128]:Pointer, [0,128,0]:Pointer, [0,128,0,0]:Pointer, [0,128,0,0,0]:Pointer, [0,128,0,0,0,0]:Integer, [0,128,0,0,0,1]:Integer, [0,128,0,0,0,2]:Integer, [0,128,0,0,0,3]:Integer, [0,128,0,0,8]:Integer, [0,128,0,0,9]:Integer, [0,128,0,0,10]:Integer, [0,128,0,0,11]:Integer, [0,128,0,0,12]:Integer, [0,128,0,0,13]:Integer, [0,128,0,0,14]:Integer, [0,128,0,0,15]:Integer, [0,128,0,0,16]:Integer, [0,128,0,0,17]:Integer, [0,128,0,0,18]:Integer, [0,128,0,0,19]:Integer, [0,128,0,0,20]:Integer, [0,128,0,0,21]:Integer, [0,128,0,0,22]:Integer, [0,128,0,0,23]:Integer, [0,128,0,0,24]:Integer, [0,128,0,0,25]:Integer, [0,128,0,0,26]:Integer, [0,128,0,0,27]:Integer, [0,128,0,0,28]:Integer, [0,128,0,0,29]:Integer, [0,128,0,0,30]:Integer, [0,128,0,0,31]:Integer, [0,128,0,0,32]:Integer, [0,128,0,0,33]:Integer, [0,128,0,0,34]:Integer, [0,128,0,0,35]:Integer, [0,128,0,0,36]:Integer, [0,128,0,0,37]:Integer, [0,128,0,0,38]:Integer, [0,128,0,0,39]:Integer, [0,128,0,0,40]:Integer, [0,128,8]:Integer, [0,128,9]:Integer, [0,128,10]:Integer, [0,128,11]:Integer, [0,128,12]:Integer, [0,128,13]:Integer, [0,128,14]:Integer, [0,128,15]:Integer, [0,128,16]:Integer, [0,128,17]:Integer, [0,128,18]:Integer, [0,128,19]:Integer, [0,128,20]:Integer, [0,128,21]:Integer, [0,128,22]:Integer, [0,128,23]:Integer, [0,128,24]:Integer, [0,128,25]:Integer, [0,128,26]:Integer, [0,128,27]:Integer, [0,128,28]:Integer, [0,128,29]:Integer, [0,128,30]:Integer, [0,128,31]:Integer, [0,128,32]:Integer, [0,128,33]:Integer, [0,128,34]:Integer, [0,128,35]:Integer, [0,128,36]:Integer, [0,128,37]:Integer, [0,128,38]:Integer, [0,128,39]:Integer, [0,128,40]:Integer, [0,136]:Pointer, [0,136,0]:Pointer, [0,136,0,0]:Pointer, [0,136,8]:Integer, [0,136,9]:Integer, [0,136,10]:Integer, [0,136,11]:Integer, [0,136,12]:Integer, [0,136,13]:Integer, [0,136,14]:Integer, [0,136,15]:Integer, [0,136,16]:Integer, [0,136,17]:Integer, [0,136,18]:Integer, [0,136,19]:Integer, [0,136,20]:Integer, [0,136,21]:Integer, [0,136,22]:Integer, [0,136,23]:Integer, [0,136,24]:Integer, [0,136,25]:Integer, [0,136,26]:Integer, [0,136,27]:Integer, [0,136,28]:Integer, [0,136,29]:Integer, [0,136,30]:Integer, [0,136,31]:Integer, [0,136,32]:Integer, [0,136,33]:Integer, [0,136,34]:Integer, [0,136,35]:Integer, [0,136,36]:Integer, [0,136,37]:Integer, [0,136,38]:Integer, [0,136,39]:Integer, [0,136,40]:Integer, [0,144]:Float@double, [0,152]:Float@double, [0,160]:Float@double, [0,168]:Float@double, [0,176]:Integer, [0,177]:Integer, [0,178]:Integer, [0,179]:Integer, [0,180]:Integer, [0,181]:Integer, [0,182]:Integer, [0,183]:Integer, [0,184]:Integer, [0,185]:Integer, [0,186]:Integer, [0,187]:Integer, [0,188]:Integer, [0,189]:Integer, [0,190]:Integer, [0,191]:Integer, [0,192]:Integer, [0,193]:Integer, [0,200]:Integer, [0,201]:Integer, [0,202]:Integer, [0,203]:Integer, [0,204]:Integer, [0,205]:Integer, [0,206]:Integer, [0,207]:Integer, [0,208]:Integer, [0,209]:Integer, [0,210]:Integer, [0,211]:Integer, [0,212]:Integer, [0,213]:Integer, [0,214]:Integer, [0,215]:Integer, [0,216]:Integer, [0,224]:Integer, [0,225]:Integer, [0,226]:Integer, [0,227]:Integer, [0,228]:Integer, [0,229]:Integer, [0,230]:Integer, [0,231]:Integer, [0,232]:Integer, [0,233]:Integer, [0,234]:Integer, [0,235]:Integer, [0,236]:Integer, [0,237]:Integer, [0,238]:Integer, [0,239]:Integer, [1,0]:Float@double, [1,8]:Float@double, [1,16]:Float@double, [1,24]:Float@double, [1,32]:Integer, [1,33]:Integer, [1,34]:Integer, [1,35]:Integer, [1,36]:Integer, [1,37]:Integer, [1,38]:Integer, [1,39]:Integer, [1,40]:Integer, [1,41]:Integer, [1,42]:Integer, [1,43]:Integer, [1,44]:Integer, [1,45]:Integer, [1,46]:Integer, [1,47]:Integer, [1,48]:Integer, [1,49]:Integer, [1,56]:Integer, [1,57]:Integer, [1,58]:Integer, [1,59]:Integer, [1,60]:Integer, [1,61]:Integer, [1,62]:Integer, [1,63]:Integer, [1,64]:Integer, [1,65]:Integer, [1,66]:Integer, [1,67]:Integer, [1,68]:Integer, [1,69]:Integer, [1,70]:Integer, [1,71]:Integer, [1,72]:Integer, [1,80]:Integer, [1,81]:Integer, [1,82]:Integer, [1,83]:Integer, [1,84]:Integer, [1,85]:Integer, [1,86]:Integer, [1,87]:Integer, [1,88]:Pointer, [1,88,0]:Pointer, [1,88,0,0]:Float@double, [1,88,0,8]:Float@double, [1,88,8]:Integer, [1,88,9]:Integer, [1,88,10]:Integer, [1,88,11]:Integer, [1,88,12]:Integer, [1,88,13]:Integer, [1,88,14]:Integer, [1,88,15]:Integer, [1,88,16]:Integer, [1,88,17]:Integer, [1,88,18]:Integer, [1,88,19]:Integer, [1,88,20]:Integer, [1,88,21]:Integer, [1,88,22]:Integer, [1,88,23]:Integer, [1,88,24]:Integer, [1,88,25]:Integer, [1,88,26]:Integer, [1,88,27]:Integer, [1,88,28]:Integer, [1,88,29]:Integer, [1,88,30]:Integer, [1,88,31]:Integer, [1,88,32]:Integer, [1,88,33]:Integer, [1,88,34]:Integer, [1,88,35]:Integer, [1,88,36]:Integer, [1,88,37]:Integer, [1,88,38]:Integer, [1,88,39]:Integer, [1,88,40]:Integer, [1,96]:Pointer, [1,96,0]:Pointer, [1,96,0,0]:Pointer, [1,96,0,0,0]:Pointer, [1,96,0,0,0,0]:Integer, [1,96,0,0,0,1]:Integer, [1,96,0,0,0,2]:Integer, [1,96,0,0,0,3]:Integer, [1,96,0,0,8]:Integer, [1,96,0,0,9]:Integer, [1,96,0,0,10]:Integer, [1,96,0,0,11]:Integer, [1,96,0,0,12]:Integer, [1,96,0,0,13]:Integer, [1,96,0,0,14]:Integer, [1,96,0,0,15]:Integer, [1,96,0,0,16]:Integer, [1,96,0,0,17]:Integer, [1,96,0,0,18]:Integer, [1,96,0,0,19]:Integer, [1,96,0,0,20]:Integer, [1,96,0,0,21]:Integer, [1,96,0,0,22]:Integer, [1,96,0,0,23]:Integer, [1,96,0,0,24]:Integer, [1,96,0,0,25]:Integer, [1,96,0,0,26]:Integer, [1,96,0,0,27]:Integer, [1,96,0,0,28]:Integer, [1,96,0,0,29]:Integer, [1,96,0,0,30]:Integer, [1,96,0,0,31]:Integer, [1,96,0,0,32]:Integer, [1,96,0,0,33]:Integer, [1,96,0,0,34]:Integer, [1,96,0,0,35]:Integer, [1,96,0,0,36]:Integer, [1,96,0,0,37]:Integer, [1,96,0,0,38]:Integer, [1,96,0,0,39]:Integer, [1,96,0,0,40]:Integer, [1,96,0,8]:Pointer, [1,96,0,8,0]:Pointer, [1,96,0,8,0,0]:Integer, [1,96,0,8,0,1]:Integer, [1,96,0,8,0,2]:Integer, [1,96,0,8,0,3]:Integer, [1,96,0,8,8]:Integer, [1,96,0,8,9]:Integer, [1,96,0,8,10]:Integer, [1,96,0,8,11]:Integer, [1,96,0,8,12]:Integer, [1,96,0,8,13]:Integer, [1,96,0,8,14]:Integer, [1,96,0,8,15]:Integer, [1,96,0,8,16]:Integer, [1,96,0,8,17]:Integer, [1,96,0,8,18]:Integer, [1,96,0,8,19]:Integer, [1,96,0,8,20]:Integer, [1,96,0,8,21]:Integer, [1,96,0,8,22]:Integer, [1,96,0,8,23]:Integer, [1,96,0,8,24]:Integer, [1,96,0,8,25]:Integer, [1,96,0,8,26]:Integer, [1,96,0,8,27]:Integer, [1,96,0,8,28]:Integer, [1,96,0,8,29]:Integer, [1,96,0,8,30]:Integer, [1,96,0,8,31]:Integer, [1,96,0,8,32]:Integer, [1,96,0,8,33]:Integer, [1,96,0,8,34]:Integer, [1,96,0,8,35]:Integer, [1,96,0,8,36]:Integer, [1,96,0,8,37]:Integer, [1,96,0,8,38]:Integer, [1,96,0,8,39]:Integer, [1,96,0,8,40]:Integer, [1,96,8]:Integer, [1,96,9]:Integer, [1,96,10]:Integer, [1,96,11]:Integer, [1,96,12]:Integer, [1,96,13]:Integer, [1,96,14]:Integer, [1,96,15]:Integer, [1,96,16]:Integer, [1,96,17]:Integer, [1,96,18]:Integer, [1,96,19]:Integer, [1,96,20]:Integer, [1,96,21]:Integer, [1,96,22]:Integer, [1,96,23]:Integer, [1,96,24]:Integer, [1,96,25]:Integer, [1,96,26]:Integer, [1,96,27]:Integer, [1,96,28]:Integer, [1,96,29]:Integer, [1,96,30]:Integer, [1,96,31]:Integer, [1,96,32]:Integer, [1,96,33]:Integer, [1,96,34]:Integer, [1,96,35]:Integer, [1,96,36]:Integer, [1,96,37]:Integer, [1,96,38]:Integer, [1,96,39]:Integer, [1,96,40]:Integer, [1,104]:Pointer, [1,104,0]:Pointer, [1,104,0,0]:Integer, [1,104,8]:Integer, [1,104,9]:Integer, [1,104,10]:Integer, [1,104,11]:Integer, [1,104,12]:Integer, [1,104,13]:Integer, [1,104,14]:Integer, [1,104,15]:Integer, [1,104,16]:Integer, [1,104,17]:Integer, [1,104,18]:Integer, [1,104,19]:Integer, [1,104,20]:Integer, [1,104,21]:Integer, [1,104,22]:Integer, [1,104,23]:Integer, [1,104,24]:Integer, [1,104,25]:Integer, [1,104,26]:Integer, [1,104,27]:Integer, [1,104,28]:Integer, [1,104,29]:Integer, [1,104,30]:Integer, [1,104,31]:Integer, [1,104,32]:Integer, [1,104,33]:Integer, [1,104,34]:Integer, [1,104,35]:Integer, [1,104,36]:Integer, [1,104,37]:Integer, [1,104,38]:Integer, [1,104,39]:Integer, [1,104,40]:Integer, [1,112]:Pointer, [1,112,0]:Pointer, [1,112,0,0]:Pointer, [1,112,8]:Integer, [1,112,9]:Integer, [1,112,10]:Integer, [1,112,11]:Integer, [1,112,12]:Integer, [1,112,13]:Integer, [1,112,14]:Integer, [1,112,15]:Integer, [1,112,16]:Integer, [1,112,17]:Integer, [1,112,18]:Integer, [1,112,19]:Integer, [1,112,20]:Integer, [1,112,21]:Integer, [1,112,22]:Integer, [1,112,23]:Integer, [1,112,24]:Integer, [1,112,25]:Integer, [1,112,26]:Integer, [1,112,27]:Integer, [1,112,28]:Integer, [1,112,29]:Integer, [1,112,30]:Integer, [1,112,31]:Integer, [1,112,32]:Integer, [1,112,33]:Integer, [1,112,34]:Integer, [1,112,35]:Integer, [1,112,36]:Integer, [1,112,37]:Integer, [1,112,38]:Integer, [1,112,39]:Integer, [1,112,40]:Integer, [1,120]:Pointer, [1,120,0]:Pointer, [1,120,0,0]:Pointer, [1,120,0,0,0]:Pointer, [1,120,0,0,0,0]:Integer, [1,120,0,0,0,1]:Integer, [1,120,0,0,0,2]:Integer, [1,120,0,0,0,3]:Integer, [1,120,0,0,8]:Integer, [1,120,0,0,9]:Integer, [1,120,0,0,10]:Integer, [1,120,0,0,11]:Integer, [1,120,0,0,12]:Integer, [1,120,0,0,13]:Integer, [1,120,0,0,14]:Integer, [1,120,0,0,15]:Integer, [1,120,0,0,16]:Integer, [1,120,0,0,17]:Integer, [1,120,0,0,18]:Integer, [1,120,0,0,19]:Integer, [1,120,0,0,20]:Integer, [1,120,0,0,21]:Integer, [1,120,0,0,22]:Integer, [1,120,0,0,23]:Integer, [1,120,0,0,24]:Integer, [1,120,0,0,25]:Integer, [1,120,0,0,26]:Integer, [1,120,0,0,27]:Integer, [1,120,0,0,28]:Integer, [1,120,0,0,29]:Integer, [1,120,0,0,30]:Integer, [1,120,0,0,31]:Integer, [1,120,0,0,32]:Integer, [1,120,0,0,33]:Integer, [1,120,0,0,34]:Integer, [1,120,0,0,35]:Integer, [1,120,0,0,36]:Integer, [1,120,0,0,37]:Integer, [1,120,0,0,38]:Integer, [1,120,0,0,39]:Integer, [1,120,0,0,40]:Integer, [1,120,8]:Integer, [1,120,9]:Integer, [1,120,10]:Integer, [1,120,11]:Integer, [1,120,12]:Integer, [1,120,13]:Integer, [1,120,14]:Integer, [1,120,15]:Integer, [1,120,16]:Integer, [1,120,17]:Integer, [1,120,18]:Integer, [1,120,19]:Integer, [1,120,20]:Integer, [1,120,21]:Integer, [1,120,22]:Integer, [1,120,23]:Integer, [1,120,24]:Integer, [1,120,25]:Integer, [1,120,26]:Integer, [1,120,27]:Integer, [1,120,28]:Integer, [1,120,29]:Integer, [1,120,30]:Integer, [1,120,31]:Integer, [1,120,32]:Integer, [1,120,33]:Integer, [1,120,34]:Integer, [1,120,35]:Integer, [1,120,36]:Integer, [1,120,37]:Integer, [1,120,38]:Integer, [1,120,39]:Integer, [1,120,40]:Integer, [1,128]:Pointer, [1,128,0]:Pointer, [1,128,0,0]:Pointer, [1,128,0,0,0]:Pointer, [1,128,0,0,0,0]:Integer, [1,128,0,0,0,1]:Integer, [1,128,0,0,0,2]:Integer, [1,128,0,0,0,3]:Integer, [1,128,0,0,8]:Integer, [1,128,0,0,9]:Integer, [1,128,0,0,10]:Integer, [1,128,0,0,11]:Integer, [1,128,0,0,12]:Integer, [1,128,0,0,13]:Integer, [1,128,0,0,14]:Integer, [1,128,0,0,15]:Integer, [1,128,0,0,16]:Integer, [1,128,0,0,17]:Integer, [1,128,0,0,18]:Integer, [1,128,0,0,19]:Integer, [1,128,0,0,20]:Integer, [1,128,0,0,21]:Integer, [1,128,0,0,22]:Integer, [1,128,0,0,23]:Integer, [1,128,0,0,24]:Integer, [1,128,0,0,25]:Integer, [1,128,0,0,26]:Integer, [1,128,0,0,27]:Integer, [1,128,0,0,28]:Integer, [1,128,0,0,29]:Integer, [1,128,0,0,30]:Integer, [1,128,0,0,31]:Integer, [1,128,0,0,32]:Integer, [1,128,0,0,33]:Integer, [1,128,0,0,34]:Integer, [1,128,0,0,35]:Integer, [1,128,0,0,36]:Integer, [1,128,0,0,37]:Integer, [1,128,0,0,38]:Integer, [1,128,0,0,39]:Integer, [1,128,0,0,40]:Integer, [1,128,8]:Integer, [1,128,9]:Integer, [1,128,10]:Integer, [1,128,11]:Integer, [1,128,12]:Integer, [1,128,13]:Integer, [1,128,14]:Integer, [1,128,15]:Integer, [1,128,16]:Integer, [1,128,17]:Integer, [1,128,18]:Integer,
For reverse mode, I get the following error:
ERROR: Duplicated Returns not yet handled
Stacktrace:
[1] autodiff
@ ~/.julia/packages/Enzyme/M2q6i/src/Enzyme.jl:294 [inlined]
[2] autodiff(mode::Enzyme.ReverseMode, f::var"#1#2", args::Duplicated{Vector{Float64}})
@ Enzyme ~/.julia/packages/Enzyme/M2q6i/src/Enzyme.jl:330
[3] gradient!(#unused#::Enzyme.ReverseMode, dx::Vector{Float64}, f::Function, x::Vector{Float64})
@ Enzyme ~/.julia/packages/Enzyme/M2q6i/src/Enzyme.jl:628
[4] top-level scope
@ REPL[10]:1
I am on an M1 machine.
Can you post the entire error log for forward mode.
The reverse mode error indicates that the return of the function is not a float or floating-point like (perhaps because of a type instability).
I used a type assertion to force at least the final output type to be inferred. I got the following error.
From forward mode:
_ZN16LateLowerGCFrame13NumberAllBaseER5StatePN4llvm5ValueE at /Applications/Julia-1.8.app/Contents/Resources/julia/lib/julia/libjulia-codegen.1.8.dylib (unknown line)
This is GC related. We'll need a minimal reproducer to fix, if you're up to minimizing it to one.
@mohamed82008 did you get a chance to minimize this?
Not yet. I don't think I will be able to find the time for a few weeks.
The forward mode issue you see seems to be a GC error coming from batch mode, setting the batch size to 1, we get a different error:
Enzyme.gradient(Enzyme.ForwardMode(), g, x, Val(1))
ERROR: LoadError: UndefRefError: access to undefined reference
Stacktrace:
[1] getindex(t::Tuple, i::Int64)
@ Base ./tuple.jl:29
in expression starting at /home/wmoses/git/Enzyme.jl/ga2.jl:5
The current state of reverse mode is:
┌ Warning: Returned rooting not fully handled, segfault likely
└ @ Enzyme.Compiler ~/.julia/packages/GPUCompiler/07qaN/src/utils.jl:35
signal (11): Segmentation fault
in expression starting at /home/wmoses/git/Enzyme.jl/ga.jl:7
ijl_isa at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/subtype.c:2064
unknown function (ip: 0x7f34456c9503)
unknown function (ip: 0x7f34456ca555)
Allocations: 251758458 (Pool: 251629232; Big: 129226); GC: 161
...which per the warning...I suppose is fair (it did require a quick Enzyme proper fix here: https://github.com/EnzymeAD/Enzyme/pull/879).
Again, if you are able to minimize these to a root issue, we'll be able to debug/fix it. (ideally a pure call to autodiff/etc, as little code as possible that causes the issue, and ideally no or minimal external dependencies)
Thanks for looking into this. Your ask is reasonable but can be very hard for the kind of work I need Enzyme for. The function is discretising a PDE, assembling a sparse matrix, solving a linear system and then doing some post-processing of the output. A minimal example would require snipping this pipeline and doing an Enzyme call to bisect-find the problematic code. That's a lot of work especially without a helpful stacktrace although I understand segfault stacktraces are not really helpful in general so it's not Enzyme's fault.
@wsmoses you mentioned in chat that you still hit a GC error here?
I get a proper runtime error:
ERROR: LoadError: Duplicated Returns not yet handled
Stacktrace:
[1] autodiff
@ ~/src/Enzyme/src/Enzyme.jl:197 [inlined]
[2] autodiff(mode::EnzymeCore.ReverseMode, f::var"#1#2", args::Duplicated{Vector{Float64}})
@ Enzyme ~/src/Enzyme/src/Enzyme.jl:236
[3] gradient!(#unused#::EnzymeCore.ReverseMode, dx::Vector{Float64}, f::Function, x::Vector{Float64})
@ Enzyme ~/src/Enzyme/src/Enzyme.jl:553
[4] top-level scope
@ ~/src/Enzyme/issue447.jl:7
in expression starting at /home/vchuravy/src/Enzyme/issue447.jl:7
But no GC error? Can you post your reproducer?
Edit: Okay I see the GC error on fwddiff
@vchuravy
using Pkg
Pkg.add(url="https://github.com/JuliaTopOpt/TopOptGridap.jl")
using TopOptGridap, Enzyme
f, x = TopOptGridap.get_domain()
g = x -> sum(f(x))::Float64
# Enzyme.gradient(Enzyme.ForwardMode(), g, x)
dx = similar(x)
Enzyme.gradient!(Enzyme.ReverseMode(), dx, g, x)
For the FWD mode failure
Thread 1 received signal SIGSEGV, Segmentation fault.
0x00007fb690adb52f in ijl_isa (x=0x21, t=0x7fb67ad10720 <jl_system_image_data+1529120>) at /home/vchuravy/src/julia/src/subtype.c:2067
warning: Source file is more recent than executable.
2067 if (((jl_datatype_t*)t)->name == jl_type_typename)
(rr) bt
#0 0x00007fb690adb52f in ijl_isa (x=0x21, t=0x7fb67ad10720 <jl_system_image_data+1529120>) at /home/vchuravy/src/julia/src/subtype.c:2067
#1 0x00007fb69083e5f8 in Typeof () at boot.jl:243
#2 wrap_annotated_args () at /home/vchuravy/src/Enzyme/src/compiler.jl:516
#3 julia_runtime_generic_fwd_8197 (fn=0x0, arg_ptr=..., shadow_ptr=..., activity_ptr=<optimized out>, width=...) at /home/vchuravy/src/Enzyme/src/compiler.jl:618
#4 0x00007fb69083e4b2 in julia_scatter_free_and_dirichlet_values_8120 (f=..., free_values=<optimized out>, dirichlet_values=<optimized out>)
at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/UnconstrainedFESpaces.jl:76
#5 0x00007fb690841700 in scatter_free_and_dirichlet_values () at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/TrialFESpaces.jl:110
#6 julia_FEFunction_8117 (fs=..., free_values=<optimized out>, dirichlet_values=<optimized out>)
at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/SingleFieldFESpaces.jl:163
#7 0x00007fb690841700 in julia_FEFunction_8117 (fs=..., free_values=<optimized out>, dirichlet_values=<optimized out>)
#8 0x00007fb6787fda19 in macro expansion () at /home/vchuravy/src/Enzyme/src/compiler.jl:6162
#9 julia_enzyme_call_8241 (fptr=0, tt=<optimized out>, rt=<optimized out>, f=0x21, df=..., args...=...) at /home/vchuravy/src/Enzyme/src/compiler.jl:5900
#10 0x00007fb6787fdaad in jfptr_enzyme_call_8242 ()
#11 0x00007fb690a4e535 in _jl_invoke (F=0x7fb648e53658, args=0x7ffdd3f0a698, nargs=13, mfunc=0x7fb658146db0, world=32452) at /home/vchuravy/src/julia/src/gf.c:2367
#12 0x00007fb690a4eeed in ijl_apply_generic (F=0x7fb648e53658, args=0x7ffdd3f0a698, nargs=13) at /home/vchuravy/src/julia/src/gf.c:2549
#13 0x00007fb690a5e62d in jl_apply (args=0x7ffdd3f0a690, nargs=14) at /home/vchuravy/src/julia/src/julia.h:1838
#14 0x00007fb690a61eb0 in do_apply (args=0x7ffdd3f0a8d0, nargs=3, iterate=0x7fb67ae6f5b0 <jl_system_image_data+2966448>) at /home/vchuravy/src/julia/src/builtins.c:730
#15 0x00007fb690a61f3d in jl_f__apply_iterate (F=0x0, args=0x7ffdd3f0a8c8, nargs=4) at /home/vchuravy/src/julia/src/builtins.c:738
#16 0x00007fb6787fd74f in japi1_ForwardModeThunk_8239 (thunk=..., args...=0x7fb64fbd30c0) at /home/vchuravy/src/Enzyme/src/compiler.jl:5880
#17 0x00007fb690a4d8cd in jl_fptr_args (f=0x7fb64e309f90, args=0x7ffdd3f0aaa8, nargs=3, m=0x7fb6501f1f90) at /home/vchuravy/src/julia/src/gf.c:2128
#18 0x00007fb690a4e535 in _jl_invoke (F=0x7fb64e309f90, args=0x7ffdd3f0aaa8, nargs=3, mfunc=0x7fb658128e70, world=32452) at /home/vchuravy/src/julia/src/gf.c:2367
#19 0x00007fb690a4eeed in ijl_apply_generic (F=0x7fb64e309f90, args=0x7ffdd3f0aaa8, nargs=3) at /home/vchuravy/src/julia/src/gf.c:2549
#20 0x00007fb690a5e62d in jl_apply (args=0x7ffdd3f0aaa0, nargs=4) at /home/vchuravy/src/julia/src/julia.h:1838
#21 0x00007fb690a61eb0 in do_apply (args=0x7ffdd3f0acc0, nargs=2, iterate=0x7fb67ae6f5b0 <jl_system_image_data+2966448>) at /home/vchuravy/src/julia/src/builtins.c:730
#22 0x00007fb690a61f3d in jl_f__apply_iterate (F=0x0, args=0x7ffdd3f0acb8, nargs=3) at /home/vchuravy/src/julia/src/builtins.c:738
#23 0x00007fb6904383fb in julia_runtime_generic_fwd_7063 (fn=0x0, arg_ptr=..., shadow_ptr=..., activity_ptr=<optimized out>, width=...)
at /home/vchuravy/src/Enzyme/src/compiler.jl:636
#24 0x00007fb690437c93 in julia_FEFunction_6341 (fe=..., free_values=<optimized out>) at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/SingleFieldFESpaces.jl:170
#25 0x00007fb69043263a in EvaluationFunction () at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/FESpaceInterface.jl:113
#26 zero () at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/FESpaceInterface.jl:120
#27 julia_AffineFEOperator_6334 (weakform=..., trial=..., test=..., assem=...) at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/AffineFEOperators.jl:35
#28 0x00007fb690445f81 in AffineFEOperator () at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/AffineFEOperators.jl:47
#29 AffineFEOperator () at /home/vchuravy/.julia/packages/Gridap/TyUsh/src/FESpaces/AffineFEOperators.jl:51
#30 julia_displacements_6325 (cell_param=<optimized out>) at /home/vchuravy/.julia/packages/TopOptGridap/uKKM6/src/TopOptGridap.jl:42
#31 0x00007fb690445f81 in julia_displacements_6325 (cell_param=<optimized out>)
#32 0x00007fb67874660b in macro expansion () at /home/vchuravy/src/Enzyme/src/compiler.jl:6162
#33 enzyme_call () at /home/vchuravy/src/Enzyme/src/compiler.jl:5900
#34 julia_ForwardModeThunk_7380 (thunk=<error reading variable: Cannot access memory at address 0x19>, args...=...) at /home/vchuravy/src/Enzyme/src/compiler.jl:5880
#35 0x00007fb678746694 in jfptr_ForwardModeThunk_7381 ()
#36 0x00007fb690a4e535 in _jl_invoke (F=0x7fb64b290450, args=0x7ffdd3f0bd18, nargs=1, mfunc=0x7fb649f1d0a0, world=32452) at /home/vchuravy/src/julia/src/gf.c:2367
#37 0x00007fb690a4eeed in ijl_apply_generic (F=0x7fb64b290450, args=0x7ffdd3f0bd18, nargs=1) at /home/vchuravy/src/julia/src/gf.c:2549
#38 0x00007fb690a5e62d in jl_apply (args=0x7ffdd3f0bd10, nargs=2) at /home/vchuravy/src/julia/src/julia.h:1838
--Type <RET> for more, q to quit, c to continue without paging--c
#39 0x00007fb690a61eb0 in do_apply (args=0x7ffdd3f0bf10, nargs=2, iterate=0x7fb67ae6f5b0 <jl_system_image_data+2966448>) at /home/vchuravy/src/julia/src/builtins.c:730
#40 0x00007fb690a61f3d in jl_f__apply_iterate (F=0x0, args=0x7ffdd3f0bf08, nargs=3) at /home/vchuravy/src/julia/src/builtins.c:738
#41 0x00007fb6915c35c9 in julia_runtime_generic_fwd_5702 (fn=0x0, arg_ptr=..., shadow_ptr=..., activity_ptr=<optimized out>, width=...) at /home/vchuravy/src/Enzyme/src/compiler.jl:636
#42 0x00007fb6915c4f4a in julia_#1_4928 (x=<optimized out>) at /home/vchuravy/src/Enzyme/issue447.jl:4
#43 0x00007fb6915c4f4a in julia_#1_4928 (x=<optimized out>)
#44 0x00007fb678701794 in macro expansion () at /home/vchuravy/src/Enzyme/src/compiler.jl:6162
#45 enzyme_call () at /home/vchuravy/src/Enzyme/src/compiler.jl:5900
#46 ForwardModeThunk () at /home/vchuravy/src/Enzyme/src/compiler.jl:5880
#47 autodiff () at /home/vchuravy/src/Enzyme/src/Enzyme.jl:314
#48 #37 () at /home/vchuravy/src/Enzyme/src/Enzyme.jl:629
#49 0x00007fb678701794 in #193 ()
#50 iterate () at generator.jl:47
#51 julia_collect_6225 (itr=...) at array.jl:787
#52 0x00007fb678701d65 in julia__ntuple_6222 (f=..., n=100) at ntuple.jl:37
#53 0x00007fb678701fe7 in julia_ntuple_6164 (f=..., n=140421721294624) at ntuple.jl:19
#54 0x00007fb678702935 in jfptr_ntuple_6165 ()
#55 0x00007fb690a4e535 in _jl_invoke (F=0x7fb67b5838e0 <jl_system_image_data+10389216>, args=0x7ffdd3f0cbe0, nargs=2, mfunc=0x7fb65a340ce0, world=32452) at /home/vchuravy/src/julia/src/gf.c:2367
#56 0x00007fb690a4eeed in ijl_apply_generic (F=0x7fb67b5838e0 <jl_system_image_data+10389216>, args=0x7ffdd3f0cbe0, nargs=2) at /home/vchuravy/src/julia/src/gf.c:2549
#57 0x00007fb678b0931a in julia_#gradient#36_3879 (shadow=..., f=0x0, x=<error reading variable: Cannot access memory at address 0x0>) at /home/vchuravy/src/Enzyme/src/Enzyme.jl:628
#58 0x00007fb678b093b9 in jfptr_#gradient#36_3880 ()
(rr) up
#2 wrap_annotated_args () at /home/vchuravy/src/Enzyme/src/compiler.jl:516
516 T = Core.Typeof(p)
(rr) list
511 __activity = Base.unsafe_wrap(Array, activity_ptr, length(arg_ptr))
512 args = Any[]
513
514 for i in start:length(arg_ptr)
515 p = arg_ptr[i]
516 T = Core.Typeof(p)
517 if __activity[i] != 0 && !(GPUCompiler.isghosttype(T) || Core.Compiler.isconstType(T))
518 if !forwardMode && (T <: AbstractFloat || T <: Complex{<:AbstractFloat})
519 push!(args, Active(p))
520 else
So whatever p is wrong.
@vchuravy the reverse mode still errs in GC with the latest jll. Forward mode is now a different but still error:
[2218940] signal (11.1): Segmentation fault
in expression starting at REPL[9]:1
typekeyvalue_hash at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/jltypes.c:1222 [inlined]
lookup_typevalue at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/jltypes.c:754
jl_inst_arg_tuple_type at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/jltypes.c:1670
arg_type_tuple at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/gf.c:2059 [inlined]
jl_lookup_generic_ at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/gf.c:2807 [inlined]
ijl_apply_generic at /cache/build/default-amdci4-7/julialang/julia-release-1-dot-9/src/gf.c:2859
unknown function (ip: 0x7fa76aa61623)
Allocations: 183686838 (Pool: 183609914; Big: 76924); GC: 275
Segmentation fault (core dumped)
@mohamed82008 have you had a chance to minimize this yet? If so, we can attempt to fix and get this working.
I can try to spend time on it next weekend.
any luck @mohamed82008
Not yet, got busy with something else. Sorry for the delay.
bump @mohamed82008
Reverse mode seems to no longer error on main (instead a runtime unimplemented jl_f_apply_iterate). Forward mode remains the segmentation fault.
using Enzyme
Enzyme.API.printall!(true)
using Gridap
function get_domain()
#domain = (0, 160, 0, 40)
#partition = (160, 40)
domain = (0, 1, 0, 1)
partition = (10, 10)
model = CartesianDiscreteModel(domain, partition)
labels = get_face_labeling(model)
add_tag_from_tags!(labels, "diri_0", [1, 3, 7])
add_tag_from_tags!(labels, "diri_1", [2, 4, 8])
order = 1
E = 70.0e9
ν = 0.33
λ = (E * ν) / ((1 + ν) * (1 - 2 * ν))
μ = E / (2 * (1 + ν))
σ(ε) = λ * tr(ε) * one(ε) + 2 * μ * ε
degree = 2 * order
Ω = Triangulation(model)
dΩ = Measure(Ω, degree)
T = Float64
reffe = ReferenceFE(lagrangian, VectorValue{2, T}, order)
V0 = TestFESpace(
model, reffe;
vector_type = Vector{T},
conformity = :H1,
dirichlet_tags = ["diri_0", "diri_1"],
dirichlet_masks = [(true, false), (true, true)],
)
g1(x) = VectorValue(convert(T, 0.005), convert(T, 0.0))
g2(x) = VectorValue(convert(T, 0.0), convert(T, 0.0))
U = TrialFESpace(V0, [g1, g2])
l(v) = zero(T)
function displacements(cell_param)
ρ = CellField(cell_param, Ω)
a(u, v) = ρ * ε(v) ⊙ (σ ∘ ε(u))
op = AffineFEOperator(a, l, U, V0)
solver = LinearFESolver()
uh = solve(solver, op)
return uh.free_values[1]
end, rand(num_cells(model))
end
f, x = get_domain()
# Enzyme.gradient(Enzyme.ForwardMode(), g, x)
dx = similar(x)
Enzyme.autodiff(Forward, f, Duplicated(x, dx))
@mohamed82008 yeah I have no idea what is going on here, but if you're able to make this smaller/simpler while still triggering the segfault, I can try to fix it.
Thanks Billy. I am not very proud of the many broken promises to look into this. I will try to narrow it down when I can though.
Should be solved by https://github.com/EnzymeAD/Enzyme.jl/pull/772 please reopen if it persists.
Did you actually test this works? It doesn't on my machine.
I did (we fixed a GC error, which then stopped this error from reproducing after merging).
If it's still erroring for you I definitely need a MWE since it no longer reproduces for me.
Well that's odd I tested it on Mac M1 and WSL. Perhaps I need to test it on a more standard setup.
significant GC related fix has now landed on main. Retry to see if resolved?
unfortunately again I could not reproduce your issue even without that fix
I tried it on my M1 and it still fails. Let me try it again on Linux and Windows and get back to you.
Can you paste the error and also confirm you're on the latest commit?