一句话:提出首个静态验证并行程序 disentanglement 的并发分离逻辑 DisLog,并提炼 DisLog+,全部在 Coq/Iris 中机械化。
Disentanglement 是并行程序的运行时性质,保证任务不访问其他并发任务分配的内存,可用于高性能并行内存管理。已有工作依赖程序员保证或运行时插桩,本文提出首个静态验证方法 DisLog:在并发分离逻辑中引入推理 fork-join 结构所需的概念,以验证内存访问确实 disentangled。作者进一步提炼出 DisLog+,其中无需专门推理内存访问:对无数据竞争等一大类程序,功能正确性证明即可蕴含 disentanglement。文章在多个案例(包括两种并发哈希并行去重实现)上展示 DisLog/DisLog+,所有结果均在 Coq 中用 Iris 机械化。
Disentanglement is a run-time property of parallel programs that facilitates task-local reasoning about the memory footprint of parallel tasks. In particular, it ensures that a task does not access any memory locations allocated by another concurrently executing task. Disentanglement can be exploited, for example, to implement a high-performance parallel memory manager, such as in the MPL (MaPLe) compiler for Parallel ML. Prior research on disentanglement has focused on the design of optimizations, either trusting the programmer to provide a disentangled program or relying on runtime instrumentation for detecting and managing entanglement. This paper provides the first static approach to verify that a program is disentangled: it contributes DisLog, a concurrent separation logic for disentanglement. DisLog enriches concurrent separation logic with the notions necessary for reasoning about the fork-join structure of parallel programs, allowing the verification that memory accesses are effectively disentangled. A large class of programs, including race-free programs, exhibit memory access patterns that are disentangled "by construction". To reason about these patterns, the paper distills from DisLog an almost standard concurrent separation logic, called DisLog+. In this high-level logic, no specific reasoning about memory accesses is needed: functional correctness proofs entail disentanglement. The paper illustrates the use of DisLog and DisLog+ on a range of case studies, including two different implementations of parallel deduplication via concurrent hashing. All our results are mechanized in the Coq proof assistant using Iris.
@article{paperbot2605,
title = {DisLog: A Separation Logic for Disentanglement},
author = {Alexandre Moine and Sam Westrick and Stephanie Balzer},
journal = {Proceedings of the ACM on Programming Languages},
volume = {8},
number = {POPL},
year = {2024},
doi = {10.1145/3632853}
}