2012-05-15 35 views

回答

2

不,你不能。共享内存具有线程块生命周期。在一个__global__函数调用期间,属于一个组的所有线程都可以访问存储在其中的变量。

+2

共享内存具有块范围生命周期,而不是内核范围。 – talonmies

+0

@talonmies,谢谢!对不起,我的意思是一样的,但是在术语上是错误的。我的意思是,而不是全局内存(实际上,当你不调用cudaFree),没有办法让全局函数调用之间变量。 – geek

0

尝试页锁内存,但速度应该比图形内存慢得多。 cudaHostAlloc(void ** ptr,size_t size,cudaHostAllocMapped); 然后发送ptr到内核代码。

0

以前,你可以用非标准的方式做到这一点,每个共享内存块都有一个唯一的ID,下一个内核会检查这个ID,因此在这个共享内存块上执行所需的处理。这很难实现,因为您需要确保每个内核的完全占用并处理各种角落情况。另外,如果没有正式支持,coulf不会依赖计算设备和cuda版本之间的兼容性。