Inferring Input Grammars from Dynamic Control Flow
程序的特征在于其输入模型,并且形式化输入模型可以用于不同的领域,包括脆弱性分析、逆向工程、模糊和软件测试、克隆检测和重构。不幸的是,典型程序的输入模型通常不可用或过时。虽然存在可以挖掘程序输入的语法结构的算法,但它们要么产生笨拙和难以理解的语法,要么需要针对特定解析模式的语法分析。在本文中,我们提出了一个通用的算法,需要一个程序和一个小的样本输入,并自动推断出一个可读的上下文无关文法捕捉输入语言的程序。我们推断的句法输入结构,只有通过观察在不同位置的输入解析器的输入字符的访问。这适用于所有基于程序堆栈的递归下降输入解析器,包括PEG和解析器组合子,并且可以完全不使用程序特定的语法。我们的Mimid原型为各种评估主题生成了准确可读的语法,包括expr、URLparse和microJSON。
2019-12-12 cs.PL cs.SE
Inferring Javascript types using Graph Neural Networks
Prodo Tech Ltd(Prodo科技有限公司)
最近使用的“大代码”与最先进的深度学习方法提供了有前途的途径,以简化程序源代码编写和更正。作为自动代码修复的第一步,我们实现了一个图神经网络模型,预测JavaScript程序的标记类型。预测达到了$90\%$以上的精度,这提高了以前类似的工作。
2019-05-16 cs.LG cs.PL cs.SE
Inferring Energy Bounds via Static Program Analysis and Evolutionary Modeling of Basic Blocks
不断增加的能量受限设备(例如物联网应用、智能手机和关键任务系统中使用的设备)的数量和复杂性对优化其能量消耗并验证其将在可用能量预算内执行其功能的技术提出了重要挑战。在这项工作中,我们从软件的角度来解决这一挑战,并提出了一种新的参数化方法来估计严格的边界上的能源消耗的程序执行,是实际的能源验证和优化的应用。我们的方法将程序划分为基本(无分支)块,并使用进化算法估计每个块的最大和最小能耗。然后根据程序控制流程,使用静态分析,将获得的值组合,以推断函数,该函数给出整个程序及其过程的能量消耗的上界和下界,作为关于输入数据大小的函数。我们已经测试了我们的方法(类C)嵌入式程序运行在XMOS硬件平台上。然而,我们的方法是通用的,足以适用于其他微处理器架构和程序设计语言。我们的原型实现所获得的界限可以很紧,同时在实践中保持在预算的安全侧,正如我们的实验评估所示。
2017-09-22 cs.DC cs.PL
Inferring Parametric Energy Consumption Functions at Different Software Levels: ISA vs. LLVM IR
程序执行所消耗的能量的静态估计是一个重要的挑战,其在程序优化和验证中具有应用,并且有助于能量感知软件开发。我们的目标是估计这样的能量消耗的形式函数的输入数据大小的程序。我们已经开发了一个工具,用于实验与静态分析推断这样的能量功能在两个级别,指令集架构(ISA)和中间代码(LLVM IR)的水平,并反映它向上到更高的源代码级别。这需要开发从LLVM IR到中间表示的转换及其与现有组件的集成,从ISA到相同表示的转换,资源分析器,ISA级能量模型,以及从该模型到LLVM IR的映射。该方法已应用于在XCore架构上运行的XC语言编写的程序,但足够通用,可以应用于其他语言。实验结果表明,我们的LLVM IR级分析是相当准确的(与硬件测量相比,平均误差小于6.4%),比ISA级分析更强大。本文提供了深入了解在这些级别的精度与可分析性的权衡。
2015-11-04 cs.PL
Inferring Drop-in Binary Parsers from Program Executions
我们提出BIEBER(字节-IdEntical二进制解析器),第一个系统建模和重新生成一个完整的工作解析器从仪表程序执行。为了实现这一点,Bieber利用了规律性(例如,头字段和类似数组的数据结构),其通常在文件格式中找到。关键的泛化步骤派生出跨步循环,它解析输入文件数据,并用输入文件头字节上的表达式重写具体的循环边界。这些步骤使BIEBER能够泛化特定输入文件的解析,以获得对任意大小的输入文件进行操作的解析器。BIEBER还增量地和有效地推断决策树,该决策树读取文件头字节以将不同类型的输入文件路由到适当类型的推断解析器。推断的解析器和决策树用IR表示;单独的后端(在我们的原型中是C和Perl)可以将IR翻译成与原始程序相同的语言(为了更安全的插入式替换),或者自动移植到不同的语言。一个实证评估表明,BIEBER可以成功地重新生成解析器的六个文件格式(波形音频[1654个文件]、MT 76 x 0.BIN固件容器[5个文件]、OS/2 1.x位图图像[9个文件]、Windows 3.x位图[9971个文件]、Windows 95/NT 4位图[133个文件]和Windows 98/2000位图[859个文件]),正确解析100%(当使用标准保持交叉验证时,>= 99.98%)的相应语料库。重新生成的解析器包含自动插入的安全检查,可以消除常见的错误类别,如内存错误。我们发现BIEBE…
2021-04-19 cs.PL
Verification of MPI programs
在本文中,我们概述了一种方法来验证并行程序。介绍了一种新的并行程序数学模型。通过矩阵乘法MPI程序的验证,说明了所引入的模型。
2021-10-16 cs.LO cs.PL
Specifying and Executing Optimizations for Parallel Programs
编译器优化,通常表示为程序图上的重写,是所有现代编译器的核心部分。然而,即使是生产编译器也有bug,这些bug很难检测和解决。当编译并行程序时,问题只会变得更加复杂;从图形表示的选择到竞争条件的可能性,优化设计人员需要考虑一系列在处理单线程程序时不会出现的因素。在本文中,我们提出了PTRANS,一个特定领域的编译器转换的形式规格说明语言,并描述其可执行的语义。PTRANS的基本方法是将程序转换描述为带有时序逻辑边条件的控制流图上的重写。PTRANS的语法允许更清晰,更易于理解的程序优化规范;其可执行语义允许这些规范充当优化本身的原型,以便候选优化可以在继续将其包含在编译器中之前进行测试和改进。我们演示了使用PTRANS的状态,测试,并完善规范的冗余存储消除并行程序的优化。
2014-07-30 cs.LO cs.PL
Inferring SQL Queries Using Program Synthesis
开发与数据库交互的高性能应用程序是一项艰巨的任务,因为开发人员需要了解编写应用程序的语言的细节,以及关系模型的复杂性。这个问题的一个流行的解决方案是使用对象关系映射(ORM)库,这些库使用与编写应用程序相同的语言提供对数据库的透明访问。不幸的是,使用这样的框架很容易导致应用程序性能低下,因为开发人员通常最终在应用程序代码中实现关系操作,并且这样做通常不会利用数据库系统提供的关系操作的优化实现,高效的查询计划或谓词的下推。在本文中,我们提出了QBS,一个算法,自动识别应用程序的逻辑片段,可以推到SQL查询。QBS算法通过自动合成原始代码片段的不变量和后置条件来工作。后置条件和不变量使用有序关系理论来表达,该理论允许我们精确地推理甚至由计算连接和聚合的复杂代码片段产生的记录的内容和顺序。该理论在表达能力上接近SQL,因此合成的后置条件可以很容易地转换为SQL查询。使用40个代码片段提取超过120K行的开源代码编写的Java Hibernate ORM,我们证明了我们的方法可以转换成关系规范的各种命令式结构。
2012-08-09 cs.DB cs.PL
Reasoning about Parallel Quantum Programs
通过定义并行量子程序的操作语义和指称语义,我们开始了对并行量子程序的研究。本文的技术贡献包括:(1)为并行量子程序的正确性推理找到了一系列有用的证明规则;(2)证明了一个不相交并行量子程序部分正确性证明规则的(相对)完备性;以及(3)证明证明规则的强可靠性定理,表明部分正确性在操作中的每一步转换都得到了很好的维护。通用并行量子程序的语义(具有共享变量)。这是通过部分克服经典并行编程中从未存在的以下概念挑战来实现的:(i)由量子测量引起的非确定性的交织和并行性的引入;(ii)组件量子程序之间的纠缠;以及(iii)在组件量子程序的状态希尔伯特空间与共享变量的重叠中组合量子谓词。本文中开发的技术的应用说明了一个形式化验证的Bravyi-Gosset-König的并行量子算法解决线性代数问题,这给了第一次的计算量子优势的无条件证明。
2019-10-01 cs.LO cs.PL quant-ph
Inferring multiple helper Dafny assertions with LLMs
INESC TEC, Faculty of Engineering, University of Porto(葡萄牙波尔图大学工程学院INESC TEC);Computer Science Department of Carnegie Mellon University(卡内基梅隆大学计算机科学系)
本文研究使用LLM自动推断Dafny程序中缺失的辅助断言,提出结合LLM预测与错误消息启发式的混合方法改进错误定位,并在新工具DAISY中实现,有效降低了形式化验证的证明工程工作量。
2025-10-31 cs.AI cs.LO cs.PL
Toward Inferring Accurate Context-free Grammars for Big Languages in a Black-box Setting
University of Texas at Arlington(阿灵顿得克萨斯大学);Islamic University of Technology(伊斯兰理工大学);University of Texas at Austin(奥斯汀得克萨斯大学)
针对黑盒上下文无关语法推断在大型语言中存在的可扩展性、准确性和语法可读性问题,Xvada引入新技术,在实证比较中语法准确性和紧凑性优于对手,还发现Python Liquid引擎漏洞及多个新漏洞,且相关内容可免费获取。
2026-07-16 cs.PL cs.SE
Refinement Type Inference via Horn Constraint Optimization
我们提出了一种新的方法来推断高阶函数程序的精化类型。所提出的方法的主要优点是它可以推断最大优选(即,Pareto最优)细化类型。所提出的方法实现的灵活优化的细化类型铺平了道路,有趣的应用程序,如推断最一般的输入特性,一个给定的程序满足(或违反)给定的安全(或终止)属性。我们的方法减少了这样一个类型的优化问题的Horn约束优化问题,通过使用一个新的细化类型的系统,可以灵活的原因在程序中的非确定性。然后,我们的方法通过反复改进当前解决方案,直到通过基于模板的不变式生成收敛来解决约束优化问题。我们已经实现了一个原型推理系统的基础上,我们的方法,并取得了可喜的成果,在初步的实验。
2015-05-16 cs.PL
Probabilistic Guarantees for Practical LIA Loop Invariant Automation
针对数据驱动循环不变式推断缺乏理论保证的问题,提出结合模拟退火、SMT求解器与计算几何ε-网的方法,通过实分析优化搜索、并行提升成功率,实现工具DLIA2性能对标先进水平且在特定程序子类上优于GSpacer。
2024-12-14 cs.PL
Automatic Parallelization: Executing Sequential Programs on a Task-Based Parallel Runtime
在当今的软件中有数十亿行顺序代码,这些代码并没有从现代多核架构中的并行性中受益。自动并行顺序代码,以促进有效地利用现有的并行性,一直是一个研究目标,一段时间了。这项工作为实现这一目标提出了一种新的方法。我们创建了一个新的并行化编译器,它分析程序中的读写指令和控制流修改,以识别程序中指令之间的一组依赖关系。然后,编译器根据生成的依赖关系图重写程序,并将程序组织成面向任务的结构。并行任务由不能并行执行的指令组成。基于工作窃取的并行运行时负责调度和管理生成的任务的粒度。此外,编译时粒度控制机制也避免了创建不必要的数据结构。这项工作的重点是Java语言,但技术是一般性的,足以适用于其他程序设计语言。我们已经评估了我们的方法对OoOJava的8个基准程序,实现更高的加速比。在某些情况下,数值接近手动并行化的数值。由此产生的并行代码还具有可读和易于手动配置以进一步提高其性能的优点。
2016-04-11 cs.PL
Program Transformation to Identify List-Based Parallel Skeletons
通过从开发人员那里抽象出并行实现的细节,并行框架被用作构建块来简化并行编程的任务。大多数现有的库都提供了框架的实现,这些框架是在平面数据类型(如列表或数组)上定义的。然而,基于Java的并行编程仍然非常具有挑战性,因为它需要对底层算法进行复杂的分析,并且经常使用低效的中间数据结构。此外,给定程序的算法结构可能与基于列表的骨架的算法结构不匹配。在本文中,我们提出了一种方法来自动转换任何给定的程序,定义在一个列表,更有可能包含基于列表的骨架的实例。这便于使用基于列表的并行骨架的现有实现来并行执行转换后的程序。此外,通过使用现有的转换称为蒸馏结合我们的方法,我们产生的转换程序,包含更少的低效的中间数据结构。
2016-07-08 cs.PL
To parallelize or not to parallelize, bugs issue
程序正确性是并行编程中最困难的挑战之一。消息传递接口MPI被广泛用于编写并行应用程序。由于MPI不是一种编译语言,程序员在编写MPI程序时会遇到一些编程错误,本文介绍了MPI程序中最常见的编程错误,以帮助程序员在并行性的优点和检测和修复这些错误所需的额外工作之间进行折衷。一个代数规格的MPI类程序设计语言,称为简单MPI(SMPI),用于编写MPI程序规范也已提出。此外,SMPI程序中的不确定性和死锁现象也在Maud系统中得到了验证。
2013-11-04 cs.DC cs.PL
Towards a General Framework for Static Cost Analysis of Parallel Logic Programs
资源使用的估计和控制现在是越来越多的计算系统中的重要挑战。特别地,在诸如物联网、云计算、健康、运输和机器人的各种各样的应用中出现对定时和能量的要求。与此同时,并行计算,特别是(异构)多核平台,已经成为计算机体系结构中的主导范例。预测这些平台上的资源使用情况是一项艰巨的挑战。静态资源分析的大部分工作都集中在顺序程序上,而在并行程序的分析上,或者更具体地说,在并行逻辑程序上,取得的进展相对较少。我们提出了一种新的,通用的,灵活的框架,建立成本方程/关系,可以实例化的并行逻辑程序的资源使用分析的广泛的资源,平台和执行模型。分析估计上下限的资源使用的并行程序(不执行它)作为输入数据大小的函数。此外,它还推断出其他有意义的信息,以更好地利用和评估系统的潜在和实际并行性。我们开发了一种方法,用于解决成本关系,涉及最大函数,在并行程序的分析中出现。最后,我们实例化我们的一般框架分析的逻辑程序与独立的和-独立主义,报告内的CiaoPP系统的实现,并提供一些实验结果。据我们所知,这是并行逻辑程序成本分析的第一种方法。
2019-07-31 cs.PL
On Applying Or-Parallelism and Tabling to Logic Programs
在过去的几年里,人们在增加Prolog的声明性和表达性方面做出了越来越大的努力。表已被证明是一种可行的技术,有效地克服SLD的无限循环和冗余的子计算的敏感性。我们的研究表明,隐式或并行是一个自然的适合逻辑程序与制表。为了证实这一信念,我们已经设计并实现了一个或并行制表引擎- OPTYap -我们使用共享内存并行机来评估其性能。据我们所知,OPTYap是逻辑编程系统的并行制表引擎的第一个实现。OPTYap建立在Yap高效的顺序Prolog引擎之上。它的执行模型是基于SLG-WAM的制表,和环境复制或并行。初步结果表明,提出的机制,并行搜索的上下文中的SLD决议确实可以有效地和自然地推广到并行表计算,并由此产生的系统可以实现良好的性能共享内存并行机。更重要的是,它强调了我们的信念,通过应用或并行和制表逻辑程序的应用范围可以增加逻辑程序设计。
2003-08-04 cs.PL
The Parallel Semantics Program Dependence Graph
针对现有并行IR缺少语义等价约束捕获表示、顺序PDG不适用于并行代码的问题,提出并行语义程序依赖图PS-PDG,论证其扩展必要性并验证其优化能力更强,助力编译器在保语义下选择并行执行计划。
2024-02-01 cs.PL
Profiling parallel Mercury programs with ThreadScope
并行程序的行为比顺序程序的行为更难理解。并行程序可能会受到影响顺序程序的任何性能问题的影响,也可能会受到并行系统特有的几个问题的影响。如果没有专业工具的帮助,这些问题中的许多都很难(甚至几乎不可能)诊断。我们提出了一个建议,一个工具,分析并行执行的水星计划,建议的实施,我们已经开始。这个工具是ThreadScope分析器的一个改编和扩展,ThreadScope分析器最初是用来帮助程序员可视化并行Haskell程序的执行的。
2011-09-07 cs.DC cs.PF cs.PL
A Type System for Parallel Components
提出了#组件模型以提高并行程序设计的实用性。本文介绍了一种用于#程序设计系统的类型系统,旨在通过引入基于泛有界量化和存在有界量化的抽象构件概念,提高并行计算体系结构中程序设计的抽象性和安全性。最后讨论了在#编程系统HPE中实现这种类型系统的问题。
2009-05-21 cs.PL
MISO: An intermediate language to express parallel and dependable programs
编写快速程序的一种方法是探索潜在的并行性,并利用微处理器中可用的大量内核。这可以通过手动指定哪些代码在哪个线程上执行、使用编译器并行化提示(如OpenMP或Cilk)或使用并行程序设计语言(如X10、Chapel或Aeminium)来实现。无论采用哪种方法,所有这些程序都被编译成一种中间的低级语言,这种语言是顺序的,从而防止后端编译器优化程序并观察其并行特性。本文介绍了MISO,一个中间语言,表示程序的并行性,可以针对前端编译器。该语言定义了“单元格”,由状态和从一个状态到下一个状态的转换函数组成。该语言既能表示串行程序,也能表示并行程序,为后端编译器生成高效的并行程序提供了信息。此外,MISO可用于通过复制状态或通过利用不同的处理器核心来自动地向程序添加冗余,以便为在不可靠的硬件上运行的程序提供容错。
2016-08-22 cs.DC cs.PL
Reversing Parallel Programs with Blocks and Procedures
我们展示了如何逆转一个而语言扩展块,局部变量,程序和交错并行组合。注释与一组能够存储必要的反转信息的操作语义一起定义,并且引入标识符来捕获执行的交织顺序。反转是用一组操作语义定义的,这些操作语义使用保存的信息来撤消执行。我们证明,注释不会改变原程序的行为,反转正确地恢复初始程序状态。
2018-08-27 cs.PL
The Glasgow Parallel Reduction Machine: Programming Shared-memory Many-core Systems using Parallel Task Composition
我们提出了格拉斯哥并行归约机(GPRM),一种新颖的,灵活的框架,并行任务组合为基础的众核编程。我们允许程序员将程序结构化为任务代码,编写为C++类,和通信代码,编写在C++的有限子集中,具有功能语义和并行评估。在本文中,我们讨论的GPRM,虚拟机框架,使并行任务组合方法。我们集中讨论GPIR,函数语言作为中间表示的字节码上运行的GPRM。使用这种语言的例子,我们展示了我们的任务组成框架的灵活性和力量。我们展示了潜力,使用合并排序算法的64核Tilera处理器上的实现,以及在传统的英特尔四核处理器和AMD 48核处理器系统。我们还比较了我们的框架与在Tilera处理器上运行的并行指针追逐算法中的OpenMP任务。我们的研究结果表明,GPRM程序优于相应的OpenMP代码在所有的测试平台上,可以大大方便的并行程序的编写,特别是非数据并行算法,如减少。
2013-12-10 cs.DC cs.PL
Can We Run in Parallel? Automating Loop Parallelization for TornadoVM
随着多核系统、GPU和FPGA的出现,循环并行化已经成为加速程序执行的一种有前途的方法。为了跟上时代的步伐,各种面向性能的程序设计语言提供了大量的结构,以允许程序员编写可并行化的循环。相应地,研究人员已经开发出自动并行化循环的技术,这些循环在迭代中不携带依赖关系,和/或调用纯函数。然而,在具有独立于平台的运行时的托管语言(如Java)中,在JIT编译期间执行复杂的依赖性分析实际上是不可行的。在本文中,我们提出了AutoTornado,第一种静态+JIT循环并行化器的Java程序,并行化循环异构体系结构使用TornadoVM(一个基于Graal的VM,支持插入@Parallel结构的循环并行化)。AutoTornado在Soot框架中静态地执行Java程序的复杂依赖性和纯度分析,以生成约束编码条件,在该条件下,给定的循环可以并行化。然后将生成的约束馈送到Z3定理证明器(我们已经与Soot集成),以注释可以使用@Parallel构造并行化的正则for循环。我们还在TornadoVM中添加了运行时支持,以使用静态分析结果进行循环并行化。我们对几个标准并行化内核的评估表明,AutoTornado正确并行化了61.3%的手动并行化循环,具有高效的静态分析和接近零的运行时开销。据我们所知,AutoTornado不仅是第一个为真实世界的JVM执行基于程序分析的并行化的工具,而且是第一个将Z3与S…
2022-05-07 cs.PL
All for One and One for All: Program Logics for Exploiting Internal Determinism in Parallel Programs
New York University(纽约大学)
本文提出schedule-independent safety属性及Musketeer和Angelic逻辑,用于验证内部确定性并行程序的正确性。
2026-01-21 cs.PL
A Fast Causal Profiler for Task Parallel Programs
本文提出了TASKPROF,一个分析器,确定任务并行程序的并行性瓶颈。它利用任务并行执行的结构来执行细粒度的工作归属到程序的各个部分。TASKPROF使用硬件性能计数器来执行细粒度测量,从而最大限度地减少了干扰。TASKPROF的配置文件执行使用多核并行运行。TASKPROF的因果配置文件使用户能够估计在并行性的改进时,一个区域的代码进行了优化,即使具体的优化是未知的。我们使用TASKPROF隔离了23个使用英特尔线程构建模块库的应用程序中的并行性瓶颈。我们已经设计了并行化技术在五个应用程序中增加并行度的数量级使用TASKPROF。我们的用户研究表明,开发人员能够使用TASKPROF轻松隔离性能瓶颈。
2017-07-02 cs.DC cs.PL
Coordination Level Modeling and Analysis of Parallel Programs using Petri Nets
在过去的十五年中,高性能计算(HPC)社区已经要求并行编程环境,其调和分布式存储器并行计算平台的通用性、更高抽象级别、可移植性和效率。哈希组件模型似乎是解决HPC社区要求满足这些要求的替代方案。本文提出的基础,将使一个基于哈希模型的并行程序设计环境,以解决问题的“调试”,性能评估和验证的形式属性的并行程序通过一个强大的,简单的,广泛采用的形式主义:Petri网。
2012-08-19 cs.DC cs.PL cs.SE
Reversing Imperative Parallel Programs
我们提出了一种方法和随后的扩展反转命令式程序。首先,我们生成原程序的增强版本和相应的反转版本。扩充将反转信息保存到辅助数据存储器中,保持该数据存储器与程序状态之间的隔离,同时从不以原始程序的方式之外的任何其他方式改变数据存储器。反转使用此信息将最终程序状态还原为执行前的状态。我们证明了增强和反演工作的预期,并说明我们的方法与几个例子。我们还建议修改我们的第一种方法,以支持非通信并行。执行交错引入了许多挑战,我们的扩展方法考虑了其中的每一个。我们定义了注释,并重新定义了反转,以使用一系列语句标识符,使交错顺序反向确定。
2017-09-04 cs.PL
Annotation of Logic Programs for Independent AND-Parallelism by Partial Evaluation
逻辑程序的自动AND并行化的传统方法依赖于一些静态分析来识别可以在任何可能的执行中安全且有效地并行运行的独立目标。在本文中,我们提出了一种新的技术,用于生成注释的独立与并行性,是基于部分评估。基本上,我们增加了一个简单的部分评估程序(运行时)接地和变量共享信息,使平行的连接词被添加到剩余条款时,独立的条件得到满足。与以前的方法相比,我们的部分评估器能够转换的源程序,以暴露更多的并行的机会。据我们所知,我们提出了第一种方法的并行部分评估。
2012-10-05 cs.PL cs.SE
Operator-oriented programming: a new paradigm for implementing window interfaces and parallel algorithms
我们提出了一个新的编程范式,可以是有用的,特别是,用于实现窗口接口和并行算法。这个范例允许用户定义可以包含嵌套运算符的运算符。这种新的范式被称为面向运营商。这种模式的目标之一是避免许多面向对象语言中固有的对象定义的复杂性,并转向透明的算法定义。
2010-04-23 cs.DC cs.PL
Proceedings of HLPP 2026: 19th International Symposium on High-Level Parallel Programming and Applications
Institut Henri Poincaré(庞加雷研究所)
HLPP 2026会议录包含十篇同行评审论文,研讨会涵盖并行编程高级方法,2026年版扩展到人工智能领域,论文经单盲评审选出,按程序顺序发表,由李冲等人编辑。
2026-07-15 cs.DC cs.PL
To parallelize or not to parallelize, control and data flow issue
多核处理器的新趋势意味着使用标准编程模型为分布式内存多处理器和工作站PC集群开发高效、可靠且可移植的程序。使用MPI的消息传递被广泛用于编写高效、可靠和可移植的应用程序。理解和分析MPI程序需要控制和数据流分析概念、技术和工具。如果我们的兴趣点是程序控制和数据流分析,以决定并行化或不并行化我们的应用程序,有一个问题要回答,“可以现有的概念,技术和工具,用于分析顺序程序也可以用来分析并行的MPI?".在本文中,我们将试图回答这个问题。
2013-11-04 cs.DC cs.PL
Probabilistic Alias Analysis for Parallel Programming in SSA Forms
不同类型程序设计语言的静态别名分析一直是研究者关注的问题。然而,大多数现有的别名分析技术的结果是不够精确的现代编译器的需要相比。在现代编译器的优化技术中,需要这些结果的概率版本,其中结果元素与发生概率相关联。本文提出了一种新的并行程序别名分析的概率方法。所处理的并行模型是SPMD,其中在SPMD中,使用在不同数据上的分布式机器上运行的固定数量的程序线程来执行程序。被分析的程序被假定为在静态单分配(SSA)的形式,这是一个程序表示形式,方便程序分析。所提出的技术具有简单的推理规则系统的形式。这使得能够在诸如携带证明代码(PPC)的应用中使用该系统,PPC是用于证明现代程序的安全特性的通用技术。
2014-05-17 cs.PL cs.SE
Parallel Local Search: Experiments with a PGAS-based programming model
局部搜索是求解组合优化和约束满足问题的一种成功方法。随着多核和众核系统、GPU和对Exascale系统的追求的不断发展,并行性已经成为主流,因为内核的数量不断增加。需要新的编程模型以及数据结构和算法,并且需要更好地理解。当在数百或数千个处理单元上运行时,局部搜索算法就是这种情况。在本文中,我们讨论了一些实验,我们一直在做自适应搜索,并提出了一个新的并行版本,它的基础上GPI,最近的API和编程模型的发展可扩展的并行应用程序。我们在不同问题上的实验显示了有趣的加速比,更重要的是,对局部搜索方法的并行化进行了更深入的解释。
2013-05-10 cs.DC cs.PL
Translation of Array-Based Loops to Distributed Data-Parallel Programs
科学实验和模拟生成的大量数据以数组的形式出现,而分析这些数据的程序通常以命令式、基于循环的语言中的数组操作表示。但是,随着数据集变得越来越大,分布式大数据分析中的新框架已经成为大规模科学计算的重要工具。科学家通常对数值分析工具感到满意,但不熟悉大数据分析的复杂性,现在必须学会将基于循环的程序转换为分布式数据并行程序。我们提出了一种新的框架,用于将表示为基于数组的循环的程序翻译为分布式数据并行程序,比相关工作更通用和高效。虽然我们的翻译是在稀疏数组,我们扩展我们的框架来处理包装数组,如平铺矩阵,而不牺牲性能。我们报告的原型实现上的火花,并评估我们的系统相对于手写程序的性能。
2020-03-21 cs.DB cs.PL
2D Image Convolution using Three Parallel Programming Models on the Xeon Phi
图像卷积被广泛用于锐化、模糊和边缘检测。在本文中,我们回顾了两种常见的算法卷积的二维图像的一个可分离的内核(过滤器)。在使用循环展开和SIMD向量化优化朴素代码之后,我们选择具有更好性能的算法作为并行化的基线。然后,我们比较了在英特尔至强融核上使用OpenMP、OpenCL和GPRM实现的优化代码的并行性能。我们还测量优化技术的效果,并演示它们如何影响顺序和并行性能。除了比较代码的复杂性,以及所选择的并行编程模型的性能,我们调查的影响,并行化技术,在GPRM的任务聚集。
2017-11-27 cs.DC cs.PL
Deductive Verification of Parallel Programs Using Why3
消息传递接口规范(MPI)定义了一个用于并行计算机编程的可移植消息传递API。MPI程序在正确性方面存在许多挑战:通信中的发送值和期望值可能不匹配,导致不正确的计算,可能导致崩溃;程序可能会死锁,导致资源浪费。现有的工具是不完全令人满意的:模型检查不规模与过程的数量,测试技术浪费资源,并高度依赖于测试集的质量。作为一种替代方案,我们提出了一个原型的基于类型的方法来编程和验证MPI像程序对协议。协议是用依赖类型语言编写的,旨在捕获MPI中最常见的原语,此外还包含一种原语递归和集体选择的形式。然后将协议翻译成Why 3,一种演绎软件验证工具。而源代码则是用Why 3平台的语言WhyML编写的,并根据协议进行检查。保证通过验证的程序是通信安全的,没有死锁。我们使用我们的方法验证了教科书中的几个并行程序,并报告了结果。
2015-08-20 cs.DC cs.PL
Parallel Instantiation of ASP Programs: Techniques and Experiments
答案集编程(ASP)是一种功能强大的基于逻辑的程序设计语言,它在科学界和(最近)工业界越来越受到关注。ASP程序的评估传统上分为两个步骤。在第一步,输入程序P经历所谓的实例化(或接地)过程,其产生在语义上等价于P但不包含任何变量的程序P';继而,在第二步中通过使用回溯搜索算法来评估P'。众所周知,实例化对于整个评估的效率很重要,在常见情况下可能成为瓶颈,在一些现实世界的应用程序中至关重要,并且在必须处理大量输入数据时特别相关。在撰写本文时,可用的实例化器模块不能令人满意地利用最新的硬件,具有多核/多处理器SMP(对称多处理)技术。本文提出了一些并行实例化技术,包括负载平衡和粒度控制策略,允许有效利用现代SMP机器提供的处理能力。本文报道的大量实验分析证实了这一点。出现在逻辑编程理论与实践(TPLP)中。关键词:答案集编程,实例化,启发式,启发式
2011-10-13 cs.DC cs.PL