【超算/先进计算学习】日报5

news2024/11/24 6:38:59

目录

  • 今日已完成任务列表
  • 遇到的问题及解决方案
  • 任务完成详细笔记
    • 程序性能分析
      • 程序流程分析
      • 程序静态分析工具 understand
      • 程序性能动态分析工具 gprof-使用方式
      • 程序性能动态分析工具 gprof-输出结果详解
      • 程序性能动态分析工具 gropf-函数调用关系图
      • 程序动态分支辅助方式-计时函数
      • 其他性能分析工具及 valgrind + Qcachegrind
      • HPCG 性能分析实战
      • 练习 (使用 gprof 分析 jacobi 程序性能)
  • 对自己的表现是否满意
  • 其他反馈

今日已完成任务列表


4-3、程序性能分析

遇到的问题及解决方案


编译安装HPCG程序的串行版本,并使用gprof对其进行性能分析。
不会装 〒▽〒

任务完成详细笔记


程序性能分析

程序流程分析

在这里插入图片描述
静态分析,即利用代码静态分析工具,对代码进行数据对象、函数接口封装和调用分析

  • 代码浏览的分析工具是基于各种编程语言语法,预处理和编译方式以及配置安装信息来有组织有条理的显示代码源文件的工具
  • 借助代码浏览分析工具,可以阅读和编辑代码、在代码中进行检索、了解代码的内层逻辑结构、分析代码的语法结构等

程序静态分析工具 understand

用于静态代码分析的工具
[略]

程序性能动态分析工具 gprof-使用方式

动态分析是指在程序实际调用过程中去分析程序执行了哪些函数和流程
Gprof 是一款易用的动态分析工具,除了函数的调用关系,同时还能给出函数的调用时间分布,为我们的性能分析提供参考,快速定位程序的热点函数位置
使用Gprof分析的流程:

  • 编译代码文件
    g++ -pg main.cpp -o main
  • 执行可执行文件
    yhrun -p thcp1 -N 1 -n 1 main
  • 对生成的 gmon.out 文件进行转换 (二进制转为普通文本文件)
    gprof main gmon.out>output.txt

程序性能动态分析工具 gprof-输出结果详解

  • Flat profile:扁平化 (性能) 概况
    扁平化性能概况不区分函数调用关系,以程序中调用过的完整封装的函数体为对象,列出其执行时间、调用次数等作为性能描述
  • Call graph:调用图谱
    调用图谱将程序中的独立函数体按照其实际调用过程,列出上下文调用关系,以列表的形式给出来,通过辅助工具可以据此绘制出程序的调用关系图
    在这里插入图片描述
    在这里插入图片描述

time:当前条目函数所有调用次数总执行时间 (包括子调用) 占整个程序执行时间的百分比
self:当前函数本身的执行时间

  • 对于当前函数,self 表示其自身除去子调用的执行时间
  • 对于当前函数的父调用,self 表示当前函数本身 (除去子调用) 对父调用的执行时间总贡献
  • 对于当前函数的子调用,self 表示当前函数的各子调用各自的执行总时间
    children:当前函数子调用的执行时间
  • 对于当前函数,children 表示所有子调用的总执行时间
  • 对于当前函数的父调用,children 表示当前函数的子调用对父调用的执行时间总贡献
  • 对于当前函数的子调用,children 表示当前函数的各子调用所调用的子调用对当前函数执行总时间的贡献

called:调用次数

  • 对于当前函数,表示该函数实际的总调用次数,“+” 表示该函数为递归调用
  • 对于当前函数的父调用,n/N,n 表示在父调用中实际调用的次数,N 表示当前函数调用的总次数
  • 对于当前函数的子调用,n/N,n 表示调用了该子调用多少次,N 该子调用被调用的总次数

