什么是 Cuda 探查器'gld_transactions_per_request'指标中的事务和请求?



对于对4096数组的完美合并访问,每8字节一次,nvprof在Nvidia Tesla V100上报告以下指标:

global_load_requests: 128
gld_transactions: 1024
gld_transactions_per_request: 8.000000

我找不到事务和对全局内存的请求究竟是的具体定义,所以我很难理解这些指标。因此我的问题:

  1. 如何定义内存请求
  2. 内存事务是如何定义的
  3. gld_transactions_per_request = 8.00000是否表示对替身的完全联合访问

为了向自己解释,我想出了这个:

  • 请求:在warp级别上加载,即从32个线程合并一条warp级别指令。在这种情况下,32 threads * 8 bytes = 256 byte负载。——这是正确的吗
  • 事务:32 byte加载指令。在这种情况下,以这种方式定义的一个事务能够加载32 bytes / 8 bytes = 4doubles这是正确的吗?如果是,这是Cuda实现的最大加载指令吗

使用这些定义,我得到了与nvprof相同的值:访问4096个数组项需要128个曲速级指令(=请求(,每个指令有32个线程。使用32字节的加载(=事务(会产生1024个事务。

内存"请求";是访问存储器的指令;交易";是一个数据单元在两个内存区域之间的移动。

最新更新