如何从源代码为任何应用程序创建数据流图 (DFG/SDFG)

2023-12-06

我做了很多研究来弄清楚如何从源代码为应用程序创建 DFG。 DFG 可在线用于某些应用程序,例如 MP3 解码器、JPEG 压缩和 H.263 解码器。

我一直无法弄清楚如何从源代码为 HEVC 等应用程序创建 DFG?是否有任何工具可以立即为如此复杂的应用程序生成数据流图,还是必须手动完成?

请就此事向我提出建议。

编辑: 我使用 Doxygen 进行 HEVC,我可以看到不同的功能如何相互作用。然而,每个函数都有许多入口点和出口点,一段时间后 Doxygen 的输出就变得太混乱而难以理解。

我还看了 StreamIt:http://camlunity.ru/swap/Library/Conflux/Stream%20Programming/streamit-cc_stream_graph_programming_language.pdf

它看起来很方便,但它为更简单的应用程序(如 MP3 解码器)生成的图表太复杂了。 为了生成连贯的 DFG,我是否必须重新编写整个源代码?


您想要从任意语言中提取数据流图。您暗示您想要一种单一的方法来做到这一点。手动操作不太实用...你需要一个工具。

这样的工具非常难以构建。

为此,对于每种语言,您必须能够:

  • 以您在实践中找到的形式(不仅仅是语言参考手册版本)定义工具的语言。与标准相比,C++ 在野外有很多有趣的地方。
  • 用现场发现的语言解析程序,可能是一个文件,也可能是数万个文件;有些程序并不小。
  • 构建表示语言元素及其相互关系的结构(这通常作为抽象语法树来完成)
  • 确定每个文字的实际值是什么; “a\xbc” 具有非常不同的值,具体取决于语言是否认为它是带有转义序列的 ascii 文本或 unicode 文本
  • 查找代码中的所有标识符,并根据语言范围规则确定每个标识符与其关联的定义/类型信息
  • 确定数据源(文字值、外部世界的输入、表达式的结果)并跟踪这些数据值在程序的其他部分跨各种控制流构造的使用位置
  • 大概画出结果数据流的一些图。

这些任务本身都很困难,因为语言往往很复杂。大多数可以执行此操作的语言工具(主要是编译器)仅针对该语言的一种方言执行此操作。

要针对多种语言/方言执行此操作,您需要一个可以针对每种语言的所有详细信息进行配置的工具,并且您必须针对所有感兴趣的语言进行配置。 [实际上你不可能“全部做完”;现在有数千种计算机语言在使用]。

即使将自己限制在“日常”通用编程语言中,这也是一种enormous工作量;对于单一主流语言来说,可能需要几年的时间才能做好这一切。你自己做这件事是不会成功的。

我的公司构建了一个单一的、统一的工具,旨在能够执行此操作:DMS 软件再造工具包。简单的“秘密”就是要意识到完成上述任务所需的机械实际上,跨语言非常相似,并且可以设计为以相对适度(并不意味着“小”)努力为特定语言进行配置。

After 20线性年工程经验拥有博士级工程师团队,解析器(即使这很难) for a 令人惊讶的语言多样性,满了数据流分析器您正在谈论的类型C++(查看此链接以获取示例)、C、COBOL 和几乎 Java 8。

我不知道有任何其他统一工具比您的理想之路更遥远。在你决定我对此一无所知之前,先检查一下我的简历。 (流氓/MPL有一些野心,但目前只是一个研究工具;他们根本不做 C 或 C++)我们只是完成了一半,还有许多语言和规模的战斗需要进行。

[DMS的目标不是数据流分析;而是数据流分析。这只是一个垫脚石。就是做自动化的代码转换,这就需要数据流分析才能安全正确的做]。

