生成数据通信流图(C 程序,分析)[关闭]

     2023-03-06     86

关键词:

【中文标题】生成数据通信流图(C 程序,分析)[关闭]【英文标题】:Generate data communication flow graph (C program, profiling) [closed] 【发布时间】:2014-01-10 18:10:42 【问题描述】:

我希望能够生成一个通信/调用图,其中包含有关函数之间传递的数据量的信息。

例如:

function1() -----> [Object *ptr] ----> function2()

这意味着函数 1 将指向对象的指针传递给函数 2(反之亦然)。但是,如果 *ptr 指向一个 1MB 的对象(比如说)。那么图表应该看起来像:

function1() ----> [Object *ptr::1MB] -----> function2()

这将使我们大致了解如何(以及数据的类型/大小/格式)传递。看起来像:

    http://cms.uni-kassel.de/unicms/uploads/pics/TASK_GRAPH_01.JPG http://www.prace-ri.eu/IMG/png/gprof.png

我可以通过使用 gprof 分析和 gprof2dot 脚本获得类似 (2) 的图形,但它的输出仅显示 cpu 使用百分比。我也想看看它们之间传递的数据量。

是否有可以提供此信息的工具(开源/商业),或者您是否知道可用于获取此信息的工具组合?

(我正在考虑结合 Valgrind + gprof 的分析,但想知道是否有更直接的方法..

非常感谢!

【问题讨论】:

问题是指针(在 C 中)你不知道它们指向的大小。 'int *' 可能是 0、1、5、100 或 1500000 的数组。如果它是 void *,则所有赌注都关闭。我不知道有任何程序化的方式来做到这一点。 我会为此使用graphviz。 【参考方案1】:

您需要一个处理函数指针的调用图。

使用它,您需要识别数据流,例如调用图元素之间传递的值。对于标量值,标量的大小非常明显。对于指针值来说,pointer的大小可能比较明显,但是流向被调用函数的数据量是什么指针被解引用,多少数据被解引用处理的问题。为此,如果您有一个“指向 T 的指针”并且该指针被引用以获取“整个值”,那么您需要的大小是 sizeof(T)。如果 T 是复合类型,“p->q”的访问大小为 T.q。因此,如果您想静态收集这些数据,则需要程序中的所有类型信息。

为此,您需要一个 C 解析器、名称和类型解析、控制和数据流分析。你不能用“只是一个 C 解析器”来做到这一点。

您可以使用 GCC 或 Clang 或使用我们的 DMS 等工具来获取此信息。我认为从 GCC 获取这些信息并不容易。它被设计为编译器,而不是分析工具。 Clang 听起来更容易使用(我没有亲身经历); DMS 专为此类任务而设计,但人们的意见可能会有所不同。

您还需要能够构建调用图,然后重新遍历每个模块的数据流。我认为这对 GCC 来说很难。它想一次只编译一个编译单元。我认为 Clang 可以一次处理多个编译单元。 DMS 可以,而且我们已经为 2600 万行的单次加载图像构建了带有点分析的调用图。

无论您选择哪种方式,设置工具以提取您想要的内容都是一项相当公平的练习。 [你会怎么处理答案?]

【讨论】:

获得的数据将用于与另一个调用图合并,以形成功能通信数据流。一种建立应用程序模型的方法,其中包括应用程序的资源使用情况(例如内存、cpu、通信通道 - 在 MPSoC 中)。可能考虑将不同的功能映射到片上网络中的不同核心上,因此我们需要知道数据量。 您可能会喜欢我关于“机械地将遗留应用程序转换为网络应用程序”的论文,它基本上就是这样做的。见 NetCentric 会议第 12 页:netcentriccomputing.org/2001/NCC2001.pdf 谢谢!知道本文中提到的“DMS 软件再工程工具包”是否可以免费使用(用于学术研究目的?) 对学者来说不是免费的,但有很大的折扣。联系公司。

flink执行时之流处理程序生成流图

流处理程序生成流图DataStreamAPI所编写的流处理应用程序在生成作业图(JobGraph)并提交给JobManager之前,会预先生成流图(StreamGraph)。什么是流图流图(StreamGraph)是表示流处理程序拓扑的数据结构。它封装了生成作业图(JobGrap... 查看详情

soot生成代码控制流图

...它可以进行过程内和过程间的分析优化,以及程序流图的生成,还能通过图形化的方式输出。http://www.brics.dk/SootGuide/上面有官方的guide 1.环境准备:a.下载安装java7,不能用java8(soot3.0.1可以用java8)b.下载sootjar包 https://www.... 查看详情

软工文档——系统程序流程图系统流图

...下下软工文档中的各种图O(⌒_⌒)O~。一、定以:1、数据流图(DFD,DataFlowDiagram)数据流程图是比較熟悉的一种图了。在MIS中就曾有介绍。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的... 查看详情

从 ANSI C 代码获取控制流图

】从ANSIC代码获取控制流图【英文标题】:GettingControlFlowGraphfromANSICcode【发布时间】:2013-05-0607:23:58【问题描述】:我正在构建用于测试ansic应用程序的工具。只需加载代码、查看控制流图、运行测试、标记所有被命中的顶点。... 查看详情

编译原理—基本块划分,循环流图

编译原理—基本块划分,循环流图针对以下C程序及其汇编代码:补全下划线部分的C语句或汇编代码给出C程序相应的三地址中间代码,并构建流图给出流图每个基本块的gen和kill集合针对以下C程序及其汇编代码:... 查看详情

soot生成控制流图

1.将soot.jar文件复制到工程bin目录下;2.在cmd中执行如下命令java-cpsoot-trunck.jarsoot.tools.CFGViewer--soot-classpath.;"%JAVA_HOME%"\jre\lib\rt.jarcom.wauoen.paper.classes.Activity其中,JAVA_HOME是jdk目录;com.wauoen.p 查看详情

如何通过简单的模拟模型生成人工数据集,用于具有二元响应和 4-5 特征的分类分析? [关闭]

】如何通过简单的模拟模型生成人工数据集,用于具有二元响应和4-5特征的分类分析?[关闭]【英文标题】:HowgenerateanartificialdatasetthroughasimplesimulationmodelforClassificationanalysiswithBinaryResponseand4-5features?[closed]【发布时间】:2013-01-211... 查看详情

声音分析库? [关闭]

...音频可视化。我想制作一个可以从音频进行可视化的应用程序。我正在寻找一个可以为我提供可能对可视化有用的音频数据的库。有人知道任何可以给我这种信息的c/c++库吗?(可能是波峰和波谷,或频率等)。谢谢【问题讨论... 查看详情

软件测试复习----程序流图控制流图及注意点(代码片段)

这类题可能会给出一段代码,让你根据代码画程序流图、控制流图.我在这里主要将一个容易忽视的点,想学画图的请上网自行搜索。程序流图画法组成元素有以上几种控制流图不在详细展开,请自行查阅资料这里主... 查看详情

情绪分析的种子数据[关闭]

...、“中性”。它不必很大。最终我可能会为我的特定用例生成我自己的种子数据,但是在我构建这个东西的时候有一些东西可以玩会很棒。【问题讨论】:我有BingL 查看详情

分析多线程程序 [关闭]

】分析多线程程序[关闭]【英文标题】:AnalyzingMultithreadedPrograms[closed]【发布时间】:2010-09-0519:30:30【问题描述】:我们有一个已有数年历史的代码库,所有最初的开发人员早已不复存在。它使用了很多很多线程,但没有明显的... 查看详情

数据结构与算法分析(c语言描述)习题2.7

问题描述:假设需要生成前N个自然数的一个随机置换。例如,{4,1,2,5,2}和{3,1,4,2,5}就是合法的置换,但{5,4,1,2,1}却不是,因为数1出现了两次而数3缺没有。这个程序常常用于模拟一些算法。我们假设存在一个随机数生成器randInt(i,j)... 查看详情

用c语言编的程序生成exe文件为啥一打开马上就自动关闭了啊

一闪就关闭了是因为程序运行完了之后会自动关闭.你在程序末尾加个死循环或者加个读入数据什么的,就可以了#include<stdio.h>intmain()inta;scanf("%d",&a);printf("%d\n",a);while(1);//就是在这里加,也可以加getch(),getchar(),f... 查看详情

用于嵌入 C#/.NET 应用程序的脚本语言? [关闭]

】用于嵌入C#/.NET应用程序的脚本语言?[关闭]【英文标题】:ScriptinglanguageforembeddingintoC#/.NETapplications?[closed]【发布时间】:2010-10-0212:23:14【问题描述】:[我能找到的onlysimilarquestion很久以前就得到了回答,并且主要包含对IronPytho... 查看详情

r语言生存分析生成仿真数据构建cox回归分析模型并计算c-index

R语言生存分析生成仿真数据构建COX回归分析模型并计算C-index参考:R语言实战参考:R语言统计入门参考:R语言机器学习参考:从零开始学R语言,带你玩转医学统计学 查看详情

从现有数据库生成 Angular 5 和 Spring mvc CRUD 应用程序 [关闭]

】从现有数据库生成Angular5和SpringmvcCRUD应用程序[关闭]【英文标题】:GenerateanAngular5andSpringmvcCRUDapplicationfromanexistingdatabase[closed]【发布时间】:2019-01-1903:56:44【问题描述】:如何使用java7CRUD应用程序从现有数据库(oracle)生成Angular5... 查看详情

Ubuntu Box上的应用程序分析[关闭]

】UbuntuBox上的应用程序分析[关闭]【英文标题】:ApplicationprofilingonUbuntuBox[closed]【发布时间】:2014-05-0806:07:16【问题描述】:我有这个用C编写的应用程序,应该对其进行调整以提高性能。我查看了一些Linux中可用的性能分析器,... 查看详情

软件测试复习----程序流图控制流图及注意点(代码片段)

这类题可能会给出一段代码,让你根据代码画程序流图、控制流图.我在这里主要将一个容易忽视的点,想学画图的请上网自行搜索。程序流图画法组成元素有以上几种控制流图不在详细展开,请自行查阅资料这里主... 查看详情