一句话:提出 LLVM-IR 到 C/OpenMP 反编译器 SPLENDID,生成可移植并行代码以支持程序员与并行编译器协作。
手动编写并行程序困难且易错,自动并行化又因缺少程序员掌握的信息而收益受限。SPLENDID 将 LLVM-IR 反编译为标准的 C/OpenMP 代码,使程序员能获得编译器已并行化的可移植起点,再进一步并行化或优化,从而实现人机协作,且生成代码兼容任意源语言编译器。以 PolyBench 已发布的手工并行化为参照,该协作式方法所得程序比基于 Polly 的自动并行化或纯手工并行化快一倍;生成代码也比现有反编译器更自然,平均 BLEU 分数高 39 倍。
Manually writing parallel programs is difficult and error-prone. Automatic parallelization could address this issue, but profitability can be limited by not having facts known only to the programmer. A parallelizing compiler that collaborates with the programmer can increase the coverage and performance of parallelization while reducing the errors and overhead associated with manual parallelization. Unlike collaboration involving analysis tools that report program properties or make parallelization suggestions to the programmer, decompiler-based collaboration could leverage the strength of existing parallelizing compilers to provide programmers with a natural compiler-parallelized starting point for further parallelization or refinement. Despite this potential, existing decompilers fail to do this because they do not generate portable parallel source code compatible with any compiler of the source language. This paper presents SPLENDID, an LLVM-IR to C/OpenMP decompiler that enables collaborative parallelization by producing standard parallel OpenMP code. Using published manual parallelization of the PolyBench benchmark suite as a reference, SPLENDID's collaborative approach produces programs twice as fast as either Polly-based automatic parallelization or manual parallelization alone. SPLENDID's portable parallel code is also more natural than that from existing decompilers, obtaining a 39x higher average BLEU score.
@inproceedings{paperbot10091,
title = {SPLENDID: Supporting Parallel LLVM-IR Enhanced Natural Decompilation for Interactive Development},
author = {Zujun Tan and Yebin Chon and Michael Kruse and Johannes Doerfert and Ziyang Xu and Brian Homerding and Simone Campanoni and David I. August},
booktitle = {ASPLOS},
year = {2023},
doi = {10.1145/3582016.3582058}
}