Pipe Utilization管道利用率

概述

CUDA设备的每个流式多处理器(SM)都具有许多专门用于执行特定任务的硬件单元。在芯片级,这些单元提供执行管道,翘曲调度程序将指令发送到这些管道。例如,结构单元提供执行结构获取和执行结构过滤的功能。加载/存储单元获取数据并将其保存到内存中。了解这些管道的利用率并了解它们与目标设备的峰值性能有多接近,是分析内核执行效率的关键信息;还可以确定由于超标订购特定类型的管道而导致的性能瓶颈。

背景

开普勒GK110白皮书和NVIDIA GeForce GTX 680白皮书都描述并比较了最新CUDA计算设备的架构细节。下表简要总结了SM的单位计数及其每个周期对应的管道吞吐量:

对于这些体系结构吞吐量数字,管道利用率指标报告运行时每个管道的观察利用率。高管道利用率表明,在内核执行期间,相应的计算资源被大量使用并且经常处于忙碌状态。低值表示管道不经常使用,资源闲置。单个管道的结果彼此独立;将两个或多个管道利用率百分比相加不会产生有意义的值。由于管道度量报告为内核启动期间的平均值,因此低值不一定排除管道在内核执行期间的某个时间点是瓶颈。

算术指令由多个管道执行,如前表中32位浮点指令和特殊函数操作的两个示例所示。这些管道提供了非常不同的吞吐量,反过来导致了本地算术指令的不同吞吐量,如CUDA C编程指南所述。对于本实验支持的CUDA设备,这些运算吞吐量为:

根据定义,指令吞吐量表示每个SM每个周期可以处理多少操作。换言之,与指令吞吐量较低的操作相比,具有高吞吐量的操作的发出成本更低。算术工作负载使用这个简化的成本模型,通过加权发出的指令计数和相应的反向指令吞吐量。这样做可以评估哪种类型的算术指令占整个处理成本的多少。这对于算术管道利用率高的内核来说尤其有用,以确定哪类算术操作可能达到了可用吞吐量限制。

Charts

Pipe Utilization

显示在内核执行期间SMs的四个主要逻辑管道的平均利用率。有助于调查管道是否被超额订阅,从而限制了内核的性能。这也有助于估计添加更多的工作是否能够很好地扩展,或者是否会达到管道限制。在这种情况下,增加更多的工作可能是指增加更多的算术工作负载(例如,通过提高某些计算的准确性)、增加内存操作的数量(包括引入寄存器溢出),或者增加每个SM的活动扭曲数目的目的是改进指令延迟隐藏。

报告的值是内核执行期间的平均值。低利用率并不保证管道在内核执行期间的某个时刻不会被超额订阅。

Metrics

Load / Store

加载/存储包括所有发出的指令,这些指令触发对目标设备的内存系统的请求,不包括结构操作。负责全局、本地、共享内存以及任何原子操作的加载和存储操作。还包括泄漏登记。计算能力3.5及更高版本的设备支持通过只读数据缓存(LDG)加载全局内存;这些操作不影响加载/存储组,而是在结构管道利用率中考虑。在高负载/存储利用率的情况下,收集内存实验以获得有关执行的内存操作的类型、计数和效率的更多信息。

结构覆盖所有执行结构提取的已发出指令,对于计算能力为3.5及更高版本的设备,通过只读数据缓存(LDG)加载全局内存。如果这个指标很高,请运行内存-结构实验来更详细地评估执行的结构请求。

控制流包括所有对控制流有影响的已发出指令,如分支指令(BRA、BRX)、跳转指令(JMP、JMX)、函数调用(CAL、JCAL)、循环控制指令(BRK、CONT)、返回指令(RET)、程序终止(EXIT)和屏障同步(BAR)。有关这些单独指令的详细信息,请参阅“指令集参考”。如果控制流利用率很高,请运行分支统计实验;这有助于了解控制流对总体内核执行性能的影响。

算术涵盖所有发出的浮点指令、整数指令、转换操作和移动指令。请参阅“指令集参考”,以获取这些组中每个组的汇编指令的详细列表。如果算术管道利用率很高,请检查算术工作负载图,以确定成本最高的指令类型。