当然,您可能只是希望为每种语言找到一个单独的工具。如果您确实可以获得一整套此类工具,那么您将无法从不同作者的单独工具中获得一致的质量或一致的样式/粒度的数据流图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从源代码为任何应用程序创建数据流图 (DFG/SDFG) 的相关文章

  • 分组符号最大长度平衡子序列

    将 B 视为分组符号 和 的序列 如果 B 的长度为 0 或 B 具有以下形式之一 则称 B 为平衡序列 X Y 或 X Y 或 X Y 其中 X 和 Y 本身是平衡的 平衡示例 现在的问题是找到一种有效的算法来找到给定输入的最大长度平衡子
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • 在Python中确定句子中2个单词之间的邻近度

    我需要确定 Python 句子中两个单词之间的接近度 例如 在下面的句子中 the foo and the bar is foo bar 我想确定单词之间的距离foo and bar 确定之间出现的单词数foo and bar 请注意 该词
  • MPI 从文本文件中读取

    我正在学习 MPI 编程 我遇到了这个问题 假设我有一个包含 100 000 行 行的 txt 文件 如何将它们分块以供 4 个处理器处理 即我想让处理器 0 负责第 0 25000 行的处理 让处理器 1 负责第 25001 50000
  • 如何构建一棵与或树?

    我需要一个支持 与 和 或 的树结构 例如 给定一个正则表达式 如ab c d e 我想把它变成一棵树 所以 一开始我们有两个 或 分支 它可以向下ab or c d e 如果你低头ab分支 你得到两个节点 a and b or a其次是b
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • stl 集的 C# 等效项是什么?

    我想使用 C 将一些值存储在平衡二叉搜索树中 我查看了泛型命名空间中的集合 但没有找到与 stl 集合等效的集合 我可以使用什么通用集合 我不想存储键 值对 只是值 你可以使用HashSet http msdn microsoft com
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • 如何使用networkx删除有向图中的所有相关节点?

    我不确定我的问题的正确术语是什么 所以我只会解释我想做的事情 我有一个有向图 删除节点后我希望所有独立相关的节点也被删除 这是一个例子 假设我删除节点 11 我希望节点 2 也被删除 在我自己的示例中 它们将是 2 以下的节点 现在也必须删
  • 并行何时会提高性能

    我试图理解何时使用parallel会提高性能 我用一个简单的代码对其进行了测试 该代码运行了超过 100 000 个项目List
  • tbb:并行查找第一个元素

    我遇到了这个问题 查找列表中满足给定条件的第一个元素 不幸的是 该列表相当长 100 000 个元素 并且使用单个线程评估每个元素的条件总共需要大约 30 秒 有没有办法干净地并行化这个问题 我浏览了所有tbb模式 但找不到任何合适的 UP
  • 如何并行安装/编译 pip 要求(使 -j 等效)

    我的 pip 要求中有很多软件包需要安装 我想并行处理它们 我知道 例如 如果我想要n并行作业来自make我必须写make j n 是否有满足 pip 要求的等效命令 Thanks 有时 pip 使用 make 来构建依赖项 如果在开始之前
  • 如何将二维数组作为 multiprocessing.Array 传递给 multiprocessing.Pool?

    我的目标是将父数组传递给mp Pool并填充它2s 同时将其分发到不同的进程 这适用于一维数组 import numpy as np import multiprocessing as mp import itertools def wor
  • 子进程调用,它们是并行完成的吗?

    我一直在谷歌搜索这个问题的答案 但似乎没有一个答案 谁能告诉我如果subprocess模块是否并行调用 Python 文档建议它可用于生成新进程 但没有提及它们是否并行 如果它们可以并行完成 您能否给我举一个例子或将我链接到一个例子 这取决
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 如何以最小化每个分区总和的最大值的方式对整数数组进行分区?

    输入是正整数或空整数的数组 A 和另一个整数 K 我们应该将 A 划分为 K 个连续元素块 我所说的 划分 是指 A 的每个元素都属于某个块 并且 2 个不同的块不包含任何共同元素 我们将块的总和定义为该块的元素的总和 目标是在 K 个块中
  • 找到将一个数字转换为另一个数字的最小移动次数的算法

    假设我们有两个正整数 a 和 b 每次移动我们都可以将 a 除以 2 但前提是 a 是偶数 将 a 乘以 2 或者将 a 加 1 将a变为b需要多少步 找到一个直接公式或一种有效的算法 即以对数时间运行的算法 我取得的一些进展 我们可以把它
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 为什么 n 按位和 -n 总是返回最右边的位(最后一位)

    这是Python代码片段 1 1 1 2 2 2 3 3 1 看来任何n n总是返回最右边 最后 位 我真的不知道为什么 有人可以帮助我理解这一点吗 这是由于负数以二进制表示的方式 称为二进制补码表示 创建某个数字 n 的补码 换句话说 创

