Intel 性能分析“全家桶” For HPC(一)

本系列是对于HPC应用性能分析涉及的主要方法论及Intel主流工具分享。理解这些方法论将有助于对性能分析结果的理解。同时方法论也可以推广到其他的硬件平台的分析上。除此之外后面也将介绍如何用Vtune, Advisor以及ITAC进行性能分析,以及在性能分析过程中这三种性能工具的区别与分工。

TopDown微架构分析方法(TMA)

TopDown分析方法通过对程序执行时流水线上的执行情况进行进一步抽象,量化了性能指标对执行情况的影响,解决了传统指标(缺失率(Cache Miss Rate和TLB Miss Rate)和每千条指令数(PKI)等)只能表示程度,而无法确定问题的严重性。

TopDown是一个基于事件的度量,它可以识别应用程序中的主要性能瓶颈。 它的目的是显示CPU的流水线在运行应用程序时的平均利用率。 以前,解释事件的框架依赖于计算CPU时钟周期(clock tick)——即确定多少CPU时钟周期被用于那种类型的操作(例如,由于L2缓存未命中)。 与之前不同,这一框架则是基于计算流水线的资源而来的。 要理解TopDown的特性描述,需要从高层次上探索一些底层的微架构概念。 微架构的许多细节在这个框架中被抽象出来,这使得使用者不必是硬件专家也可以使用和理解它。

现代高性能CPU的流水线构成相当复杂。如下图所示,流水线在概念上分为两部分,前端(Front-End)和后端(Back-End)。

添加图片注释,不超过 140 字(可选)

前端负责获取以体系结构指令表示的程序代码,并将其解码为一个或多个低级硬件操作,这被称为micro-ops(uOps)。然后在一个名为分配(allocation)的过程中,uOps被输送到后端。在分配之后,后端负责监控uOp的操作数(data operand)何时可用,并在可用的执行单元中执行uOp。 当uOp的执行完成后,我们把它称作执行完成(retirement),并且 uOp的结果会被提交到体系结构状态(CPU寄存器或写回内存)。通常情况下大多数uOps会完全通过流水线并退出,但有时预测获取的uOps可能会在退出前被取消——比如错误预测的分支。

流水线槽(pipe slot)表示处理一个uOp所需的硬件资源。自顶向下的特性描述假设对于每个CPU内核,在每个时钟周期上,有四个流水线槽可用。它使用专门设计的PMU事件来衡量这些流水线槽的利用率。流水线槽的状态在分配点(在上图中用星号标记)处获取,这里uOps离开前端并到达后端。在应用程序运行时可用的每个流水线槽将根据上面描述的简化流水线视图分为四类。

在任何周期中,流水线槽可以是空的,也可以用uOp填充。如果一个槽位在一个时钟周期内是空的,这将被归于停滞(stall)。需要对流水线槽进行分类,确定是流水线的前端部分还是后端部分造成了停滞。这里使用指定的PMU事件结果计算出来。TopDown特性描述的目标是确定主要的瓶颈,将停滞归因于前端或后端将会是一个关键的考虑点。如果停滞是由于前端无法用uOp填充槽造成的,那么在此周期它将被归类为前端约束,这意味着性能受到前端约束类别下的某些瓶颈的限制。如果前端已准备好uOp,但由于后端尚未准备好处理它而因此无法交付它,则空流水线槽将被分类为后端绑定类别。 后端停滞(backend stalls)通常是由后端耗尽某些资源(例如,负载缓冲区)造成的。

如果处理器没有停止,那么流水线插槽将在分配点被uOp填满。 在本例中,如何对槽进行分类的决定因素是uOp最终是否执行完成。 如果它执行完成了,这个槽被归类为完成。 如果没有,无论是由于前端的不正确的分支预测,还是由于自修改代码导致的流水线刷新之类的清除事件,该槽将被归类为Bad Speculation。这四个类别构成了自顶向下描述的最高级。为了描述一个应用程序,每个流水线槽被精确地分为以下四类之一,如下图所示。

添加图片注释,不超过 140 字(可选)

