中文
注册

代码样例简介

本文档提供了如表1所示的鲲鹏DevKit工具样例,旨在通过这些代码样例演示鲲鹏DevKit各个子工具的对应功能,指导用户如何使用鲲鹏DevKit工具进行项目分析,并根据该工具自动分析得出的分析报告进行修改。

表1 代码样例简介

工具

场景示例

场景说明

代码样例

应用迁移工具

示例1:源码扫描

扫描x86平台软件的C/C++/Fortran/汇编源代码,识别源代码中的SO依赖关系,扫描需要修改的代码行并给出修改建议,根据系统设定的代码修改效率,给出评估的工作量,供领导层进行项目决策。该功能位于工具一级菜单“源码迁移”下,安装在x86环境和鲲鹏环境下时均可使用该功能。

说明:

汇编不支持迁移修改后再次扫描;如果扫描,会导致分析结果不准确。

Makefile

file_lock.c

file_lock.h

ksw.c

ksw.h

interface.s

示例2:嵌入式汇编翻译(单指令和多指令转换)

工具支持汇编翻译模块嵌入式汇编功能,本示例指导用户扫描x86平台软件的C/C++源代码,识别源代码中的嵌入式汇编代码,给出嵌入式汇编代码适配鲲鹏平台的修改建议。

swap.c

gcd.c

示例3:全汇编翻译

工具支持汇编翻译模块全汇编功能,本示例指导用户扫描x86平台软件的源代码,识别其中的全汇编代码,给出汇编代码适配鲲鹏平台的修改建议。

test.s

Makefile

main.c

亲和分析工具

示例1:64位运行模式检查

本示例主要是演示如何使用鲲鹏DevKit亲和分析工具的64位运行模式检查功能,将GCC4.8.5~GCC10.3.0版本原32位的应用迁移到64位平台上,进行迁移检查并给出修改建议。

Makefile

func001.c

func002.c

func003.c

func004.c

示例2:字节对齐

字节对齐检查 是在需要考虑字节对齐时,检查源码中结构体类型变量的字节对齐情况。

Makefile

bytecheck.cpp

bytecheck.hpp

示例3:内存一致性

(普通、atomic和锁保护场景)

本示例指导用户通过扫描源代码,识别其中的内存一致性问题,并根据该工具自动分析出的需修改的代码内容进行修改。

cmmon.c

atomic.c

lock.c

Makefile

系统性能分析工具

示例1:矩阵分析

主要针对for循环实现一维矩阵计算的程序进行优化,通过鲲鹏性能分析工具热点函数性能分析功能模块中热点函数的检测,发现矩阵计算的热点函数multiply,采用neon指令进行优化,并对比优化效果。

multiply.c、multiply_simd.c、multiply_start.sh

示例2:列访问循环检测优化

基于二维数组循环遍历程序,通过鲲鹏性能分析工具访存分析功能,比较按行访问与按列访问Miss事件的分析结果,以此来说明按行访问可以优化CPU Cache命中效率。

cache_hit.c、cache_miss.c、miss_start.sh、hit_start.sh

示例3:锁频繁抢占

多线程程序,经常会存在锁频繁抢占问题,锁的争抢会导致CPU的资源浪费,可以基于实际的业务减少公共资源的抢占。本示例主要针对这一问题,通过鲲鹏性能分析工具资源调度和锁与等待分析功能来观测,建议用户分析业务逻辑减少锁的争抢,例如大锁变小锁,减少线程并发数等。

pthread_mutex.c

示例4:锁长期等待

多线程程序,经常存在锁不合理长期占用的问题。本示例主要针对这一问题,通过鲲鹏性能分析工具资源调度功能来观测,建议用户分析业务逻辑将不需要锁的计算移出互斥量加锁操作。

pthread_mutex_long.c

示例5:伪共享分析

多个CPU上的多个线程同时修改在同一个Cache Line上的变量,会产生伪共享false sharing现象。本示例模拟了伪共享现象,主要通过鲲鹏性能分析工具访存分析中伪共享分析功能,观测到这一问题,通过定义变量时进行内存对齐的方式,解决了伪共享问题完成程序优化。

falsesharing.c、falsesharing_mod.c、falsesharing_start.sh

示例6:MPI+OpenMP精细化分析

通过对MPI应用,通过鲲鹏性能分析工具的HPC应用分析,采集模式为MPI / MPI+OpenMP混合模式下的热力图分析,让用户清晰的了解到应用在各个rank下的通信状态。

ring.c

示例7:MPI+OpenMP统计分析

针对MPI应用程序,通过鲲鹏性能分析工具HPC应用分析功能的检测,指导用户使用OpenMP/MPI分析功能。

ring.c

示例8:NUMA精细化分析

主要针对NUMA(Non-uniform memory access, 非统一内存访问)架构下,通过鲲鹏性能分析工具NUMA精细化分析的检测,采集系统中所有进程的NUMA性能,找到Top N (e.g. N = 10) NUMA性能最差的进程,各NUMA节点间内存访问统计矩阵,识别节点间内存访问不平衡状态,并得到相关优化建议。

-

示例9:OpenMP精细化分析

通过对OMP应用,通过鲲鹏性能分析工具的HPC应用分析下的OpenMP模式下的时序分析,让用户清晰的了解到应用在各个时间段的调用栈信息及 PMU事件 信息。

memory_bound.cutils.h

示例10:OpenMP统计分析

针对OMP应用程序,通过鲲鹏性能分析工具HPC应用分析功能的检测,指导用户使用OpenMP/MPI分析功能。

memory_bound.cutils.h

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词