P4OMP: Retrieval-Augmented Prompting for OpenMP Parallelism in Serial Code

📄 arXiv: 2506.22703v1 📥 PDF

作者: Wali Mohammad Abdullah, Azmain Kabir

分类: cs.SE, cs.AI

发布日期: 2025-06-28


💡 一句话要点

P4OMP:利用检索增强提示将串行C/C++代码转换为OpenMP并行代码

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: OpenMP 并行化 代码生成 大型语言模型 检索增强生成 C/C++ 高性能计算

📋 核心要点

  1. 现有方法难以保证LLM生成OpenMP代码的正确性,常出现语法错误、范围错误等问题,导致编译失败或运行时错误。
  2. P4OMP利用检索增强生成(RAG),从OpenMP教程中检索相关知识,为LLM提供上下文信息,从而提高代码生成的可靠性。
  3. 实验表明,P4OMP在108个C++程序基准测试中实现了100%的编译成功率,显著优于基线方法,并在HPC集群上表现出良好的运行时扩展性。

📝 摘要(中文)

本文提出P4OMP,一个检索增强框架,使用大型语言模型(LLMs)将串行C/C++代码转换为带有OpenMP注释的并行代码。据我们所知,这是第一个应用基于检索的提示来保证OpenMP pragma正确性的系统,无需模型微调或编译器插桩。P4OMP利用检索增强生成(RAG)和来自OpenMP教程的结构化教学知识,以提高提示驱动代码生成的可靠性。通过将生成建立在检索到的上下文之上,P4OMP相比于使用GPT-3.5-Turbo的基线提示,提高了语法正确性。我们在包含来自Stack Overflow、PolyBench和NAS基准测试套件的108个真实C++程序的综合基准上评估了P4OMP。P4OMP在所有可并行化的情况下都实现了100%的编译成功率,而基线在108个案例中有20个未能编译。由于OpenMP的基本限制,排除了依赖于非随机访问迭代器或线程不安全结构的六个案例。详细分析表明,P4OMP始终避免了范围错误、语法误用和无效指令组合,这些问题通常会影响基线生成的代码。我们进一步展示了在HPC集群上七个计算密集型基准测试中的强大运行时扩展能力。P4OMP提供了一个健壮的、模块化的pipeline,显著提高了LLM生成的OpenMP代码的可靠性和适用性。

🔬 方法详解

问题定义:将串行C/C++代码自动转换为OpenMP并行代码是一个复杂的问题。现有的基于LLM的方法,在没有额外知识的情况下,难以生成符合OpenMP规范且能正确编译运行的代码。常见的错误包括OpenMP指令的语法错误、变量作用域错误、以及不正确的线程安全处理等。这些问题导致生成的代码难以实际应用。

核心思路:P4OMP的核心思路是利用检索增强生成(RAG)来提升LLM生成OpenMP代码的质量。通过检索相关的OpenMP教程和文档,为LLM提供必要的上下文知识,使其能够更好地理解OpenMP的语法和语义,从而生成更准确、更可靠的并行代码。这种方法避免了对LLM进行微调,降低了开发成本。

技术框架:P4OMP的整体框架包含以下几个主要步骤:1) 接收串行C/C++代码作为输入;2) 使用检索模块,根据输入代码的特征,从OpenMP知识库中检索相关的文档和示例代码;3) 将检索到的知识与原始代码一起作为prompt输入到LLM中;4) LLM根据prompt生成带有OpenMP注释的并行代码;5) 对生成的代码进行编译和测试,验证其正确性和性能。

关键创新:P4OMP的关键创新在于将检索增强生成(RAG)应用于OpenMP并行代码的自动生成。与传统的直接使用LLM生成代码的方法相比,P4OMP通过检索相关的OpenMP知识,显著提高了生成代码的正确性和可靠性。此外,P4OMP无需对LLM进行微调,降低了开发和维护成本。

关键设计:P4OMP的关键设计包括:1) OpenMP知识库的构建,需要收集和整理大量的OpenMP教程、文档和示例代码;2) 检索模块的设计,需要选择合适的检索算法和特征提取方法,以保证检索到的知识与输入代码的相关性;3) Prompt的设计,需要将检索到的知识以合适的方式融入到prompt中,以便LLM能够有效地利用这些知识。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

P4OMP在包含108个真实C++程序的基准测试中,实现了100%的编译成功率,显著优于基线GPT-3.5-Turbo(编译成功率81.5%)。在七个计算密集型基准测试中,P4OMP生成的代码在HPC集群上表现出良好的运行时扩展性,验证了其在实际应用中的有效性。

🎯 应用场景

P4OMP可应用于高性能计算、科学计算、图像处理等领域,帮助开发者快速将现有的串行C/C++代码并行化,充分利用多核处理器的计算能力,提高程序运行效率。该研究成果具有重要的实际价值,能够降低并行编程的门槛,加速科学研究和工程应用的开发进程。

📄 摘要(原文)

We present P4OMP, a retrieval-augmented framework for transforming serial C/C++ code into OpenMP-annotated parallel code using large language models (LLMs). To our knowledge, this is the first system to apply retrieval-based prompting for OpenMP pragma correctness without model fine-tuning or compiler instrumentation. P4OMP leverages Retrieval-Augmented Generation (RAG) with structured instructional knowledge from OpenMP tutorials to improve the reliability of prompt-driven code generation. By grounding generation in the retrieved context, P4OMP improves syntactic correctness compared to baseline prompting with GPT-3.5-Turbo. We evaluate P4OMP against a baseline, GPT-3.5-Turbo without retrieval, on a comprehensive benchmark of 108 real-world C++ programs drawn from Stack Overflow, PolyBench, and NAS benchmark suites. P4OMP achieves 100% compilation success on all parallelizable cases, while the baseline fails to compile in 20 out of 108 cases. Six cases that rely on non-random-access iterators or thread-unsafe constructs are excluded due to fundamental OpenMP limitations. A detailed analysis demonstrates how P4OMP consistently avoids scoping errors, syntactic misuse, and invalid directive combinations that commonly affect baseline-generated code. We further demonstrate strong runtime scaling across seven compute-intensive benchmarks on an HPC cluster. P4OMP offers a robust, modular pipeline that significantly improves the reliability and applicability of LLM-generated OpenMP code.