更详细的划分会根据硬件平台不同有不同层次的支持,如图3所示。目前Intel官方资料上最多可细分至6层性能指标,但根据处理器平台的支持程度不同,大部分可以至少细分至4层。

添加图片注释,不超过 140 字(可选)

TMA既可用于对应用的负载特征的分析,也可以用于对应用的优化。TMA用于负载特征的分析,表现出应用在不同硬件平台上的运行时特征,为硬件选型提供参考。也可以应用类型,来判断应用性能指标是否异常,找出优化方向。如下图所示,不同的应用类型在TMA分析上有不同的表现。

添加图片注释,不超过 140 字(可选)

对应用进行性能优化,通常关注于热点函数分析。针对热点函数的优化,通常能够带来有效的性能收益。对热点函数分析通常可来自于三个层次的调整:1、系统参数层面;2、应用逻辑层面;3、微架构层面。但这也要具体问题具体分析,TMA适合于微架构层面的分析,通过找到在CPU上的硬件性能瓶颈,可以从编译参数角度,以及代码逻辑角度进行优化。从而达到优化的目的。

OpenMP*分析

针对OpenMP部分的性能考量主要来自于4个方面的考虑:

1、 串行时间的比例:OpenMP是通过对特定程序区域利用并行化来加速应用,是一种Fork—Join模式的并行模式。串行时间的比例可以体现程序的并行优化程度。

2、 负载不平衡:通常情况下OpenMP区域的负载都是均衡的,不均衡会使得并行优化在部分时间段内失效,比如因单个线程执行问题导致并行阶段延长。引发不均衡的情况有很多。可结合程序逻辑以及运行时CPU信息,来分析造成此现象得愿意。

3、 并行设置过大:并行区域的并行线程超过了循环次数,使得线程切换切换等待开销超过了并行优化带来的性能收益。

4、 同步锁分析: 在OpenMP区域内同步锁的设置不合理,产生锁竞争。增加没用的时间开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/36013.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Qwen1.8B大模型微调流程

提示:本篇笔记是在微调大模型为法律相关模型的教程下记录的,参考的讲解视频在B站上,一搜微调大模型为法律大模型就有很多视频。 文章目录 1. 数据集1.1 数据下载1.2 数据格式转换 2. 模型训练2.1 安装依赖2.2 模型训练 3. 模型推理3.1 LoRA模…

第十六章 使用 iSCSI 服务部署网络存储

1. iSCSI 技术介绍 硬盘是计算机硬件设备中重要的组成部分之一,硬盘存储设备读写速度的快慢也会对服务器的整体性能造成影响。硬盘存储结构、RAID 磁盘阵列技术以及LVM 技术等都是用于存储设备的技术,尽管这些技术有软件层面和硬件层面之分&#xff0c…

【js面试题】JavaScript 中箭头函数与普通函数的深度剖析

在 JavaScript 编程的世界里,函数是极为重要的组成部分。而随着 ES6 的出现,箭头函数成为了 JavaScript 函数家族中的新成员。它与传统的普通函数有着诸多的不同之处,这些差异深刻地影响着我们编写代码的方式以及代码的执行逻辑。本文将对 Ja…

【漫话机器学习系列】Adaboost算法

Adaboost(Adaptive Boosting)是一种经典的集成学习方法,主要思想是通过将多个弱学习器(通常是简单模型,如决策树桩)加权组合,来提升整体模型的预测能力。Adaboost 是一种自适应的学习方法&#…

SQL靶场第四关

sql靶场第四关攻略 输入?id1页面正常 输入?id1发现页面也正常 输入?id1",页面异常,说明存在sql报错注入 在输入?id1" --页面还是报错 1.判断闭合点 我们需要找到闭合点,尝试在双引号后面加个) 输入?id1") --我们发现…

Trunk链路操作题

Trunk链路操作题 论证:

Alogrithm:三色棋

1. 说明 三色旗的问题最早由 E.W.Diikstra 所提出,他所使用的用语为 Dutch Nation Flag(Dijkstra 为荷兰人),而多数的作者则使用 Three-Color Flag 来称之。 假设有一条绳子,上面有红、白、蓝三种颜色的旗子&#xff0…

