• 2024年第35卷第6期文章目次
    全 选
    显示方式: |
    • DBI-Go: 动态插桩定位 Go 二进制的非法内存引用

      2024, 35(6):1-23. DOI: 10.13328/j.cnki.jos.007096

      摘要 (215) HTML (0) PDF 5.83 M (463) 评论 (0) 收藏

      摘要:Go 语言, 也称Golang, 由于其语法简单、原生支持并发、自动内存管理等特性, 近年受到很多开发者的欢迎. Go 语言期望开发者不必了解变量或对象是分配在栈上还是在堆中, 而由 Go 编译器的逃逸分析来决定分配位置, 再由 Go 垃圾收集器自动回收无用的堆对象. Go 的逃逸分析必须正确决定对象的分配位置以保证内存状态的正确性. 然而, 目前 Go 社 区中逃逸相关问题频发, 潜在导致程序崩溃等致命问题, 而目前对该方面的研究缺失. 为有效检测编译器生成的代码是否存在可能引起运行时崩溃的非法内存引用, 填补研究空白, 对Go 程序执行进行抽象建模, 并提出两条判定写入违例的规则. 基于这两条规则, 克服 Go 二进制中高层语义缺失、运行时信息不便获取等挑战, 设计一个轻量化的分析工具 DBI-Go. DBI-Go 采用静态分析加动态二进制插桩的分析方式, 基于动态二进制分析框架 Pin 来实现, 可以识别 Go 二进制中违例的 store 指令. 实验结果表明, DBI-Go 可以检测出 Go 社区中所有已知的逃逸相关 Issues; DBI-Go 还发现一个目前 Go 社区未知的问题, 该问题已经得到确认. 在实际项目上的应用则表明 DBI-Go 可以帮助开发人员找出逃逸算法的错误. 测试结果还表明DBI-Go 采取的措施可以有效降低误报率且在 93.3% 的情况下带来的额外运行时开销小于原先的 2 倍. 同时, DBI-Go 无需修改 Go 的编译运行时, 可以适配不同版本的 Go, 有较高的适用性.

    • 位宽感知的寄存器绑定算法

      2024, 35(6):1-17. DOI: 10.13328/j.cnki.jos.007097

      摘要 (141) HTML (0) PDF 5.94 M (389) 评论 (0) 收藏

      摘要:寄存器绑定是高层次综合中的一个基础优化问题, 主要目标是在保证电路功能的同时最小化寄存器资源的使用. 传统的方法尝试将编译器的寄存器分配算法应用于寄存器绑定中, 但却忽略了分配问题与绑定问题的差异性, 因此在绑定过程中引入了额外的资源约束, 或采用了不适合电路设计的编译优化技巧, 从而导致资源浪费. 为解决这些问题, 将寄存器绑定问题转化为连续多重着色问题, 并提出一种基于位宽与顶点度结合的启发式求解方法. 所提方法通过对变量的位宽和活跃区间等信息的细粒度刻画和建模, 能够进一步优化寄存器资源的开销, 同时无需插入额外的指令. 将该算法与两种典型算法进行比较, 实验结果表明, 所提算法在MiBench测试集的96.72%的测试用例中达到理论最优解, 比其他两种方法分别提高31.5%和25.1%; 在Rosetta测试集的所有测试用例中均表现为最优解, 比其他两种方法分别提高7.41%和7.39%.

    • 申威众核处理器访存与通信融合编译优化

      2024, 35(6):1-20. DOI: 10.13328/j.cnki.jos.007098

      摘要 (194) HTML (0) PDF 2.84 M (424) 评论 (0) 收藏

      摘要:申威众核片上多级存储层次是缓解众核“访存墙”的重要结构. 完全由软件管理的SPM结构和片上RMA通信机制给应用性能提升带来很多机会, 但也给应用程序开发优化与移植提出了很大挑战. 为充分挖掘片上存储层次特点提升应用程序性能, 同时减轻用户编程优化负担, 提出一种多级存储层次访存与通信融合的编译优化方法. 该方法首先设计融合编译指示, 将程序高层信息传递给编译器. 其次构建编译优化收益模型并设计启发式循环优化方案迭代求解框架, 并由编译器完成循环优化方案的求解和优化代码的变换. 通过编译生成的DMA和RMA批量数据传输操作, 将较低存储层次空间中高访问延迟的核心数据批量缓冲进低访问延迟的更高存储层次空间中. 在3个典型测试用例上进行优化实验测试与分析, 结果表明所提出的优化在性能上与手工优化相当, 较未优化版程序性能有显著提升.

    • 二进制翻译技术综述

      2024, 35(6):1-37. DOI: 10.13328/j.cnki.jos.007099

      摘要 (822) HTML (0) PDF 7.39 M (963) 评论 (0) 收藏

      摘要:随着信息技术的快速发展, 涌现出各种新型处理器体系结构. 新的体系结构出现为处理器多样化发展带来机遇的同时也提出了巨大挑战, 需要兼容运行已有软件, 确保较为丰富的软件生态群. 但要在短期内从源码编译构建大量生态软件并非易事, 二进制翻译作为一种直接从二进制层面迁移可执行代码技术, 支持跨平台软件兼容运行, 既扩大了软件生态群, 又有效降低了应用程序与硬件之间的耦合度. 近年来, 二进制翻译技术研究取得了较大进展. 为总结现有成果并分析存在的不足, 首先介绍二进制翻译技术的分类以及典型的二进制翻译系统, 之后从指令翻译方法、关键问题研究、优化技术等方面分别进行分析总结, 接着阐述二进制翻译技术的核心应用领域, 最后对二进制翻译技术的潜在研究方向进行展望.

    • DDoop: 基于差分式Datalog求解的增量指针分析框架

      2024, 35(6):1-23. DOI: 10.13328/j.cnki.jos.007100

      摘要 (166) HTML (0) PDF 5.63 M (474) 评论 (0) 收藏

      摘要:指针分析是对软件进行编译优化、错误检测的核心基础技术之一. 现有经典指针分析框架, 如Doop, 会将待分析程序和分析算法转化成Datalog评估问题并进行求解, 如程序规模较大, 单次求解分析时间开销较大. 在程序频繁变更发布的情况下, 相关程序分析的开销更是难以负担. 近年来, 增量分析作为一种在代码频繁变更场景下有效复用已有分析结果提升分析效率的技术受到了越来越多的关注. 然而, 目前的增量指针分析技术通常针对特定算法设计, 支持的指针分析选项有限, 其可用性也受到较大限制. 针对上述问题, 设计并实现一种基于差分式Datalog求解的增量指针分析框架DDoop (Differential Doop). DDoop实现增量输入事实生成技术与增量分析规则自动化重写技术, 将多版本程序增量分析问题表达为差分Datalog评估问题, 从而可以充分利用成熟的差分式Datalog求解引擎, 如DDlog, 来实现端到端的增量指针分析, 并最大化兼容复用Doop中已有的指针分析实现, 提供透明的增量化支持. 在广泛应用的真实世界程序上对DDoop进行实验评估, 实验结果显示DDoop相较于非增量的Doop框架具有显著的性能优势, 同时高度兼容Doop中已有的各种指针分析规则.

    • 面向全分布式智能建筑系统应用程序的并行化编译方法

      2024, 35(6):1-29. DOI: 10.13328/j.cnki.jos.007101

      摘要 (135) HTML (0) PDF 12.17 M (412) 评论 (0) 收藏

      摘要:群体智能系统通过邻居个体的信息交互实现群体级别的应用任务, 具有良好的鲁棒性和灵活性. 与此同时, 大多数开发人员难以对分布式、并行的个体交互机制进行描述. 一些高级语言允许用户以串行思维方式、从系统全局角度来编程并行的群体智能计算任务, 而无需考虑通信协议、数据分布等底层交互细节. 但面向用户、全局声明式的群体智能系统应用程序与个体并行执行逻辑存在的巨大语义差距, 使得编译过程复杂进而导致应用程序开发效率不高. 提出一个编译系统及其支撑工具, 支持将高级的群体智能系统应用程序转换为安全、高效的分布式实现. 所提编译系统通过并行信息识别, 计算划分, 交互信息生成技术, 将面向系统全局、串行编程的群体智能应用程序编译为面向个体独立执行的并行目标代码, 从而使用户不必了解个体间的复杂交互机制. 设计一种标准化中间表示, 将复杂群体智能计算任务转换为群体智能算子和输入输出变量组合而成的标准化语义模块序列, 其以独立于平台的形式表示源程序信息, 屏蔽目标硬件平台的异构性. 在一个群体智能系统案例平台中部署和测试所提编译系统, 结果表明该系统能够有效将群体智能应用程序编译为平台可执行的目标代码并提升应用程序开发效率, 其生成的代码在一系列基准测试中具有比现有编译器更好的性能.

    • AutoConfig: 面向深度学习编译优化的自动配置机制

      2024, 35(6):1-19. DOI: 10.13328/j.cnki.jos.007102

      摘要 (216) HTML (0) PDF 7.33 M (569) 评论 (0) 收藏

      摘要:随着深度学习模型和硬件架构的快速发展, 深度学习编译器已经被广泛应用. 目前, 深度学习模型的编译优化和调优的方法主要依赖基于高性能算子库的手动调优和基于搜索的自动调优策略. 然而, 面对多变的目标算子和多种硬件平台的适配需求, 高性能算子库往往需要为各种架构进行多次重复实现. 此外, 现有的自动调优方案也面临着搜索开销大和缺乏可解释性的挑战. 为了解决上述问题, 提出AutoConfig, 一种面向深度学习编译优化的自动配置机制. 针对不同的深度学习计算负载和特定的硬件平台, AutoConfig可以构建具备可解释性的优化算法分析模型, 采用静态信息提取和动态开销测量的方法进行综合分析, 并基于分析结果利用可配置的代码生成技术自动完成算法选择和调优. AutoConfig创新性地将优化分析模型与可配置的代码生成策略相结合, 不仅能保证性能加速效果, 还能减少重复开发的开销, 同时可以简化调优过程. 在此基础上, 进一步将AutoConfig集成到深度学习编译器Buddy Compiler中, 对矩阵乘法和卷积的多种优化算法建立分析模型, 并将自动配置的代码生成策略应用在多种SIMD硬件平台上进行评估. 实验结果可验证AutoConfig在代码生成策略中完成参数配置和算法选择的有效性. 与经过手动或自动优化的代码相比, 由AutoConfig生成的代码可达到相似的执行性能, 并且无需承担手动调优的重复实现开销和自动调优的搜索开销.

当期目录


文章目录

过刊浏览

年份

刊期

联系方式
  • 《软件学报 》
  • 主办单位:中国科学院软件研究所
                     中国计算机学会
  • 邮编:100190
  • 电话:010-62562563
  • 电子邮箱:jos@iscas.ac.cn
  • 网址:https://www.jos.org.cn
  • 刊号:ISSN 1000-9825
  •           CN 11-2560/TP
  • 国内定价:70元
您是第位访问者
版权所有:中国科学院软件研究所 京ICP备05046678号-3
地址:北京市海淀区中关村南四街4号,邮政编码:100190
电话:010-62562563 传真:010-62562533 Email:jos@iscas.ac.cn
技术支持:北京勤云科技发展有限公司

京公网安备 11040202500063号