cuda - : DRAM Throughput vs Global Memory Throughput有什么区别

标签 cuda gpu gpgpu nvidia

实际吞吐量 CUDA 分析器使用四个指标报告内核实现的结果:

  • 全局内存负载吞吐量
  • 全局内存存储吞吐量
  • DRAM 读取吞吐量
  • DRAM 写入吞吐量

  • CUDA C 最佳实践指南将全局内存加载/存储吞吐量描述为实际吞吐量,并没有具体说明 DRAM 读/写吞吐量。

    CUPTI 用户指南定义:
  • 全局内存负载吞吐量为 ((128*global_load_hit) + (l2_subp0_read_requests + l2_subp1_read_requests) * 32 - (l1_cached_local_ld_misses * 128))/(gputime)
  • 全局内存存储吞吐量为 (l2_subp0_write_requests + l2_subp1_write_requests) * 32 - (l1_cached_local_ld_misses * 128))/(gputime)
  • DRAM 读取吞吐量为 (fb_subp0_read + fb_subp1_read) * 32/gputime
  • DRAM 写入吞吐量为 (fb_subp0_write + fb_subp1_write) * 32/gputime

  • 我了解 DRAM 读/写吞吐量,因为 fb_subp* 计数器报告了一些 DRAM 访问(32 字节访问增加 1)并为所有 SM 收集。所以我很清楚,吞吐量是根据 gputime 和访问的字节数计算的。

    我不明白全局内存吞吐量定义。 global_load_hit 和计数器没有定义。我不明白为什么在这两种情况下都减去了 l1_cached_local_ld_misses。

    在这种情况下,DRAM 与全局内存有什么不同吗?

    如果我想知道内核的实际吞吐量是多少,我应该使用 DRAM 还是全局内存吞吐量指标?

    最佳答案

    全局内存吞吐量是指令从全局地址空间请求的数据量。 global_load_hits 是来自全局请求的 L1 缓存命中数(缓存行大小为 128 字节)。公式的其余部分通过计算对 L2 的所有访问来估算未命中 L1 的访问的全局吞吐量。

    全局内存是一个虚拟内存空间,可以映射到设备内存和系统内存。

    DRAM 是物理设备内存(例如卡上的 GDDR5)。在 L2 未命中时访问 DRAM。以下虚拟地址空间可以在 DRAM/设备内存中(全局、本地、常量、指令和纹理)。请注意,这些内存空间中有许多是虚拟地址空间,最终数据可以驻留在 DRAM 或系统内存中。

    关于cuda - : DRAM Throughput vs Global Memory Throughput有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10901441/

    相关文章:

    c++ - 如何使用 NVidia GPU 在 Windows 下逐步调试 OpenCL GPU 应用程序

    c - 测量 CUDA 内核时的时间不同

    windows - 需要 TensorFlow 依赖项。如何在 Windows 上运行 TensorFlow

    c++ - OpenGL 计算着色器调用

    c++ - Metal - 针对内存延迟优化 GPU 矩阵乘法

    ios - Metal IOS 简单直通计算内核在 iphone 5s 上需要 10 毫秒

    c++ - 为什么一个简单的 CUDA 函数需要这么多本地内存?

    cuda - CUDA动态并行代码的错误结果

    c++ - CUDA 共享内存的可能性

    cuda - 我们真的可以通过 CUDA 流获得性能提升吗?