Memory management 内核变量位置

Memory management 内核变量位置,memory-management,cuda,Memory Management,Cuda,我正在创建一个内核来管理位于结构和数组上的大量变量。 我知道如果我使用通过cudamaloc(全局内存…对吗?)分配的变量,计算速度会非常慢(我试过了,结果比我的算法的顺序版本慢) 如果我在内核变量上复制数据数组,我会提高性能吗 内核内存(应该称为“本地内存”,对吗?)应该比全局内存快?我认为您对CUDA的工作方式有点困惑。我会尽我所能提供帮助,但我强烈建议您看看CUDA中包含的示例。对于您在structs上的工作,我推荐Black-Scholes示例 我知道如果我使用通过cudaMalloc(

我正在创建一个内核来管理位于结构和数组上的大量变量。 我知道如果我使用通过
cudamaloc
(全局内存…对吗?)分配的变量,计算速度会非常慢(我试过了,结果比我的算法的顺序版本慢)

如果我在内核变量上复制数据数组,我会提高性能吗


内核内存(应该称为“本地内存”,对吗?)应该比全局内存快?

我认为您对CUDA的工作方式有点困惑。我会尽我所能提供帮助,但我强烈建议您看看CUDA中包含的示例。对于您在structs上的工作,我推荐Black-Scholes示例

我知道如果我使用通过cudaMalloc(全局内存…对吗?)分配的变量,计算速度会非常慢(我试过了,结果比我的alghoritm的顺序版本慢)

是的,您确实使用cudaMalloc将GPU设备分配到全局内存,对吗。计算不一定慢,但是将大量数据复制到设备(GPU)内存的过程可能慢,具体取决于您对慢的定义。在CUDA中限制向设备复制内存总是好的

如果我在内核变量上复制数据数组,我会提高性能吗?内核内存(应该称为“本地内存”,对吗?)应该比全局内存快

这种说法毫无意义,我认为你不理解设备内存是如何工作的

在进一步改进之前,不要担心内存优化。特别是,您应该检查每个CUDA调用是否有错误,尤其是CudaMalloc和CudaMemcpy,否则您将遇到一些严重问题


如果你打算真正学习GPU编程,我建议你多读一些关于GPU编程的书,看看示例程序。如果不是的话,你肯定应该在不做程序员的情况下查看一些使用GPU的现有软件。特别是对于这一目的,特别是对于Map/Reduce样式的任务,本地内存与全局内存一样慢。如果您的数据太大,无法存储在寄存器或共享内存中,并且不需要写操作,则可以尝试使用纹理内存或常量内存,它们被缓存,因此比全局内存更快