Dear All,
I have a strange problem with a code snippet which looks like the one below
# model doesn't contain any trainable parameters
def comp(model, x):
    x.requires_grad_()
    y = model(x)
    y.backward()
    g = x.grad
    return x.detach_(), y.detach_(), g

def run(model, x):
    x, y, g = comp(model, x)

    while True:
        some plain compute with x, y, and g, no backward() calls
        torch.cuda.synchronize()
        call some function that computes svd
        x.copy_(some z)
        x.grad.zero_()
        x, y, g = comp(model, x)

The code runs correctly on the cpu; however, in order to get the correct result on the gpu I have to insert the torch.cuda.synchronize() call. It also works correctly on the gpu if the sync is replaced by a python sleep call. Could you suggest what problem it may indicate?
Thanks!