I have a simple question: I know bank conflicts can occur at shared memory, but could they also occur at other memory types, especially at constant memory?
I want to save once, a binary tree in constant memory and all threads will access more or less randomly on this constant memory. The binary tree will not be very big to achieve that the whole tree will be cached. Any serialization would be very disadvantageous.
Thanks in advance,
Basically yes, although they are not called bank conflicts there (because the constant cache is not banked). Constant memory has the even stricter requirement that all reads from a (half- on CC 1.x) warp have to go to the same address or accesses will be serialized.
In your case, a texture would be a much better fit. Or just use global memory if your code doesn’t run on compute capability 1.x devices, as global memory is cached on CC 2.x and up.
But I do not understand why global memory do not have this restriction. In addition it should be slower then Constant Memory due to the need of cache coherence.
To use texture memory is a good idea.
Thanks for this advice.