Well it’s a difficult question. Maybe @albanD or @ptrblck can clarify it.
If I had have to give you an answer I’d say   that:
When you compute forward for x1 and then forward for x2, you are creating a joint in the computational graph like this:

According to the theory of siamese networks you should get gradients for both and then update the model with averaged gradients.
This proper follows the statements in which you require to have both gradients.
In case you stack them into a single batch you would have this graph

Which would compute gradients of the error of both samples as a batch. Therefore it does not match what you want to do.
The last case, in which you accumulate gradients would have a similar representation with neither match your case.