Arithmetic Workload

提供各种算术指令的估计成本分布。成本模型是基于问题计数加权相应的指令吞吐量的倒数。指令类与本文背景部分给出的算术吞吐量表的行相匹配。

算术指令由芯片上的多个流水线执行,这些流水线可以并行运行。因此,算术工作负载分布并不是流水线利用率图表所示算术流水线百分比的真实划分;然而,成本估计值最高的指令类型很可能导致最高的片上流水线利用率。

Metrics

All references to individual assembly instructions in the following metric descriptions refer to the native instruction set architecture (ISA) of CUDA devices as further described in the Instruction Set Reference.

FP32 Estimated workload for all 32-bit floating-point add (FADD), multiply (FMUL), multiply-add (FMAD) instructions.

FP64 Estimated workload for all 64-bit floating-point add (DADD), multiply (DMUL), multiply-add (DMAD) instructions.

FP32 (Special) Estimated workload for all 32-bit floating-point reciprocal (RCP), reciprocal square root (RSQ), base-2 logarithm (LG2), base 2 exponential (EX2), sine (SIN), cosine (COS) instructions.

I32 (Add) Estimated workload for all 32-bit integer add (IADD), extended-precision add, subtract, extended-precision subtract, minimum (IMNMX), maximum instructions.

I32 (Mul) Estimated workload for all 32-bit integer multiply (IMUL), multiply-add (IMAD), extended-precision multiply-add, sum of absolute difference (ISAD), population count (POPC), count of leading zeros, most significant non-sign bit (FLO).

I32 (Shift) Estimated workload for all 32-bit integer shift left (SHL), shift right (SHR), funnel shift (SHF) instructions.

I32 (Bit) Estimated workload for all 32-bit integer bit reverse, bit field extract (BFE), bit field insert (BFI) instructions.

Logical Ops Estimated workload for all logical operations (LOP).

Shuffle Estimated workload for all warp shuffle (SHFL) instructions.

Conv (From I8/I16 to I32) Estimated workload for all type conversions from 8-bit and 16-bit integer to 32-bit types (subset of I2I).

Conv (To/From FP64) Estimated workload for all type conversions from and to 64-bit types (subset of I2F, F2I, and F2F).

Conv (All Other) Estimated workload for all all other type conversions (remaining subset of I2I, I2F, F2I, and F2F).

Analysis

如果装载/储存管道利用率高…

…运行内存实验,寻找超出每个请求的理想事务数的内存操作;改进这些非最佳内存访问可以减少加载/存储管道的负载。

…考虑是否可以通过使用不同的实现或不同的算法来减少执行的内存操作的总数。

…并且单个线程访问内存中的连续值,确保使用最宽的内存访问类型来执行操作。例如,如果每个线程需要读取128字节的连续内存,那么在一次128字节的访问中读取数据要比执行4次32字节的访问要好。为此,请使用内置向量类型。

…并且内存统计-本地实验显示本地内存请求数很高,可以打印PTX优化汇编程序的代码生成统计信息(–ptxas options=-v)以获得溢出字节数;如果高,请尝试通过更改内核启动的执行配置或启动边界来减少溢出。

如果纹理管道利用率高…

…运行内存统计-纹理实验,并研究纹理提取的效率。

…考虑是否可以通过使用不同的实现或不同的算法来减少执行的纹理操作的总数。还要检查内核是否已经接近目标设备的预期峰值纹理性能。

如果控制流管道利用率高…

…进行分支统计实验。在低控制流效率和高流量控制发散的情况下,尝试以最小化翘曲发散为目标重新组合核心网格的线程。

如果算术管道利用率高…

…检查算术工作负载并开始优化成本最高的指令类型。在可能的情况下,喜欢更快、更专业的数学函数,而不是更慢、更通用的函数。另请参阅CUDAC最佳实践指南中的优化算术指令的一般提示。

…运行实现的FLOPS实验和实现的IOPS。检查内核是否接近目标设备的峰值性能,并研究是否有可能减少执行的算术指令数。

