我正在编写一个 CUDA 内核,它需要为每个线程维护一个小的关联数组。小,我的意思是最坏情况下最多 8 个元素,以及两个左右的预期条目数;所以没什么花哨的;只是一个键数组和一个值数组,索引和插入是通过对所述数组的循环进行的。
现在我通过线程本地内存来做到这一点;即标识符[大小];其中 size 是编译时间常数。现在听说在某些情况下,该存储器存储在片外,而在某些情况下,它存储在片内。显然我想要后者,在任何情况下。我知道我可以通过一个共享内存块来实现这一点,我让每个线程在自己的私有块上工作;但真的吗?我不想在线程之间共享任何东西,这将是一个可怕的组合。
这个内存去向的具体规则是什么?我似乎找不到任何来自 nvidia 的词。作为记录,我正在使用 CUDA5 并以开普勒为目标。