VecTrans: Enhancing Compiler Auto-Vectorization through LLM-Assisted Code Transformations

📄 arXiv: 2503.19449v3 📥 PDF

作者: Zhongchun Zheng, Kan Wu, Long Cheng, Lu Li, Rodrigo C. O. Rocha, Tianyi Liu, Wei Wei, Jianjiang Zeng, Xianwei Zhang, Yaoqing Gao

分类: cs.SE, cs.AI, cs.LG, cs.PF

发布日期: 2025-03-25 (更新: 2025-06-04)


💡 一句话要点

VecTrans:利用LLM辅助代码转换增强编译器自动向量化能力

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

关键词: 自动向量化 大型语言模型 代码转换 编译器优化 SIMD并行 中间表示 混合验证

📋 核心要点

  1. 现有编译器自动向量化技术难以处理复杂代码模式,需要人工干预或领域知识,效率和适用性受限。
  2. VecTrans利用LLM进行代码重构,将难以向量化的代码转换为编译器友好的模式,结合编译器分析和IR验证保证正确性。
  3. 实验表明,VecTrans在多种编译器无法向量化的TSVC函数上实现了显著加速,并成功向量化了大量测试用例。

📝 摘要(中文)

自动向量化是现代编译器利用SIMD并行性的关键优化手段。然而,现有方法难以处理复杂的代码模式,通常需要手动提示或领域专业知识。大型语言模型(LLM)具备捕捉复杂模式的能力,为解决此问题提供了有希望的方案。但由于幻觉和缺乏领域特定推理等问题,LLM在编译器优化中的有效应用仍然是一个开放的挑战。本文提出了VecTrans,一个利用LLM增强编译器代码向量化的新框架。VecTrans首先使用编译器分析识别潜在的可向量化代码区域,然后利用LLM将这些区域重构为更易于编译器自动向量化的模式。为了确保语义正确性,VecTrans进一步集成了中间表示(IR)级别的混合验证机制。通过以上努力,VecTrans结合了LLM的适应性和编译器向量化的精确性,从而有效地开启了向量化的机会。实验结果表明,在GCC、ICC、Clang和BiSheng编译器无法向量化的所有TSVC函数中,VecTrans实现了1.77倍的几何平均加速,并成功向量化了51个测试用例中的24个。这标志着相对于现有方法取得了显著的进步,同时保持了LLM API使用的成本效率,每个函数优化成本为0.012美元。

🔬 方法详解

问题定义:论文旨在解决编译器自动向量化在复杂代码模式下失效的问题。现有编译器在处理这些代码时,要么无法进行向量化,要么需要大量的人工干预,导致开发效率低下,并且向量化的效果也难以保证。因此,如何提升编译器在复杂代码模式下的自动向量化能力是一个重要的挑战。

核心思路:论文的核心思路是利用大型语言模型(LLM)的代码理解和生成能力,将难以被编译器自动向量化的代码片段转换成更易于向量化的等价形式。通过这种方式,可以充分发挥LLM的灵活性和编译器的精确性,从而实现更好的向量化效果。

技术框架:VecTrans框架主要包含三个阶段:1) 代码区域识别:利用编译器分析技术识别出潜在的可向量化代码区域。2) LLM代码重构:使用LLM将这些代码区域重构为编译器更易于自动向量化的模式。3) 混合验证:在中间表示(IR)级别进行混合验证,确保代码转换的语义正确性。这个验证过程结合了形式化验证和测试,以提高验证的可靠性。

关键创新:VecTrans的关键创新在于将LLM引入到编译器自动向量化流程中,并设计了一种有效的混合验证机制来保证代码转换的正确性。与传统的基于规则或启发式的自动向量化方法相比,VecTrans能够处理更复杂的代码模式,并且具有更强的适应性。

关键设计:VecTrans在LLM的使用上,采用了prompt工程技术,设计了合适的prompt来指导LLM进行代码重构。在混合验证方面,采用了符号执行和动态测试相结合的方法,以提高验证的覆盖率和准确性。此外,论文还考虑了LLM API的成本,并设计了相应的优化策略,以降低使用成本。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,VecTrans在GCC、ICC、Clang和BiSheng编译器均无法向量化的TSVC函数上,实现了1.77倍的几何平均加速。在51个测试用例中,VecTrans成功向量化了24个,显著优于现有技术。同时,VecTrans的LLM API使用成本控制在每个函数优化0.012美元,具有良好的成本效益。

🎯 应用场景

VecTrans可应用于高性能计算、嵌入式系统、移动设备等领域,提升程序在各种平台上的运行效率。通过降低手动向量化的需求,VecTrans能够显著提高开发效率,并使更多开发者能够充分利用SIMD指令的优势。未来,该技术有望集成到主流编译器中,成为自动优化流程的重要组成部分。

📄 摘要(原文)

Auto-vectorization is a fundamental optimization for modern compilers to exploit SIMD parallelism. However, state-of-the-art approaches still struggle to handle intricate code patterns, often requiring manual hints or domain-specific expertise. Large language models (LLMs), with their ability to capture intricate patterns, provide a promising solution, yet their effective application in compiler optimizations remains an open challenge due to issues such as hallucinations and a lack of domain-specific reasoning. In this paper, we present VecTrans, a novel framework that leverages LLMs to enhance compiler-based code vectorization. VecTrans first employs compiler analysis to identify potentially vectorizable code regions. It then utilizes an LLM to refactor these regions into patterns that are more amenable to the compilers auto-vectorization. To ensure semantic correctness, VecTrans further integrates a hybrid validation mechanism at the intermediate representation (IR) level. With the above efforts, VecTrans combines the adaptability of LLMs with the precision of compiler vectorization, thereby effectively opening up the vectorization opportunities. experimental results show that among all TSVC functions unvectorizable by GCC, ICC, Clang, and BiSheng Compiler, VecTrans achieves an geomean speedup of 1.77x and successfully vectorizes 24 of 51 test cases. This marks a significant advancement over state-of-the-art approaches while maintaining a cost efficiency of $0.012 per function optimization for LLM API usage.