WaveCert: Translation Validation for Asynchronous Dataflow Programs via Dynamic Fractional Permissions (2312.09326v2)
Abstract: Coarse-grained reconfigurable arrays (CGRAs) have gained attention in recent years due to their promising power efficiency compared to traditional von Neumann architectures. To program these architectures using ordinary languages such as C, a dataflow compiler must transform the original sequential, imperative program into an equivalent dataflow graph, composed of dataflow operators running in parallel. This transformation is challenging since the asynchronous nature of dataflow graphs allows out-of-order execution of operators, leading to behaviors not present in the original imperative programs. We address this challenge by developing a translation validation technique for dataflow compilers to ensure that the dataflow program has the same behavior as the original imperative program on all possible inputs and schedules of execution. We apply this method to a state-of-the-art dataflow compiler targeting the RipTide CGRA architecture. Our tool uncovers 8 compiler bugs where the compiler outputs incorrect dataflow graphs, including a data race that is otherwise hard to discover via testing. After repairing these bugs, our tool verifies the correct compilation of all programs in the RipTide benchmark suite.
- Ackerman. 1982. Data Flow Languages. Computer 15, 2 (1982), 15–25. https://doi.org/10.1109/MC.1982.1653938
- Dataflow Architectures. Annual Reviews Inc., USA, 225–253.
- Franz Baader and Tobias Nipkow. 1998. Term Rewriting and All That. Cambridge University Press, UK. https://doi.org/10.1017/CBO9781139172752
- Verifying distributed programs via canonical sequentialization. Proceedings of the ACM on Programming Languages 1 (2017), 1 – 27. https://api.semanticscholar.org/CorpusID:23362468
- A Survey of Symbolic Execution Techniques. ACM Comput. Surv. 51, 3, Article 50 (may 2018), 39 pages. https://doi.org/10.1145/3182657
- Amar Bouali. 1998. Xeve, an Esterel verification environment. In Computer Aided Verification, Alan J. Hu and Moshe Y. Vardi (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 500–504.
- A Formally Verified Compiler for Lustre. In Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (Barcelona, Spain) (PLDI 2017). Association for Computing Machinery, New York, NY, USA, 586–601. https://doi.org/10.1145/3062341.3062358
- John Boyland. 2013. Fractional Permissions. Springer Berlin Heidelberg, Berlin, Heidelberg, 270–288. https://doi.org/10.1007/978-3-642-36946-9_10
- Stephen Brookes. 2006. Variables as Resource for Shared-Memory Programs: Semantics and Soundness. Electronic Notes in Theoretical Computer Science 158 (2006), 123–150. https://doi.org/10.1016/j.entcs.2006.04.008 Proceedings of the 22nd Annual Conference on Mathematical Foundations of Programming Semantics (MFPS XXII).
- Maude: Specification and programming in rewriting logic. Theoretical Computer Science 285, 2 (2002), 187–243. https://doi.org/10.1016/S0304-3975(01)00359-0 Rewriting Logic and its Applications.
- Brad Conte. 2024. Basic implementations of standard cryptography algorithms. https://github.com/B-Con/crypto-algorithms.
- Leonardo De Moura and Nikolaj Bjørner. 2008. Z3: An Efficient SMT Solver. In Proceedings of the Theory and Practice of Software, 14th International Conference on Tools and Algorithms for the Construction and Analysis of Systems (Budapest, Hungary) (TACAS’08/ETAPS’08). Springer-Verlag, Berlin, Heidelberg, 337–340.
- Jack B. Dennis and David P. Misunas. 1974. A Preliminary Architecture for a Basic Data-Flow Processor. In Proceedings of the 2nd Annual Symposium on Computer Architecture (ISCA ’75). Association for Computing Machinery, New York, NY, USA, 126–132. https://doi.org/10.1145/642089.642111
- Ground confluence of order-sorted conditional specifications modulo axioms. Journal of Logical and Algebraic Methods in Programming 111 (2020), 100513. https://doi.org/10.1016/j.jlamp.2019.100513
- Kahn Gilles. 1974. The semantics of a simple language for parallel programming. Information processing 74, 471-475 (1974), 15–28.
- Snafu: an ultra-low-power, energy-minimal CGRA-generation framework and architecture. In Proceedings of the 48th Annual International Symposium on Computer Architecture (Virtual Event, Spain) (ISCA ’21). IEEE Press, New York, NY, USA, 1027–1040. https://doi.org/10.1109/ISCA52012.2021.00084
- RipTide: A Programmable, Energy-Minimal Dataflow Compiler and Architecture. In Proceedings of the 55th Annual IEEE/ACM International Symposium on Microarchitecture (Chicago, Illinois, USA) (MICRO ’22). IEEE Press, New York, NY, USA, 546–564. https://doi.org/10.1109/MICRO56248.2022.00046
- PipeRench: A reconfigurable architecture and compiler. Computer 33, 4 (2000), 70–77. https://doi.org/10.1109/2.839324
- Paul Govereau. 2012. Denotational Translation Validation. Ph. D. Dissertation. Harvard University, USA. Advisor(s) Morrisett, John G. AAI3495610.
- George Hagen and Cesare Tinelli. 2008. Scaling Up the Formal Verification of Lustre Programs with SMT-Based Techniques. In 2008 Formal Methods in Computer-Aided Design. IEEE Press, USA, 1–9. https://doi.org/10.1109/FMCAD.2008.ECP.19
- The synchronous data flow programming language LUSTRE. Proc. IEEE 79, 9 (1991), 1305–1320. https://doi.org/10.1109/5.97300
- Advances in dataflow programming languages. ACM Comput. Surv. 36, 1 (mar 2004), 1–34. https://doi.org/10.1145/1013208.1013209
- Iris from the ground up: A modular foundation for higher-order concurrent separation logic. Journal of Functional Programming 28 (2018), e20. https://doi.org/10.1017/S0956796818000151
- Richard M. Karp and Rayamond E. Miller. 1966. Properties of a Model for Parallel Computations: Determinacy, Termination, Queueing. SIAM J. Appl. Math. 14, 6 (1966), 1390–1411. https://doi.org/10.1137/0114108 arXiv:https://doi.org/10.1137/0114108
- Language-Parametric Compiler Validation with Application to LLVM. In Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems (Virtual, USA) (ASPLOS ’21). Association for Computing Machinery, New York, NY, USA, 1004–1019. https://doi.org/10.1145/3445814.3446751
- Donald E. Knuth and Peter B. Bendix. 1970. Simple Word Problems in Universal Algebras. In Computational Problems in Abstract Algebra. Pergamon, Oxford, UK, 263–297. https://doi.org/10.1016/B978-0-08-012975-4.50028-X
- Inductive sequentialization of asynchronous programs. In Proceedings of the 41st ACM SIGPLAN Conference on Programming Language Design and Implementation (London, UK) (PLDI 2020). Association for Computing Machinery, New York, NY, USA, 227–242. https://doi.org/10.1145/3385412.3385980
- Proving Optimizations Correct Using Parameterized Program Equivalence. In Proceedings of the 30th ACM SIGPLAN Conference on Programming Language Design and Implementation (Dublin, Ireland) (PLDI ’09). Association for Computing Machinery, New York, NY, USA, 327–337. https://doi.org/10.1145/1542476.1542513
- Leslie Lamport. 2001. Paxos Made Simple. ACM SIGACT News (Distributed Computing Column) 4, 32 (December 2001), 51–58. https://www.microsoft.com/en-us/research/publication/paxos-made-simple/
- Chris Lattner and Vikram Adve. 2004. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. In Proceedings of the International Symposium on Code Generation and Optimization: Feedback-Directed and Runtime Optimization (Palo Alto, California) (CGO ’04). IEEE Computer Society, USA, 75.
- Verus: Verifying Rust Programs using Linear Ghost Types. Proc. ACM Program. Lang. 7, OOPSLA1, Article 85 (apr 2023), 30 pages. https://doi.org/10.1145/3586037
- Xavier Leroy. 2009. Formal Verification of a Realistic Compiler. Commun. ACM 52, 7 (jul 2009), 107–115. https://doi.org/10.1145/1538788.1538814
- GitHub Repository. https://github.com/secure-foundations/riptide-verification.
- A Survey of Coarse-Grained Reconfigurable Architecture and Design: Taxonomy, Challenges, and Applications. ACM Comput. Surv. 52, 6, Article 118 (Oct 2019), 39 pages. https://doi.org/10.1145/3357375
- LLVM. 2024a. Clang: a C language family frontend for LLVM. https://clang.llvm.org/.
- LLVM. 2024b. LLVM Language Reference Manual. https://llvm.org/docs/LangRef.html.
- Alive2: Bounded Translation Validation for LLVM. In Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation (Virtual, Canada) (PLDI 2021). Association for Computing Machinery, New York, NY, USA, 65–79. https://doi.org/10.1145/3453483.3454030
- Provably Correct Peephole Optimizations with Alive. In Proceedings of the 36th ACM SIGPLAN Conference on Programming Language Design and Implementation (Portland, OR, USA) (PLDI ’15). Association for Computing Machinery, New York, NY, USA, 22–32. https://doi.org/10.1145/2737924.2737965
- Robin Milner. 1999. Communicating and Mobile Systems: The π𝜋\piitalic_π-calculus. Cambridge University Press, United States.
- Viper: A Verification Infrastructure for Permission-Based Reasoning. In Verification, Model Checking, and Abstract Interpretation, Barbara Jobstmann and K. Rustan M. Leino (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 41–62.
- George C. Necula. 2000. Translation Validation for an Optimizing Compiler. In Proceedings of the ACM SIGPLAN 2000 Conference on Programming Language Design and Implementation (Vancouver, British Columbia, Canada) (PLDI ’00). Association for Computing Machinery, New York, NY, USA, 83–94. https://doi.org/10.1145/349299.349314
- Translation validation. In Tools and Algorithms for the Construction and Analysis of Systems, Bernhard Steffen (Ed.). Springer Berlin Heidelberg, Berlin, Heidelberg, 151–166.
- A. W. Roscoe. 1997. The Theory and Practice of Concurrency. Prentice Hall PTR, USA.
- Davide Sangiorgi and David Walker. 2001. PI-Calculus: A Theory of Mobile Processes. Cambridge University Press, USA.
- Pipestitch: An energy-minimal dataflow architecture with lightweight threads. In Proceedings of the 56th Annual IEEE/ACM International Symposium on Microarchitecture (Toronto, ON, Canada) (MICRO ’23). Association for Computing Machinery, New York, NY, USA, 1409–1422. https://doi.org/10.1145/3613424.3614283
- Data-Driven Equivalence Checking. In Proceedings of the 2013 ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages & Applications (Indianapolis, Indiana, USA) (OOPSLA ’13). Association for Computing Machinery, New York, NY, USA, 391–406. https://doi.org/10.1145/2509136.2509509
- WaveScalar. In Proceedings of the 36th Annual IEEE/ACM International Symposium on Microarchitecture (MICRO 36). IEEE Computer Society, USA, 291.
- Equality Saturation: A New Approach to Optimization. In Proceedings of the 36th Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (Savannah, GA, USA) (POPL ’09). Association for Computing Machinery, New York, NY, USA, 264–276. https://doi.org/10.1145/1480881.1480915
- Evaluating Value-Graph Translation Validation for LLVM. In Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation (San Jose, California, USA) (PLDI ’11). Association for Computing Machinery, New York, NY, USA, 295–305. https://doi.org/10.1145/1993498.1993533
- Pretend synchrony: synchronous verification of asynchronous distributed programs. Proceedings of the ACM on Programming Languages 3 (2019), 1 – 30. https://api.semanticscholar.org/CorpusID:57757310
- Hybrid Dataflow/von-Neumann Architectures. IEEE Transactions on Parallel and Distributed Systems 25, 6 (2014), 1489–1509. https://doi.org/10.1109/TPDS.2013.125