I am new in the GPUs world, I used them in Matlab ambient so I didn't need to appreciate the subtleties of these devices.
I know that a GPU can be divided into multiprocessors (also called Streaming Multiprocessors) whose single processors share a cache memory. I don't understand if the host is required for the communication between multiprocessors. In order to center my question I am going to give an example.
Let us take a fluid dynamics simulation in which I perform a discretization of my domain into $N$ cells. After that I assign to each multiprocessor $M$ cells. In this ultra-generic simulation I have some continuity equations, between one cell and the neighbors, which must be updated for each time step. If the cells belong to the same multiprocessor it is ok since they can share memory using the common cache. On the contrary, the situation is different for those cells whose (part of their) neighbors cells belong to a different multiprocessor. My question is:
How can cells belonging to different multiprocessors communicate for each time step?
I could use the memory transfer to the CPU but I think it would not be efficient.
In my opinion, this is the central point of the computational aspect of Lattice Boltzmann Methods.
Help me to understand that.