什么是Cuda共享内存功能

问题描述

我是cuda的新手。我需要在2个或更多块之间交换数组。可以使用内核在块之间的共享内存中交换或交换数据,而无需涉及全局/设备内存。

因此,如果我必须使用全局内存来使块彼此通信。流如何?

我目前的理解是,流按顺序将多个内核排队,并且可以用于将不同的内核应用于不同的块。因此,我可以将共享内存用作应用于2个不同块的内核中的输入。

解决方法

如果我为每个子种群分配了块以使用一些内核和共享内存来计算适应度,我可以在块之间传输数据

不。共享内存具有块范围。它在块之间不可移植。全局内存或堆内存是可移植的,并且有可能被用来保存要由多个块访问的数据。

但是,CUDA中的标准执行模型不支持网格级同步。从CUDA 9开始,使用最新一代的硬件,如果您使用cooperative groups,则支持网格级别同步机制,但是据我所知,PyCUDA和Numba都没有公开该功能。