1

我是 CUDA 编程的新手,由于性能原因,我主要使用每个块的共享内存。我的程序现在的结构方式是,我使用一个内核加载共享内存,另一个内核读取预加载的共享内存。但是,据我了解,共享内存不能在两个不同的内核之间持续存在。

我有两个解决方案;我不确定第一个,第二个可能很慢。

第一个解决方案:我不使用两个内核,而是使用一个内核。加载共享内存后,内核可能会等待主机的输入,执行操作,然后将值返回给主机。我不确定内核是否可以等待来自主机的信号。

方案二:加载共享内存后,将共享内存值复制到全局内存中。当下一个内核启动时,将值从全局内存复制回共享内存,然后执行操作。

请评论这两种解决方案的可行性。

4

1 回答 1

2

我会使用您提出的第一个解决方案的变体:正如您已经怀疑的那样,您不能等待内核中的主机输入 - 但您可以在某个时候同步您的内核。只需调用“__syncthreads();” 在将数据加载到共享内存后在内核中。

我不太了解您的第二个解决方案:为什么要将数据复制到共享内存只是为了将其复制回第一个内核中的全局内存?或者这个第一个内核也会计算一些东西吗?在这种情况下,我想先将初步结果存储在共享内存中无济于事,我宁愿将它们直接存储在全局内存中(但是,这可能取决于算法)。

于 2012-06-22T17:30:28.507 回答