Unbinding surfaces, binding multiple things to one array.

Hi, I have a few of questions that aren’t clear from the docs about surfaces:

  1. Can you unbind a surface? Would you ever need to?

  2. What does binding a surface or a texture reference to an array actually do? It seems like the reference is really light and defines access rules, and binding it just sets a pointer to the memory it refers to. So I assume it doesn’t actually load anything?

  3. Can I have multiple texture and surface reference bound to the same cuda/global array simultaneously? Can I use the simultaneously?

  4. If I write to a surface that is bound to a cuda array in one kernel call, and in the next I read from that array using a texture reference, will that work as expected?

  5. Is surface memory cached in a way that is suited to localised access like textures are?

  6. If I don’t want filtering, or any of the other features of textures, should I prefer surfaces or textures?