练习
在这里插入图片描述
耗时最长的两个函数是:( testfunc1 )和( testfunc2 )。
testfunc2函数自身执行的时间是:( 1.59 )seconds。
main函数分别调用了testfunc1函数( 10 )次,testfunc4函数( 1 )次,testfunc3函数( 1 )次,testfunc2函数( 1 )次。
testfunc2函数总共被调用了5次,其中main函数调用了testfunc2( 1 )次,testfunc4调用了testfunc2( 3 )次,testfunc3调用了testfunc2( 1 )次。
testfunc4递归调用( 1 )次。

程序性能动态分析工具 gropf-函数调用关系图

生成调用关系图
gprof2dot.py output.txt | dot -Tpng -o output.png
在这里插入图片描述

程序动态分支辅助方式-计时函数

手动在程序中添加 C 标准库中提供的计时函数对程序速度进行统计

  • 计时函数 clock_gettime
    函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒
#include<time.h>
int clock_gettime(clockid_t clk_id,struct timespec *tp);
struct timespec
{
    time_t tv_sec; /* 秒*/
    long tv_nsec; /* 纳秒*/
}

测试:

#include <time.h>
#include <stdio.h>
#include <unistd.h>
 
int main(int argc, char **argv)
{
    struct timespec time1 = {0, 0}; 
    struct timespec time2 = {0, 0};
	
    float temp;
 
    clock_gettime(CLOCK_REALTIME, &time1);      
    usleep(1000);
    clock_gettime(CLOCK_REALTIME, &time2);   
    temp = (time2.tv_nsec - time1.tv_nsec) / 1000000;
    printf("time = %f ms\n", temp);
    return 0;
}
  • 统计时钟周期数 clock
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

int main()
{
    int i=10;
    clock_t start,finish;
    double Times, Times1;
    start=clock();
    while(i--){
        cout<<i<<endl;
    };
    finish=clock();
    Times=(double)(finish-start)/CLOCKS_PER_SEC;
    Times1=(double)(finish-start)/CLK_TCK;
    cout<<"start(时钟打点): "<<start<<endl;
    cout<<"finish(时钟打点): "<<finish<<endl;
    cout<<"CLOCKS_PER_SEC: "<<CLOCKS_PER_SEC<<endl;
    cout<<"CLK_TCK: "<<CLK_TCK<<endl;
    cout<<"运行时间(秒)(CLOCKS_PER_SEC): "<<Times<<endl;
    cout<<"运行时间(秒)(CLK_TCK): "<<Times1<<endl;

    return 0;
}

其他性能分析工具及 valgrind + Qcachegrind

支持内存调试、内存泄漏检测以及性能分析、检测线程错误的软件开发工具

  • Memcheck
    用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对 malloc()/free()/new/delete 的调用都会被捕获
  • callgrind
    和 gprof 类似的分析工具,但其提供的信息更全面,不需要添加额外的编译选项,支持多线程
  • Cachegrind
    Cache分析器,模拟 CPU 中的缓存,能够精确地指出程序中 cache 的丢失和命中
    valgrind+Qcachegrind的使用
    yhrun -N 1 -n 1 -p thcp1 [valgrind_Path] [可执行文件_Path]
    之后将 callgrind.out.xxx 文件导入 Qcachegrind

HPCG 性能分析实战

在这里插入图片描述
在这里插入图片描述

练习 (使用 gprof 分析 jacobi 程序性能)

cp -r ~/software/jacobi ~/trainees/username

进入jacobi目录

g++ -pg -O1 -o jacobi jacobi.cpp

编写 run_jacobi.sh文件

#!/bin/bash
yhrun -c 1 -N 1 -n 1 jacobi

执行

 yhbatch -N 1 -p thcp1 ./run_jacobi.sh

对 gprof 文件进行转化

gprof jacobi gmon.out>output.txt

查看 output.txt 内容

cat output.txt

对自己的表现是否满意


今天主要对程序性能分析的概念和常用工具进行了了解,并使用 gprof 对一些简单程序进行了分析和解读,还是挺有收获的。

其他反馈


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

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

相关文章

git版本控制