Pipe Utilization管道利用率相关推荐

  1. linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道

    与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...

  2. Shell入门(六)之Shell pipe(管道)

    Shell入门(六)之Shell pipe(管道) Shell pipe(管道)命令 pipe(管道)命令使用|界定符号. pipe管道命令|,仅能处理经由前面一个指令传来的信息,也就是标准输出(st ...

  3. Linux系统编程:pipe匿名管道的使用,实现linux命令下管道命令

    pipe函数介绍 函数原型int pipe(int pipefd[2]) 来创建匿名管道; 传出2个fd 文件描述符,pipefd[0]表示匿名管道的读端,pipefd[1]表示匿名管道的写端.有这个 ...

  4. linux pipe 阻塞,Linux pipe():從管道中讀取數據並不總是能夠解阻塞寫入器

    I have a problem using pipe under Linux. I would like to fill a pipe to make further write's call bl ...

  5. #Linux#进程间通信# 管道(pipe)-匿名管道pipe

    我们通常把一个进程连接到另一个进程的一个数据流称为一个"管道",通常是用作把一个进程的输出通过管道连接到另一个进程的输入.管道本质上是内核的一块缓存.内核使用环形队列机制,借助内核 ...

  6. Linux 3.进程间通信(IPC)(pipe 无名管道、mkfifo 有名管道、ftok、msgget、msgrcv、msgsnd、msgctl 消息队列)

    Linux 3.进程间通信(IPC) 进程间通信: 进程间方式: pipe 管道(无名管道) 头文件及原型 特点 pipe 示例 FIFO(有名管道) 管道文件的创建 mkfifo 头文件及原型 mk ...

  7. Dirty Pipe脏管道提权漏洞复现(CVE-2022-0847)

    TOC 0x001 漏洞描述? CVE-2022-0847是自 5.8 以来 Linux 内核中的一个漏洞,攻击者利用该漏洞可以覆盖任意只读文件中的数据.这样将普通的权限提升至root权限,因为非特权 ...

  8. pipe 双管道 简易实现代码

    #include<stdio.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h&g ...

  9. Android qemu pipe高速管道(九)

    介绍 Android 模拟器实现了一个特殊的虚拟设备,用于提供客户 Android 系统和模拟器本身 非常 快速的通信通道. 在客户 Android 系统端,用法非常简单,如下: 1/ 打开 /dev ...

最新文章

  1. iOS视频流采集概述(AVCaptureSession)
  2. linux mysql 知乎_在 Linux 上安装 MariaDB 或 MySQL | Linux 中国
  3. Sidebar Enhancements使用说明
  4. 图像凸性检测函数convexityDefects在Python2.7下使用opencv3.0的问题
  5. Eigen求解数学问题(一)
  6. 【LeetCode】LeetCode之乘积为正数的最长子数组长度——暴力枚举+动态规划+Kadane算法
  7. c语言圈子,C语言经典编程
  8. Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time)...
  9. vector容器中清空元素(但原来的元素还在)
  10. 深度学习之卷积、全连接、反卷积等
  11. IO复用与select函数
  12. php判断浏览器和语言
  13. java环境变量配置和android sdk环境变量配置
  14. 厦门大学353卫生综合考研参考书目
  15. 只有PHP大牛才能读懂的内涵图
  16. 计算机本体应用,本体评估方法研究综述
  17. 『Java』文件与IO流
  18. python输入数字成数组_python 怎么把数字加入数组
  19. 学计算机和英语哪个好考,英语不好,学计算机哪方面比较好?
  20. 微信公众号获取AccessToken

热门文章

  1. Github配置(git+vscode+python+jupyter)
  2. C++ 笔记(31)— 类继承
  3. Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符
  4. Tensorflow会话
  5. Conv1D和Conv2D的区别
  6. 单周期十条指令CPU设计与verilog实现(Modelsim)
  7. SpringBoot-web开发(二): 页面和图标定制(源码分析)
  8. 人工智能AI Boosting HMC Memory Chip
  9. 什么样的技术将在后大流行的世界里兴起
  10. Tomcat之the jre_home environment variable is not defined correctly this environment variable is need