Enzyme.jl icon indicating copy to clipboard operation
Enzyme.jl copied to clipboard

Differentiating Gridap code

Open mohdibntarek opened this issue 3 years ago • 11 comments

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)

mohdibntarek avatar Sep 10 '22 23:09 mohdibntarek

Can you post how it is failing, and also try on latest main (and if so, what commit)

wsmoses avatar Sep 11 '22 04:09 wsmoses

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.

mohdibntarek avatar Sep 11 '22 11:09 mohdibntarek

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).

wsmoses avatar Sep 11 '22 16:09 wsmoses

Can you post the entire error log for forward mode.

forwardmode_stacktrace.txt

mohdibntarek avatar Sep 12 '22 00:09 mohdibntarek

I used a type assertion to force at least the final output type to be inferred. I got the following error.

reversemode_stacktrace.txt

mohdibntarek avatar Sep 12 '22 01:09 mohdibntarek

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.

wsmoses avatar Sep 12 '22 19:09 wsmoses

@mohamed82008 did you get a chance to minimize this?

wsmoses avatar Sep 26 '22 19:09 wsmoses

Not yet. I don't think I will be able to find the time for a few weeks.

mohdibntarek avatar Sep 26 '22 22:09 mohdibntarek

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

wsmoses avatar Oct 04 '22 02:10 wsmoses

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)

wsmoses avatar Oct 04 '22 02:10 wsmoses

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.

mohdibntarek avatar Oct 04 '22 04:10 mohdibntarek

@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 avatar Oct 12 '22 01:10 vchuravy

@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)

wsmoses avatar Oct 12 '22 01:10 wsmoses

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 ()

vchuravy avatar Oct 12 '22 17:10 vchuravy

(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 avatar Oct 12 '22 17:10 vchuravy

@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.

wsmoses avatar Feb 17 '23 23:02 wsmoses

I can try to spend time on it next weekend.

mohdibntarek avatar Feb 18 '23 05:02 mohdibntarek

any luck @mohamed82008

wsmoses avatar Mar 06 '23 04:03 wsmoses

Not yet, got busy with something else. Sorry for the delay.

mohdibntarek avatar Mar 06 '23 05:03 mohdibntarek

bump @mohamed82008

wsmoses avatar Apr 09 '23 22:04 wsmoses

Reverse mode seems to no longer error on main (instead a runtime unimplemented jl_f_apply_iterate). Forward mode remains the segmentation fault.

wsmoses avatar Apr 10 '23 22:04 wsmoses

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.

wsmoses avatar Apr 10 '23 22:04 wsmoses

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.

mohdibntarek avatar Apr 12 '23 01:04 mohdibntarek

Should be solved by https://github.com/EnzymeAD/Enzyme.jl/pull/772 please reopen if it persists.

wsmoses avatar Apr 24 '23 02:04 wsmoses

Did you actually test this works? It doesn't on my machine.

mohdibntarek avatar Apr 28 '23 11:04 mohdibntarek

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.

wsmoses avatar Apr 28 '23 14:04 wsmoses

Well that's odd I tested it on Mac M1 and WSL. Perhaps I need to test it on a more standard setup.

mohdibntarek avatar Apr 28 '23 14:04 mohdibntarek

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

wsmoses avatar Jun 23 '23 23:06 wsmoses

I tried it on my M1 and it still fails. Let me try it again on Linux and Windows and get back to you.

mohdibntarek avatar Jun 26 '23 15:06 mohdibntarek

Can you paste the error and also confirm you're on the latest commit?

wsmoses avatar Jun 26 '23 16:06 wsmoses