内核变量位置



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

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

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

本地内存和全局内存一样慢。如果数据太大而无法存储在寄存器或共享内存中,并且不需要写入操作,则可以尝试使用纹理内存或常量内存,它们被缓存,因此比全局内存更快。

我认为您对 CUDA 的工作方式有点困惑。我会尽力提供帮助,但我强烈建议您查看 CUDA 编程指南以及 CUDA 附带的示例。对于您在结构上的工作,我会推荐布莱克·斯科尔斯的例子。

我知道如果我使用通过 cudaMalloc 分配的变量(全局内存......对吧?计算会很慢(我已经尝试过了,结果比我的 alghoritm 的顺序版本慢)

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

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

这种说法没有意义,我认为您不了解设备内存的工作原理。

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

如果您打算真正学习GPU编程,我建议您阅读大量有关它的信息并查看示例程序。如果没有,您绝对应该检查一些现有的软件,以便在不成为程序员的情况下使用 GPU。特别是 Thrust 在这方面非常出色,尤其是对于 Map/Reduce 样式任务。

最新更新