Memory 通过多个内核调用在CUDA中访问/存储持久数据的最佳方法

Memory 通过多个内核调用在CUDA中访问/存储持久数据的最佳方法,memory,cuda,persistent,Memory,Cuda,Persistent,我正在编写一个程序,在这个程序中,我在一个巨大的for循环中进行内核调用。 内核主要使用存储在全局内存中的一些数组中的输入数据。每个线程访问这些数组中自己的数据。在整个程序执行过程中,这些数组中的数据不会改变 现在,每个线程都从全局内存中获取自己的数据,并将其存储在自己的寄存器中,因此基本上,每个内核调用只需访问一次全局内存。我认为使用共享内存没有什么好处,因为每个线程只使用自己的数据 由于数据在整个程序执行期间不会改变,所以我考虑使用恒定内存,但我了解到所有线程都需要访问相同的数据以获得性能,

我正在编写一个程序,在这个程序中,我在一个巨大的for循环中进行内核调用。 内核主要使用存储在全局内存中的一些数组中的输入数据。每个线程访问这些数组中自己的数据。在整个程序执行过程中,这些数组中的数据不会改变

现在,每个线程都从全局内存中获取自己的数据,并将其存储在自己的寄存器中,因此基本上,每个内核调用只需访问一次全局内存。我认为使用共享内存没有什么好处,因为每个线程只使用自己的数据

由于数据在整个程序执行期间不会改变,所以我考虑使用恒定内存,但我了解到所有线程都需要访问相同的数据以获得性能,这不是我的情况

我也在读关于纹理记忆的书,但它似乎不是我想要的。纹理内存提供缓存访问,但现在,在我从全局内存读取之后,所有后续访问都来自内核调用中的寄存器

因此,在每次内核调用中,线程都会从全局内存中反复读取并将其保存到寄存器中


在整个程序执行过程中,有没有快速持久的内存可以存储这些数组?我试图避免每次访问全局内存。

一个词的答案是否定的。在这种情况下,提高性能的最佳方法通常是尝试融合内核。