9

我在 PTX 信息上没有找到太多有用的信息,--ptxas-options=-v 我发现了一个 2008 NVCC pdf,它有一个小简介,但没有详细信息。
1) 是什么64 bytes cmem[0], 12 bytes cmem[16]意思?我认为它指的是持续的记忆。我在代码中没有使用任何常量内存,所以这必须来自编译器。(什么进入 RO 内存?)
2) 是什么49152+0 bytes smem意思?是的,是共享内存,但是两个#是什么意思呢?
3)是否有文档可以帮助我解决这个问题?(它叫什么?)
4) 我在哪里可以找到解释 *.ptx 文件的文档?(我希望能够阅读/理解 cuda 汇编代码。)

4

2 回答 2

7
  1. cmem在这里讨论。在您的情况下,这意味着 64 个字节用于将参数传递给内核,而 12 个字节被编译器生成的常量占用。

  2. 如果是smem,第一个数字是您的代码请求的数据量,第二个数字 ( 0) 表示用于系统用途的内存量。

  3. 我不知道有关详细ptxas输出格式的任何官方信息。例如,在“CUDA 占用计算器”中,他们只是简单地说对值求和而smem没有任何解释。

  4. nVidia 网站上有几个 PTX 文档。最基本的是PTX: Parallel Thread Execution ISA Version 3.0

于 2012-09-07T18:27:20.193 回答
1

请参阅“其他 NVCC 用法”。他们提到,恒定的银行分配是特定于配置文件的

PTX 指南中,他们说除了 64KB 常量内存之外,他们还有 10 个用于常量内存的银行。驱动程序可以在这些区域中分配和初始化常量缓冲区,并将指向缓冲区的指针作为内核函数参数传递。

我想,为 nvcc 提供的配置文件将处理哪些常量进入哪个内存。无论如何,如果每个常量内存cmem[n] 小于 64KB,我们不必担心,因为每个 bank 的大小为 64KB,并且对网格中的所有线程都是通用的。

于 2013-03-28T17:41:48.027 回答