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. Java基础知识强化之IO流笔记82:NIO之 Pipe(管道)

    1. Java NIO 管道是2个线程之间的单向数据连接.Pipe有一个source通道和一个sink通道.数据会被写到sink通道,从source通道读取. 这里是Pipe原理的图示: 2. Pip ...

  2. python Pipe 双管道通信

    管道:是python多进程中一种交换数据的方式 from multiprocessing import Process,current_process,Queue,Pipe import time i ...

  3. 进程队列(Queue),Pipe(管道), Manager 进行进程之间的数据传递和传输

    进程Queue,实现进程传输的队列 1.Queue from multiprocessing import Process, Queue def f(q): q.put('1') q.put('2') ...

  4. 78.pipe多管道云端,客户端通信

    压力测试截图: 云端 定义管道缓存区大小,最多连接数量(线程个数),当前线程个数,管道名字 //缓冲区大小 #define SIZE 4096 //最多连接数量 #define MAX_CONNECT ...

  5. Linux下进程间通信方式——pipe(管道)

    每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把 ...

  6. 用Python操作Named pipe命名管道,实用做法——os.read 或 os.write

    https://blog.csdn.net/mayao11/article/details/50618598

  7. pipe()管道最基本的IPC机制

    <h4>进程间通信 fork pipe pie_t 等用法(管道机制 通信)</h4>每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之 ...

  8. 管道Pipe

    管道Pipe java.nio.channels包中含有一个名为Pipe(管道)的类.广义上讲,管道就是一个用来在两个实体之间单向传输数据的导管.管道的概念对于Unix(和类Unix)操作系统的用户来 ...

  9. Linux - 简明Shell编程10 - 管道(Pipe)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash echo '##### Num ...

随机推荐

  1. Python第一章-基础知识

    第一章:基础知识 1.1 安装python.     直接官网下载最新的python然后默认安装就可以了,然后开始菜单里找到pyhton *.*.* Shell.exe运行python的交互shell ...

  2. Linux中使用gdb dump内存

    在应急响应中,我们往往会有dump出某一块内存下来进行分析的必要.今天要讲的是利用gdb命令dump出sshd进程的内存. 按照 Linux 系统的设计哲学,内核只提供dump内存的机制,用户想要du ...

  3. Portswigger web security academy:OS command injection

    Portswigger web security academy:OS command injection 目录 Portswigger web security academy:OS command ...

  4. CTFHub-easy_search

    easy_search 玩了好些天,今天做道题找找状态,明天开始肝了 打开是一个登录框 用amdin/admin尝试了一下,提示登陆失败 这里肯定不会是暴力破解,我猜是sql注入,试了万能密码or 1 ...

  5. MetInfo Password Reset Poisoning By Host Header Attack

    if we know some user's email, the we will can reset the user's email by host header attack. The atta ...

  6. layui中流加载layui.flow

    1.引入layui.css和layui.js 2. html中定义容器 <div id="demo"></div> js部分: layui.use('flo ...

  7. 【小技巧】启动Tomcat 提示端口被占用 怎么办?一句命令解决

    windows环境: 方法1: 1.win+r 打开黑界面 2.输入命令 netstat -ano|findstr 8080 3.输入命令 taskkill /pid xxxx /f Linux环境: ...

  8. 一句 Task.Result 就死锁, 这代码还怎么写?

    一:背景 1. 讲故事 前些天把 .NET 高级调试 方面的文章索引到 github 的过程中,发现了一个有意思的评论,详见 文章,截图如下: 大概就是说在 Winform 的主线程下执行 Task. ...

  9. JSON简单了解

    JSON简单了解 简介 JSON (JavaScript Object Notation):一种简单的数据格式,比xml更轻巧.JSON 是 JavaScript 原生格式,这意味着在 JavaScr ...

  10. [源码解析] 并行分布式框架 Celery 之 容错机制

    [源码解析] 并行分布式框架 Celery 之 容错机制 目录 [源码解析] 并行分布式框架 Celery 之 容错机制 0x00 摘要 0x01 概述 1.1 错误种类 1.2 失败维度 1.3 应 ...