1

我从我自己的项目中知道,cuda 在使用__constant__内存时具有例如文件范围链接。这意味着我必须在执行cudaMemcpyToSymbol. 那么对于其他哪些存储/内存类型,cuda 使用文件范围链接?我认为它也用于texture. 但是__shared__内存是什么?

4

1 回答 1

2

第一点是,在经典的CUDA编译模型中,所有设备符号的作用域要求都是翻译单元作用域。一切都意味着至少

  1. __global__ 函数
  2. __device__ 函数
  3. __texture__ 对象
  4. __constant__ 内存
  5. __shared__ 内存声明为外部
  6. __device__ 符号

所有这些都必须在使用它们的同一翻译单元中定义,以便运行时正常工作。根本原因是上面列表中的所有对象都必须发送到同一个 CUDA 模块(这是驱动程序 API 概念)中才能正常工作。

CUDA 5 引入了一种单独的编译模式,它实际上是一种静态链接模型。这意味着符号不需要在同一个翻译单元中定义,它们可以被前向声明,并且链接器将在设备代码链接传递期间处理符号匹配。

于 2013-06-27T06:06:45.760 回答