需要排序的子数组

题目描述 给定一个无序数组arr,求出需要排序的最短子数组长度 要求:O(N) 如输入:arr{2,3,7,5,4,6},返回4,因为只有{7,5,4,6}需要排序。 分析 以{2,3,7,5,4,6,8,9}为例: 前端小于最小波谷(3…

Python酷库之旅-第三方库Pandas(154)

目录 一、用法精讲 701、pandas.Timestamp.utcnow方法 701-1、语法 701-2、参数 701-3、功能 701-4、返回值 701-5、说明 701-6、用法 701-6-1、数据准备 701-6-2、代码示例 701-6-3、结果输出 702、pandas.Timestamp.utcoffset方法 702-1、语法 702-2、参数 70…

如何启动神通数据库?神通数据库的启动方式一共有几种?

简单总结,神通数据库启动有三种方式: 1、dba管理工具方式 2、服务方式 (1)service oscardb_OSRDBd restart (2)/etc/init.d/oscardb_OSRDBd restart (3)systemctl start oscardb_OS…

Modbus Poll的使用

最近从串口调试助手接触到了Modbus Poll,一开始用的时候有些生疏,了解之后不得不说真香。 相对于串口调试助手,有些设备厂家会给一些点表和指令码,有些也可以通过modbus协议解析出来,相对来说,使用Modbus …

第四学期-智能数据分析-期末复习题

智能数据分析期末复习(2024春) 【考试形式】:闭卷,90分钟,笔试 【题型分布】: 单选题10题,每题3分,共计30分 判断题10题,每题2分,共计20分 填空题5题&…

总结的一些MySql面试题

目录 一:基础篇 二:索引原理和SQL优化 三:事务原理 四:缓存策略 一:基础篇 1:定义:按照数据结构来组织、存储和管理数据的仓库;是一个长期存储在计算机内的、有组织的、可共享 的…

C#实现一个HttpClient集成通义千问-开发前准备

集成一个在线大模型(如通义千问),来开发一个chat对话类型的ai应用,我需要先了解OpenAI的API文档,请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…

python游戏设计---飞机大战

1.前言 上次做飞机大战游戏有人这么说: 好好好!今天必须整一个,今天我们来详细讲解一下,底部找素材文件下载!!! 2.游戏制作 目录如下: 1.导入的包 import pygame import sys imp…

Final Vision Get Picture Pos Send 2 Python Control Robot

import tkinter as tk from tkinter import messagebox, filedialog from tkinter import ttk import socket import threading import subprocess from datetime import datetime from PIL import Image, ImageTk import time # 全局变量 client_socket None connected Fal…

Spring框架-IoC的使用(基于XML和注解两种方式)

一、Spring IoC使用-基于XML 1 IoC使用-基于XML 使用SpringIoC组件创建并管理对象 1.1 创建实体类 package com.feng.ioc.bean;import java.util.Date;/*** program: spring-ioc-demo1* description: 学生实体类* author: FF* create: 2024-12-04 18:53**/ public class Stud…

C++编程控制舵机的实现与应用

在嵌入式编程和物联网应用中,舵机是一种非常重要的执行器,广泛应用于机器人、遥控玩具、机械臂、摄像头云台等多个领域。舵机不仅能够精准地控制角度位置,还能在一定的工作范围内持续保持该位置。在本篇文章中,我们将站在 C 编程教…

对于MySQL中视图的相关实验

以下用该表举例: /*Table structure for table employees */ DROP TABLE IF EXISTS employees; CREATE TABLE employees ( employee_id int(6) NOT NULL DEFAULT 0, first_name varchar(20) DEFAULT NULL, last_name varchar(25) NOT NULL, email varc…

day-90 使数组为空的最少操作次数

思路 统计每个数字出现的次数,计算每个数字的操作次数,将所有操作次数累加返回即可 解题过程 对于每个数字(假设出现次数num),如果num等于1,返回-1;如果num%3等于0,返回num/3;如果num%3不等于0…