git版本控制 time&#xff1a;2023-04-18 版本控制 集中式版本控制 多人协作开发 创建仓库 使用当前目录作为 Git 仓库&#xff0c;我们只需使它初始化。 git init使用我们指定目录作为Git仓库。 git init newrepo克隆远程仓库 git clone https://gitee.com/zhang-min…

银行数字化转型导师坚鹏:银行数字化创新应用与案例分析

银行数字化创新应用与案例分析 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不知道如何进行数字化创新&#xff1f; 不知道金融科技在银行业的重要应用&#xff1f; 不清楚银行同业的数字化创新有哪些案例&#xff1f; 课程特色&#xff1a; 用独特视角…

在C上++ -- 函数重载与引用

一、函数重载 函数重载&#xff1a;是函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这 些同名函数的形参列表(参数个数 或 类型 或 类型顺序)不同&#xff0c;常用来处理实现功能类似数据类型 不同的问题。 简单来说&#xff1a…

点云处理及三维重建软件(Point Cloud Viewer, PCV)的设计与实现

GitHub 地址&#xff1a;point-cloud-viewer 文章目录 使用教程以及相关工具库Step 1 搭建环境Step 2 使用Cmake构建工程Step3 使用VS 编写code并编译执行 点云处理及三维重建软件(PCV)的设计与实现一&#xff0c; 软件总体设计1.1 软件设计流程需求分析总体设计技术选型详细设…

【RestFul系列】RestFul学习笔记

目录 一、REST定义 二、REST架构的主要原则 三、RESTful介绍 1、资源&#xff08;Resources&#xff09; 2、 表现层&#xff08;Representation&#xff09; 3、 状态转化&#xff08;State Transfer&#xff09; 四、RESTful的使用 1、RESTful资源操作 2、接口示例&…

verilog设计实现8b-10b编码器包括3b4b,5b6b 及modelsim仿真

下面是8b10b编码器的设计步骤。 确定数据输入和输出接口。例如,您需要确定8位并行数据输入和10位串行数据输出。 计算数据带宽。这与芯片中可用的时钟速度密切相关。 选择编码表。根据应用选择最佳编码表,8b10b编码器至少应使用一张编码表。详细了解和选择编码表有利于改善编…

图的存储及基本操作总结(邻接矩阵、邻接表)及C/C++代码实现

文章目录 前言一、邻接矩阵1.概念2.图像示例3. 代码实现注意邻接矩阵的特点 二、邻接表1.概念2.图像示例3.代码实现邻接表的特点 前言 图是一种比较复杂的数据结构&#xff0c;每个结点之间可以有多种关系。 所以&#xff0c;一个图可以呈现出千奇百怪的形式。 对于不同的形式…

使用FFMPEG库将YUV编码为H264

准备 ffmpeg 4.4 p准备一段yuv420p的格式的视频原始数据 这里我们使用命令直接提取 ffmpeg -i .\beautlWorld.mp4 -pixel_format yuv420p -s 1280x720 yuv420p_1280x720.yuv 编码流程 大致可以分为以下几步&#xff1a; 1.初始化编码器并设置参数 2.初始化AVPacket和AVFr…

【Java基础 1】Java 环境搭建

&#x1f34a; 欢迎加入社区&#xff0c;寒冬更应该抱团学习&#xff1a;Java社区 &#x1f4c6; 最近更新&#xff1a;2023年4月22日 文章目录 1 java发展史及特点1.1 发展史1.2 Java 特点1.2.1 可以做什么&#xff1f;1.2.2 特性 2 Java 跨平台原理2.1 两种核心机制2.2 JVM…

Activiti入门

目录 一、了解工作流 1、什么是工作流 2、工作流引擎 3、常见工作流引擎 4、Activiti7概述 4.1、Activiti介绍 4.2、建模语言BPMN 4.3、Activiti使用流程 一、了解工作流 1、什么是工作流 工作流&#xff08;Workflow&#xff09;&#xff0c;就是通过计算机对业务流…

SSeg总体思路

