An Empirical Study of High Performance Computing (HPC) Performance Bugs

An Empirical Study of High Performance Computing (HPC) Performance Bugs
复制标题

DOI:
10.1109/msr59073.2023.00037
复制
发表时间:
2023-05
期刊:
2023 IEEE/ACM 20th International Conference on Mining Software Repositories (MSR)
影响因子:
--
通讯作者:
M. Azad;Nafees Iqbal;Foyzul Hassan;Probir Roy
M. Azad;Nafees Iqbal;Foyzul Hassan;Probir Roy
中科院分区:
其他
文献类型:
--
作者:
M. Azad;Nafees Iqbal;Foyzul Hassan;Probir Roy

文献摘要

被引文献

相似文献

性能效率和可扩展性是高性能计算 (HPC) 应用程序的主要设计目标。然而,由于复杂的底层硬件架构、低效的算法实现、编译器生成的代码不理想、低效的并行化等,此类应用程序实现高效率和可扩展性具有挑战性。因此,HPC 社区花费了大量精力来检测和修复科学应用中经常出现的性能错误。然而,积累经验对于指导科学软件工程社区编写性能高效的代码非常重要。在本文中,我们研究了开源 HPC 应用程序,对性能错误及其修复进行分类,并衡量程序员修复这些问题的努力和经验。为此,我们首先对从 23 个实际项目收集的 1729 个 HPC 性能提交进行了大规模的实证分析。通过手动分析,我们从这些项目中发现了 186 个性能问题。此外,我们研究这些性能问题的根本原因,并为 HPC 应用程序生成性能错误分类。我们的分析表明,低效的算法实现 (39.3%)、目标微架构的低效代码 (31.2%) 以及缺少并行性和低效并行化 (14.5%) 是 HPC 应用程序最常见的三大性能问题类别。此外,为了了解如何修复性能错误,我们分析了性能修复提交并将其分为八种性能修复类型。我们进一步衡量开发人员修复性能错误所需的努力和专业知识。分析发现,性能错误修复非常复杂,补丁大小中值 (LOC) 为 35 行,并且大部分由经验丰富的开发人员修复。
Performance efficiency and scalability are the major design goals for high performance computing (HPC) applications. However, it is challenging to achieve high efficiency and scalability for such applications due to complex underlying hardware architecture, inefficient algorithm implementation, suboptimal code generation by the compilers, inefficient parallelization, and so on. As a result, the HPC community spends a significant effort detecting and fixing the performance bugs frequently appearing in scientific applications. However, it is important to accumulate the experience to guide the scientific software engineering community to write performance-efficient code.In this paper, we investigate open-source HPC applications to categorize the performance bugs and their fixes and measure the programmer’s effort and experience to fix them. For this purpose, we first perform a large-scale empirical analysis on 1729 HPC performance commits collected from 23 real-world projects. Through our manual analysis, we identify 186 performance issues from these projects. Furthermore, we study the root cause of these performance issues and generate a performance bug taxonomy for HPC applications. Our analysis identifies that inefficient algorithm implementation (39.3%), inefficient code for target micro-architecture (31.2%), and missing parallelism and inefficient parallelization (14.5%) are the top three most prevalent categories of performance issues for HPC applications. Additionally, to understand how the performance bugs are fixed, we analyze the performance fix commits and categorize them into eight performance fix types. We further measure the developer’s efforts and expertise required to fix performance bugs. The analysis identified that performance bug fixes are complicated with a median patch size (LOC) of 35 lines and are mostly fixed by experienced developers.