随机推荐

  • 对一列矩阵进行子集化删除行名称[重复]

    这个问题在这里已经有答案了 当我尝试按行名称对 1 列矩阵进行子集化时 子集化有效 但会返回数字向量 你能以某种方式阻止这种行为并保留行名称吗 M lt as matrix rnorm 5 rownames M lt LETTERS 1 5
  • 父母向孩子发送消息

    我有从 Parent 类继承的 Child 类 我想要的是将消息发送给孩子 孩子已经实现了该消息 所以这就像从父级调用纯虚函数一样 如果我现在从家长发送消息 我会收到警告 家长可能不会回复此消息 这是真的 因为只有 Child 实现了它 基
  • PHP SQLite JSON 数据重复

    我有以下 PHP 代码 testMessage TESTMESSAGE db new SQLite3 messages sq3 db gt exec CREATE TABLE messages id INTEGER PRIMARY KEY
  • 控制流的例外情况

    有这里有一个有趣的帖子关于这一点 与跨应用程序控制流有关 嗯 最近 我遇到了一个有趣的问题 在潜在 实际上 无限递归序列中生成第 n 个值 这个特定的算法在成功时将至少处于 10 15 个堆栈引用深度 我的第一个想法是抛出一个如下所示的 S
  • 我的 ngmodel 没有重新加载,绑定不起作用

    实际上 这段代码来自 ionic 我正在处理通过照片捕获获得的图像 一切正常 我得到了斑点 但由于某种原因我的图像没有显示在模板中 我认为角度绑定没有更新 我能做什么来强制它 myblob any null takePhoto const
  • 当数据库发生变化时前端实时更新

    当数据库记录更新或更改时如何更新前端ui 例子 推特 Twitter 帖子的点赞数动态增加 这种实时更新我们要用什么技术 方式是什么 另一个例子 firebase 当 firebase 记录中有更新时 自动前端 UI 更新 请有人帮我解决这
  • Perl 读取文件,从列中打印唯一值

    我是 Perl 新手 我想用 Perl 实现以下目标 我有一个包含以下数据的文件 dev hda1 boot ext3 rw 0 0 dev hda1 boot ext3 rw 0 0 我想从文件中提取第二个字段并仅打印唯一值 我想要的这个
  • 如何将 Rexx 程序作为批处理作业运行?

    我有一个 Rexx 程序 我想将其作为批处理作业运行 我怎样才能做到这一点 这是我的程序 Rexx HELLO Write Hello World Say hello World 该计划定位为会员HELLO in the PDS ME US
  • 在 Woocommerce 3 中获取自定义订单项元数据

    我正在使用 Woocommerce 最新版本 3 4 2 如何获取一些订单项元数据并为其分配自定义值 我使用公共数组获取元数据 item product data array 我需要获得一定的值 对产品进行额外的修改 并分配自定义 sku
  • TypeScript 能否在子静态方法中正确推断出“this”值?

    我有一个场景 我需要一个带有静态方法的基类来实例化该类 这个基类预计会被一些子类继承 以拥有自己的一组额外成员 下面是一个最小的 JavaScript 工作示例 class A static create value return new
  • C# 中的 Punycode 转换器

    我需要一个 Silverlight 的 punycode 转换器 对于WPF来说 标准库中有这样的机会 我需要一个现成的库或函数代码 punycode 编码和解码 C Silverlight 我不确定 Silverlight 是否可以访问这
  • 如何将多个值作为参数传递给 C 中的线程?

    在C中 如何将多个参数传递给一个线程 通常 我会这样做 pthread create th NULL dosomething void connfd void dosomething void connfd Doing something
  • Bash 变量赋值中出现命令未找到错误

    我有一个名为 test sh 的脚本 bin bash STR Hello World echo STR 当我跑步时sh test sh我明白了 test sh line 2 STR command not found 我究竟做错了什么 我
  • 会话时 Fancybox 弹出一次

    我有一个带有 fancybox 的弹出窗口 出现在加载页面上 如果用户更改页面并返回弹出窗口的页面不会再次显示 我需要一次显示弹出窗口 我读过可以使用 cookie 插件 https github com carhartl jquery c
  • 尽管我有外部临时地址,但 gcloud 计算地址列表返回 0 结果

    我的项目中有一个带有外部 IP 的 google 计算实例 实例上的描述命令向我显示 networkInterfaces accessConfigs kind compute accessConfig name External NAT n
  • 从android中的sqlite数据库检索数据时出现运行时错误

    我正在尝试使用 sqlite 在 eclipse 中从数据库插入和检索数据 但它显示了RuntimeError 我创建了一个布局 其中包含三个编辑文本和一个按钮来创建简单信息 但没有创建任何内容 我使用以下代码创建java数据库 packa
  • NSURLRequest挂SpringBoard

    我有一个 MobileSubstrate 插件 可以挂钩跳板 不是在实际的 Objective C 代码中 而是在 plist 中 它包含一个 UIWebView 它加载一个 NSURLRequest 这个 NSURLRequest 在这里
  • CSS:固定到底部并居中

    我需要将页脚固定在页面底部并将其居中 页脚的内容可能随时变化 所以我不能仅仅通过 margin left xxpx 将其居中 右边距 xxpx 问题是由于某种原因这不起作用 whatever position fixed bottom 0p
  • 将 ArrayList 制作为 JTable

    我有一个 ArrayList
  • 如何从源代码为任何应用程序创建数据流图 (DFG/SDFG)

    我做了很多研究来弄清楚如何从源代码为应用程序创建 DFG DFG 可在线用于某些应用程序 例如 MP3 解码器 JPEG 压缩和 H 263 解码器 我一直无法弄清楚如何从源代码为 HEVC 等应用程序创建 DFG 是否有任何工具可以立即为