1&#xff1a;在train中加载train和test数据集。 2&#xff1a;指定数据集为kitti&#xff0c;确定训练验证的batchsize。 3&#xff1a;提前定义好数据预处理&#xff0c;首先是几何变换&#xff0c;包括随机裁切等。 4&#xff1a;然后是外观变换&#xff0c;包括高斯滤波…

计算同列排斥力的一种可能方法

假设神经网络同列数字之间有一种排斥力&#xff0c;且这种排斥力也与距离的平方成反比。设0是环境&#xff0c;1是粒子&#xff0c;则两个1之间的排斥力就是距离平方的倒数。 考虑任意遥远的两个粒子之间都有排斥力&#xff0c;可以得到同列排斥力的计算方法为 如计算"01…

移动硬盘数据恢复软件实用技巧

在我们日常生活中&#xff0c;移动硬盘已经成为了我们不可或缺的存储设备之一。但是&#xff0c;由于各种原因&#xff0c;移动硬盘中的数据有时会丢失或损坏&#xff0c;这时候我们就需要使用移动硬盘数据恢复软件来帮助恢复数据。那么&#xff0c;移动硬盘数据恢复软件有哪些…

Windows环境下实现设计模式——中介者模式(JAVA版)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows环境下如何编程实现中介者模式&#xff08;设计模式&#xff09;。 不知道大家有没有这样的感觉&#xff0c;看了一大堆编程和设计模式的书&#xff0c;却还是很难理解设计模式&#xff…

modbus指令测试

目录 一.抓包二.modbus与plc三.usb包分析四.编写modbus指令测试五.调试工具 一.抓包 1.串口抓包&#xff1f;wireshark&#xff01;: https://xuxeu.github.io/uart-catch/ 2.Windows&Linux USB抓包方法总结:https://zhuanlan.zhihu.com/p/267820933 3.USB The Setup Pack…

(“树” 之 前中后序遍历 ) 94. 二叉树的中序遍历 ——【Leetcode每日一题】

基础概念&#xff1a;前中后序遍历 1/ \2 3/ \ \ 4 5 6层次遍历顺序&#xff1a;[1 2 3 4 5 6]前序遍历顺序&#xff1a;[1 2 4 5 3 6]中序遍历顺序&#xff1a;[4 2 5 1 3 6]后序遍历顺序&#xff1a;[4 5 2 6 3 1] 层次遍历使用 BFS 实现&#xff0c;利用的就是 BFS…

一文搞懂Java中的异常问题

思考几个问题 1&#xff1a;JavaWeb系统中&#xff0c;我的代码未做任何处理&#xff0c;报错了还会往下执行吗&#xff1f; 2&#xff1a;JavaWeb系统中&#xff0c;我的代码做了 try catch finally, 报错了还会往下执行吗&#xff1f; 3&#xff1a;JavaWeb系统中&#xff0c…

软考高频考点--《项目采购管理》

现在离2023年上半年软考还有一个多月的时间&#xff0c;相信各位小伙伴们已经进入紧张的备考状态了。 小编今天为大家整理了软考的一些高频考点–《项目采购管理》&#xff0c;希望对正在备考软考的你有所帮助&#xff01; 采购是从项目团队外部获得产品、服务或成果的完整的购…

alsa_lib移植到IMX6ULL

简介 ALSA是Advanced Linux Sound Architecture的缩写&#xff0c;目前已经成为了linux下的主流音频体系架构&#xff0c;提供了音频和MIDI的支持。 交叉编译alsa_lib和alsa_utils 下载alsa_lib 在官网中下载AlsaProject 编译 先将文件解压&#xff0c;然后进入alsa_lib…

运筹说 第94期|论文速读之基于关键路径的置换流水车间调度问题

前几期的推送已经讲解了网络计划的基本知识、数学模型和相关算法&#xff0c;相信大家对网络计划已经有了充分的了解&#xff0c;这期小编将带大家一起来读一篇基于关键路径的置换流水车间调度问题的文章。 1.文章信息 题目&#xff1a;An efficient critical path based meth…