cuda - Cuda 分析器的“gld_transactions_per_request”指标中的事务和请求是什么?
问题描述
对于一个双精度数组的完美合并访问4096
,每个 8 字节,nvprof
在 Nvidia Tesla V100 上报告以下指标:
global_load_requests: 128
gld_transactions: 1024
gld_transactions_per_request: 8.000000
我找不到事务和对全局内存的请求到底是什么的具体定义,因此我无法理解这些指标。因此我的问题:
- 如何定义内存请求?
- 内存事务是如何定义的?
- 是否
gld_transactions_per_request = 8.00000
表示对双打的完全合并访问?
为了向自己解释,这是我想出的:
- 请求:warp 级的负载,即从 32 个线程合并的一条 warp 级指令。在这种情况下,
32 threads * 8 bytes = 256 byte
负载。 - 这个对吗? - 事务:
32 byte
加载指令。在这种情况下,以这种方式定义的一个事务能够加载32 bytes / 8 bytes = 4
双精度数。 - 这个对吗?如果是这样,这是 Cuda 实现的最大负载指令吗?
使用这些定义,我得出的值与以下相同nvprof
: 访问 4096 个数组项需要 128 个经线级指令(=requests),每个指令有 32 个线程。使用 32 字节加载(=事务)导致 1024 个事务。
解决方案
内存“请求”是访问内存的指令,“事务”是两个内存区域之间数据单元的移动。
推荐阅读
- c# - 如何首先在两个表 asp.core 代码之间建立关系
- docker - 如何暂停运行 luigi 的 docker 容器?
- .htaccess - 如何在不更改 url 的情况下重定向到错误页面
- ios - 正在添加下载任务
- c# - c# wsdl 签名或解密无效
- javascript - JQuery:仅当所选元素是第一个(占位符)时,才将所有选择元素设置为斜体
- c - 如何解决在 TrueSTUDIO for STM32 中设置断点时出现“断点安装失败:报价不匹配”的问题
- java - Facebook登录后从会话中获取用户ID
- sql-server - 数据库中已经有一个名为 I_XXXRECID 的对象
- javascript - 在 Sinon 断言为真后运行 Ava 断言