Cuda gpu compute 1.3中合并和未合并的内存事务数

Cuda gpu compute 1.3中合并和未合并的内存事务数,cuda,opencl,gpu,gpgpu,Cuda,Opencl,Gpu,Gpgpu,cuda探查器手册指出,由于更宽松的合并策略,未合并内存事务的数量将始终为零。但我相信仍然有未愈合的伤口。如何计算呢?是否有任何工具或模拟器可以提供帮助?其中,哪一个似乎是最准确的? 感谢设备1.0,您只有两个选择: 合并内存访问,并在一个内存事务中获取所有数据 内存访问是不可恢复的,数据是一个接一个地获取的——因此,总是有16个内存事务(半扭曲) 然而,在设备1.2和1.3中,这是不同的。 想象一下,你的设备内存被分成128字节的块。您需要的内存事务数与所命中的块数相同。因此: 如果您获

cuda探查器手册指出,由于更宽松的合并策略,未合并内存事务的数量将始终为零。但我相信仍然有未愈合的伤口。如何计算呢?是否有任何工具或模拟器可以提供帮助?其中,哪一个似乎是最准确的?
感谢设备1.0,您只有两个选择:

  • 合并内存访问,并在一个内存事务中获取所有数据
  • 内存访问是不可恢复的,数据是一个接一个地获取的——因此,总是有16个内存事务(半扭曲)
然而,在设备1.2和1.3中,这是不同的。 想象一下,你的设备内存被分成128字节的块。您需要的内存事务数与所命中的块数相同。因此:

  • 如果您获得完全合并的访问,那么您将获得1个内存事务
  • 如果只是未对齐,可能会得到2个内存事务
  • 如果每个线程访问第n个字,则可以获得3、4甚至更多的内存事务
  • 在最坏的情况下,您可以获得16个内存事务
  • 但是,即使访问是随机的,但是局部的,两个线程可能恰好落在同一块中,您将需要不到16个内存事务
有这么多的案例,所以将其分为两类:合并/未合并不再有任何意义。这就是为什么Cuda探查器走了另一条路。它们只是计算内存事务的数量。访问模式越随机,内存事务计数越高,即使内存访问指令的计数相同


以上是稍微简化的模型。实际上,内存事务可以访问128字节、64字节或32字节宽的块,以节省带宽。在探查器中查找load 128b、load 64b、load 32b和store 128b、store 64b、store 32b列。

是什么让您确定存在未恢复的内存事务?将内核的内存吞吐量与CUDA memcpy这样的已知基准进行比较不是更容易吗?谢谢您的详细回答。不过,这只是另一个想法:假设所有扭曲的内存访问模式都是相似的;如果我们直接将计数器gld_与计数器gld_请求相关联,那么我们可以得到每个warp的(未校准的)内存事务数?