我从我自己的项目中知道,cuda 在使用__constant__
内存时具有例如文件范围链接。这意味着我必须在执行cudaMemcpyToSymbol
. 那么对于其他哪些存储/内存类型,cuda 使用文件范围链接?我认为它也用于texture
. 但是__shared__
内存是什么?
问问题
260 次
1 回答
2
第一点是,在经典的CUDA编译模型中,所有设备符号的作用域要求都是翻译单元作用域。一切都意味着至少
- __global__ 函数
- __device__ 函数
- __texture__ 对象
- __constant__ 内存
- __shared__ 内存声明为外部
- __device__ 符号
所有这些都必须在使用它们的同一翻译单元中定义,以便运行时正常工作。根本原因是上面列表中的所有对象都必须发送到同一个 CUDA 模块(这是驱动程序 API 概念)中才能正常工作。
CUDA 5 引入了一种单独的编译模式,它实际上是一种静态链接模型。这意味着符号不需要在同一个翻译单元中定义,它们可以被前向声明,并且链接器将在设备代码链接传递期间处理符号匹配。
于 2013-06-27T06:06:45.760 回答