skip to main content

Efficient Parallel Functional Programming with Effects

Published:06 June 2023Publication History
Skip Abstract Section

Abstract

Although functional programming languages simplify writing safe parallel programs by helping programmers to avoid data races, they have traditionally delivered poor performance. Recent work improved performance by using a hierarchical memory architecture that allows processors to allocate and reclaim memory independently without any synchronization, solving thus the key performance challenge afflicting functional programs. The approach, however, restricts mutation, or memory effects, so as to ensure "disentanglement", a low-level memory property that guarantees independence between different heaps in the hierarchy.

This paper proposes techniques for supporting entanglement and for allowing functional programs to use mutation at will. Our techniques manage entanglement by distinguishing between disentangled and entangled objects and shielding disentangled objects from the cost of entanglement management. We present a semantics that formalizes entanglement as a property at the granularity of memory objects, and define several cost metrics to reason about and bound the time and space cost of entanglement. We present an implementation of the techniques by extending the MPL compiler for Parallel ML. The extended compiler supports all features of the Parallel ML language, including unrestricted effects. Our experiments using a variety of benchmarks show that MPL incurs a small time and space overhead compared to sequential runs, scales well, and is competitive with languages such as C++, Go, Java, OCaml. These results show that our techniques can marry the safety benefits of functional programming with performance.

References

  1. 2011. Finagle: A Protocol-Agnostic RPC System. https://twitter.github.io/finagle/ Google ScholarGoogle Scholar
  2. 2015. Folly: Facebook Open-source Library. https://github.com/facebook/folly Google ScholarGoogle Scholar
  3. Umut A. Acar, Naama Ben-David, and Mike Rainey. 2017. Contention in Structured Concurrency: Provably Efficient Dynamic Non-Zero Indicators for Nested Parallelism. In Proceedings of the 22Nd ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP ’17). 75–88. isbn:978-1-4503-4493-7 Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. Umut A. Acar, Guy E. Blelloch, and Robert D. Blumofe. 2002. The Data Locality of Work Stealing. Theory of Computing Systems, 35, 3 (2002), 321–347. Google ScholarGoogle ScholarCross RefCross Ref
  5. Umut A. Acar, Arthur Charguéraud, Adrien Guatto, Mike Rainey, and Filip Sieczkowski. 2018. Heartbeat Scheduling: Provable Efficiency for Nested Parallelism. In Proceedings of the 39th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2018). 769–782. isbn:978-1-4503-5698-5 Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Umut A. Acar, Arthur Charguéraud, and Mike Rainey. 2016. Oracle-guided scheduling for controlling granularity in implicitly parallel languages. Journal of Functional Programming (JFP), 26 (2016), e23. Google ScholarGoogle ScholarCross RefCross Ref
  7. Umut A. Acar, Arthur Charguéraud, Mike Rainey, and Filip Sieczkowski. 2016. Dag-calculus: A Calculus for Parallel Computation. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming (ICFP 2016). 18–32. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. Sarita V. Adve. 2010. Data races are evil with no exceptions: technical perspective. Commun. ACM, 53, 11 (2010), 84. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Bowen Alpern, Larry Carter, and Jeanne Ferrante. 1995. Space-limited procedures: A methodology for portable high-performance. In Programming Models for Massively Parallel Computers. 10–17. Google ScholarGoogle Scholar
  10. Daniel Anderson, Guy E. Blelloch, Laxman Dhulipala, Magdalen Dobson, and Yihan Sun. 2022. The problem-based benchmark suite (PBBS), V2. In PPoPP ’22: 27th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, Seoul, Republic of Korea, April 2 - 6, 2022, Jaejin Lee, Kunal Agrawal, and Michael F. Spear (Eds.). ACM, 445–447. https://doi.org/10.1145/3503221.3508422 Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Jatin Arora, Sam Westrick, and Umut A. Acar. 2021. Provably Space Efficient Parallel Functional Programming. In Proceedings of the 48th Annual ACM Symposium on Principles of Programming Languages (POPL)". Google ScholarGoogle Scholar
  12. Jatin Arora, Sam Westrick, and Umut A. Acar. 2023. Replication instructions for Article: Efficient Parallel Functional Programming with Effects. https://doi.org/10.5281/zenodo.7824069 Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Arvind, Rishiyur S. Nikhil, and Keshav K. Pingali. 1989. I-structures: Data Structures for Parallel Computing. ACM Trans. Program. Lang. Syst., 11, 4 (1989), Oct., 598–632. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. Giuseppe Attardi and Tito Flagella. 1994. A Customisable Memory Management Framework. International Computer Science Institute, Berkeley. ftp://ftp.icsi.berkeley.edu:/pub/techreports/1994/tr-94-010.ps.Z Also Proceedings of the USENIX C++ Conference, Cambridge, MA, 1994 Google ScholarGoogle Scholar
  15. Giuseppe Attardi, Tito Flagella, and Pietro Iglio. 1998. A Customisable Memory Management Framework for C++. Software Prac. Experience, 28, 11 (1998), Nov., 1143–1183. ftp://ftp.di.unipi.it/pub/Papers/attardi/SPE.ps.gz Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Sven Auhagen, Lars Bergstrom, Matthew Fluet, and John H. Reppy. 2011. Garbage collection for multicore NUMA machines. In Proceedings of the 2011 ACM SIGPLAN workshop on Memory Systems Performance and Correctness (MSPC). 51–57. Google ScholarGoogle Scholar
  17. Joel F. Bartlett. 1988. Compacting Garbage Collection with Ambiguous Roots. DEC Western Research Laboratory, Palo Alto, CA. http://www.research.digital.com/wrl/techreports/88.2.ps Also in Lisp Pointers 1, 6 (April–June 1988), 2–12 Google ScholarGoogle Scholar
  18. Joel F. Bartlett. 1989. Mostly-Copying Garbage Collection picks up Generations and C++. DEC Western Research Laboratory, Palo Alto, CA. ftp://ftp.digital.com/pub/DEC/WRL/research-reports/WRL-TN-12.ps Sources available in ftp://ftp.digital.com/pub/DEC/CCgc Google ScholarGoogle Scholar
  19. M. Bauer, S. Treichler, E. Slaughter, and A. Aiken. 2012. Legion: Expressing locality and independence with logical regions. In SC ’12: Proceedings of the International Conference on High Performance Computing, Networking, Storage and Analysis. 1–11. issn:2167-4337 https://doi.org/10.1109/SC.2012.71 Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Emery D. Berger, Ting Yang, Tongping Liu, and Gene Novark. 2009. Grace: Safe Multithreaded Programming for C/C++. In Proceedings of the 24th ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA ’09). Association for Computing Machinery, New York, NY, USA. 81–96. isbn:9781605587660 https://doi.org/10.1145/1640089.1640096 Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Guy E. Blelloch. 1996. Programming Parallel Algorithms. Commun. ACM, 39, 3 (1996), 85–97. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Guy E. Blelloch, Daniel Anderson, and Laxman Dhulipala. 2020. ParlayLib - A Toolkit for Parallel Algorithms on Shared-Memory Multicore Machines. In SPAA ’20: 32nd ACM Symposium on Parallelism in Algorithms and Architectures, Virtual Event, USA, July 15-17, 2020, Christian Scheideler and Michael Spear (Eds.). ACM, 507–509. https://doi.org/10.1145/3350755.3400254 Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Guy E. Blelloch and Perry Cheng. 1999. On Bounding Time and Space for Multiprocessor Garbage Collection. In Proceedings of SIGPLAN’99 Conference on Programming Languages Design and Implementation (ACM SIGPLAN Notices). ACM Press, Atlanta. 104–117. Google ScholarGoogle Scholar
  24. Guy E. Blelloch, Phillip B. Gibbons, and Yossi Matias. 1999. Provably efficient scheduling for languages with fine-grained parallelism. J. ACM, 46 (1999), March, 281–321. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Guy E. Blelloch, Jonathan C. Hardwick, Jay Sipelstein, Marco Zagha, and Siddhartha Chatterjee. 1994. Implementation of a Portable Nested Data-Parallel Language. J. Parallel Distrib. Comput., 21, 1 (1994), 4–14. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. Robert D. Blumofe, Christopher F. Joerg, Bradley C. Kuszmaul, Charles E. Leiserson, Keith H. Randall, and Yuli Zhou. 1995. Cilk: An Efficient Multithreaded Runtime System. In Proceedings of the Fifth ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming. Santa Barbara, California. 207–216. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Robert L Bocchino, Jr., Vikram S. Adve, Sarita V. Adve, and Marc Snir. 2009. Parallel programming must be deterministic by default. In First USENIX Conference on Hot Topics in Parallelism. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. Hans-Juergen Boehm. 2011. How to Miscompile Programs with "Benign" Data Races. In 3rd USENIX Workshop on Hot Topics in Parallelism, HotPar’11, Berkeley, CA, USA, May 26-27, 2011. Google ScholarGoogle Scholar
  29. Trevor Alexander Brown. 2015. Reclaiming Memory for Lock-Free Data Structures: There Has to Be a Better Way. In Proceedings of the 2015 ACM Symposium on Principles of Distributed Computing (PODC ’15). Association for Computing Machinery, New York, NY, USA. 261–270. isbn:9781450336178 https://doi.org/10.1145/2767386.2767436 Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Manuel M. T. Chakravarty, Roman Leshchinskiy, Simon L. Peyton Jones, Gabriele Keller, and Simon Marlow. 2007. Data parallel Haskell: a status report. In Proceedings of the POPL 2007 Workshop on Declarative Aspects of Multicore Programming, DAMP 2007, Nice, France, January 16, 2007. 10–18. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Philippe Charles, Christian Grothoff, Vijay Saraswat, Christopher Donawa, Allan Kielstra, Kemal Ebcioglu, Christoph von Praun, and Vivek Sarkar. 2005. X10: an object-oriented approach to non-uniform cluster computing. In Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA ’05). ACM, 519–538. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Alexander Collins, Dominik Grewe, Vinod Grover, Sean Lee, and Adriana Susnea. 2014. NOVA: A Functional Language for Data Parallelism. In Proceedings of ACM SIGPLAN International Workshop on Libraries, Languages, and Compilers for Array Programming (ARRAY’14). Association for Computing Machinery, New York, NY, USA. 8–13. isbn:9781450329378 https://doi.org/10.1145/2627373.2627375 Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. Christopher M. Dawson and Michael A. Nielsen. 2006. The Solovay-Kitaev algorithm. Quantum Inf. Comput., 6, 1 (2006), 81–95. https://doi.org/10.26421/QIC6.1-6 Google ScholarGoogle ScholarCross RefCross Ref
  34. Jason Evans. 2006. A Scalable Concurrent malloc(3) Implementation for FreeBSD. 01. Google ScholarGoogle Scholar
  35. Yotam M. Y. Feldman, Artem Khyzha, Constantin Enea, Adam Morrison, Aleksandar Nanevski, Noam Rinetzky, and Sharon Shoham. 2020. Proving Highly-Concurrent Traversals Correct. Proc. ACM Program. Lang., 4, OOPSLA (2020), Article 128, nov, 29 pages. https://doi.org/10.1145/3428196 Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Matthew Fluet, Mike Rainey, and John Reppy. 2008. A scheduling framework for general-purpose parallel languages. In ACM SIGPLAN International Conference on Functional Programming (ICFP). Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Matthew Fluet, Mike Rainey, John Reppy, and Adam Shaw. 2011. Implicitly threaded parallelism in Manticore. Journal of Functional Programming, 20, 5-6 (2011), 1–40. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. Keir Fraser. 2003. Practical lock-freedom. Google ScholarGoogle Scholar
  39. Matteo Frigo, Pablo Halpern, Charles E. Leiserson, and Stephen Lewin-Berlin. 2009. Reducers and Other Cilk++ Hyperobjects. In 21st Annual ACM Symposium on Parallelism in Algorithms and Architectures. 79–90. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. Vincent Gramoli. 2015. More than You Ever Wanted to Know about Synchronization: Synchrobench, Measuring the Impact of the Synchronization on Concurrent Algorithms. In Proceedings of the 20th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (PPoPP 2015). Association for Computing Machinery, New York, NY, USA. 1–10. isbn:9781450332057 https://doi.org/10.1145/2688500.2688501 Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Adrien Guatto, Sam Westrick, Ram Raghunathan, Umut A. Acar, and Matthew Fluet. 2018. Hierarchical memory management for mutable state. In Proceedings of the 23rd ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, PPoPP 2018, Vienna, Austria, February 24-28, 2018. 81–93. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. Robert H. Halstead, Jr.. 1984. Implementation of Multilisp: Lisp on a Multiprocessor. In Proceedings of the 1984 ACM Symposium on LISP and functional programming (LFP ’84). ACM, 9–17. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. Kevin Hammond. 2011. Why Parallel Functional Programming Matters: Panel Statement. In Reliable Software Technologies - Ada-Europe 2011 - 16th Ada-Europe International Conference on Reliable Software Technologies, Edinburgh, UK, June 20-24, 2011. Proceedings. 201–205. Google ScholarGoogle ScholarCross RefCross Ref
  44. Timothy L. Harris. 2001. A Pragmatic Implementation of Non-blocking Linked-Lists. In Distributed Computing, 15th International Conference, DISC 2001, Lisbon, Portugal, October 3-5, 2001, Proceedings, Jennifer L. Welch (Ed.) (Lecture Notes in Computer Science, Vol. 2180). Springer, 300–314. https://doi.org/10.1007/3-540-45414-4_21 Google ScholarGoogle ScholarCross RefCross Ref
  45. Antony Hosking. 2006. Portable, Mostly-Concurrent, Mostly-Copying Garbage Collection for Multi-Processors. 2006, https://doi.org/10.1145/1133956.1133963 Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Shams Mahmood Imam and Vivek Sarkar. 2014. Habanero-Java library: a Java 8 framework for multicore programming. In 2014 International Conference on Principles and Practices of Programming on the Java Platform Virtual Machines, Languages and Tools, PPPJ ’14. 75–86. Google ScholarGoogle ScholarCross RefCross Ref
  47. 2009. Intel Cilk++ SDK Programmer’s Guide. Document Number: 322581-001US Google ScholarGoogle Scholar
  48. 2009. Intel(R) Threading Building Blocks. Available from http://www.threadingbuildingblocks.org/documentation.php Google ScholarGoogle Scholar
  49. Richard Jones, Antony Hosking, and Eliot Moss. 2012. The Garbage Collection Handbook : The Art of Automatic Memory Management. CRC Press. Google ScholarGoogle Scholar
  50. Gabriele Keller, Manuel M.T. Chakravarty, Roman Leshchinskiy, Simon Peyton Jones, and Ben Lippmeier. 2010. Regular, shape-polymorphic, parallel arrays in Haskell. In Proceedings of the 15th ACM SIGPLAN international conference on Functional programming (ICFP ’10). 261–272. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. Alexei Yu Kitaev, Alexander Shen, Mikhail N Vyalyi, and Mikhail N Vyalyi. 2002. Classical and quantum computation. American Mathematical Soc.. Google ScholarGoogle Scholar
  52. Chaitanya Koparkar, Mike Rainey, Michael Vollmer, Milind Kulkarni, and Ryan R. Newton. 2021. Efficient Tree-Traversals: Reconciling Parallelism and Dense Data Representations. 5, ICFP (2021), Article 91, aug, 29 pages. https://doi.org/10.1145/3473596 Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. A. Krishnamurthy, D. E. Culler, A. Dusseau, S. C. Goldstein, S. Lumetta, T. von Eicken, and K. Yelick. 1993. Parallel Programming in Split-C. In Proceedings of the 1993 ACM/IEEE Conference on Supercomputing (Supercomputing ’93). ACM, New York, NY, USA. 262–273. isbn:0-8186-4340-4 https://doi.org/10.1145/169627.169724 Google ScholarGoogle ScholarDigital LibraryDigital Library
  54. Ananya Kumar, Guy E. Blelloch, and Robert Harper. 2017. Parallel functional arrays. In Proceedings of the 44th ACM SIGPLAN Symposium on Principles of Programming Languages, POPL 2017, Paris, France, January 18-20, 2017, Giuseppe Castagna and Andrew D. Gordon (Eds.). ACM, 706–718. Google ScholarGoogle ScholarDigital LibraryDigital Library
  55. Matthew Le and Matthew Fluet. 2015. Partial Aborts for Transactions via First-class Continuations. In Proceedings of the 20th ACM SIGPLAN International Conference on Functional Programming (ICFP 2015). 230–242. isbn:978-1-4503-3669-7 Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. Doug Lea. 2000. A Java fork/join framework. In Proceedings of the ACM 2000 conference on Java Grande (JAVA ’00). 36–43. Google ScholarGoogle ScholarDigital LibraryDigital Library
  57. Peng Li, Simon Marlow, Simon L. Peyton Jones, and Andrew P. Tolmach. 2007. Lightweight concurrency primitives for GHC. In Proceedings of the ACM SIGPLAN Workshop on Haskell, Haskell 2007, Freiburg, Germany, September 30, 2007. 107–118. Google ScholarGoogle Scholar
  58. Jonatan Lindén and Bengt Jonsson. 2013. A Skiplist-Based Concurrent Priority Queue with Minimal Memory Contention. In Principles of Distributed Systems - 17th International Conference, OPODIS 2013, Nice, France, December 16-18, 2013. Proceedings, Roberto Baldoni, Nicolas Nisse, and Maarten van Steen (Eds.) (Lecture Notes in Computer Science, Vol. 8304). Springer, 206–220. https://doi.org/10.1007/978-3-319-03850-6_15 Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. Simon Marlow and Simon L. Peyton Jones. 2011. Multicore garbage collection with local heaps. In Proceedings of the 10th International Symposium on Memory Management, ISMM 2011, San Jose, CA, USA, June 04 - 05, 2011, Hans-Juergen Boehm and David F. Bacon (Eds.). ACM, 21–32. Google ScholarGoogle Scholar
  60. Maged M. Michael and Michael L. Scott. 1996. Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms. In Proceedings of the Fifteenth Annual ACM Symposium on Principles of Distributed Computing, Philadelphia, Pennsylvania, USA, May 23-26, 1996, James E. Burns and Yoram Moses (Eds.). ACM, 267–275. https://doi.org/10.1145/248052.248106 Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. MLton web site. http://www.mlton.org Google ScholarGoogle Scholar
  62. Stefan Muller, Kyle Singer, Noah Goldstein, Umut A. Acar, Kunal Agrawal, and I-Ting Angelina Lee. 2020. Responsive Parallelism with Futures and State. In Proceedings of the ACM Conference on Programming Language Design and Implementation (PLDI). Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. Stefan K. Muller and Umut A. Acar. 2016. Latency-Hiding Work Stealing: Scheduling Interacting Parallel Computations with Work Stealing. In Proceedings of the 28th ACM Symposium on Parallelism in Algorithms and Architectures, SPAA 2016, Asilomar State Beach/Pacific Grove, CA, USA, July 11-13, 2016. 71–82. Google ScholarGoogle Scholar
  64. Stefan K. Muller, Umut A. Acar, and Robert Harper. 2017. Responsive Parallel Computation: Bridging Competitive and Cooperative Threading. In Proceedings of the 38th ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2017). ACM, New York, NY, USA. 677–692. isbn:978-1-4503-4988-8 Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. Stefan K. Muller, Umut A. Acar, and Robert Harper. 2018. Competitive Parallelism: Getting Your Priorities Right. Proc. ACM Program. Lang., 2, ICFP (2018), Article 95, July, 30 pages. issn:2475-1421 Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. Stefan K. Muller, Umut A. Acar, and Robert Harper. 2018. Types and Cost Models for Responsive Parallelism. In Proceedings of the 14th ACM SIGPLAN International Conference on Functional Programming (ICFP ’18). Google ScholarGoogle Scholar
  67. Robert W. Numrich and John Reid. 1998. Co-array Fortran for Parallel Programming. SIGPLAN Fortran Forum, 17, 2 (1998), Aug., 1–31. issn:1061-7264 https://doi.org/10.1145/289918.289920 Google ScholarGoogle ScholarDigital LibraryDigital Library
  68. Atsushi Ohori, Kenjiro Taura, and Katsuhiro Ueno. 2018. Making SML# a General-purpose High-performance Language. Unpublished Manuscript Google ScholarGoogle Scholar
  69. Simon L. Peyton Jones, Roman Leshchinskiy, Gabriele Keller, and Manuel M. T. Chakravarty. 2008. Harnessing the Multicores: Nested Data Parallelism in Haskell. In FSTTCS. 383–414. Google ScholarGoogle Scholar
  70. Prakash Prabhu, Stephen R. Beard, Sotiris Apostolakis, Ayal Zaks, and David I. August. 2018. MemoDyn: Exploiting Weakly Consistent Data Structures for Dynamic Parallel Memoization. In Proceedings of the 27th International Conference on Parallel Architectures and Compilation Techniques (PACT ’18). Association for Computing Machinery, New York, NY, USA. Article 15, 12 pages. isbn:9781450359863 https://doi.org/10.1145/3243176.3243193 Google ScholarGoogle ScholarDigital LibraryDigital Library
  71. Ram Raghunathan, Stefan K. Muller, Umut A. Acar, and Guy Blelloch. 2016. Hierarchical Memory Management for Parallel Programs. In Proceedings of the 21st ACM SIGPLAN International Conference on Functional Programming (ICFP 2016). ACM, New York, NY, USA. 392–406. Google ScholarGoogle ScholarDigital LibraryDigital Library
  72. Rust Team. 2019. Rust Language. https://www.rust-lang.org/ Google ScholarGoogle Scholar
  73. Julian Shun and Guy E. Blelloch. 2014. Phase-Concurrent Hash Tables for Determinism. In Proceedings of the 26th ACM Symposium on Parallelism in Algorithms and Architectures (SPAA ’14). Association for Computing Machinery, New York, NY, USA. 96–107. isbn:9781450328210 https://doi.org/10.1145/2612669.2612687 Google ScholarGoogle ScholarDigital LibraryDigital Library
  74. Julian Shun, Guy E. Blelloch, Jeremy T. Fineman, Phillip B. Gibbons, Aapo Kyrola, Harsha Vardhan Simhadri, and Kanat Tangwongsan. 2012. Brief Announcement: The Problem Based Benchmark Suite. In Proceedings of the Twenty-fourth Annual ACM Symposium on Parallelism in Algorithms and Architectures (SPAA ’12). 68–70. isbn:978-1-4503-1213-4 Google ScholarGoogle ScholarDigital LibraryDigital Library
  75. Kyle Singer, Kunal Agrawal, and I-Ting Angelina Lee. 2020. Scheduling I/O Latency-Hiding Futures in Task-Parallel Platforms. In 1st Symposium on Algorithmic Principles of Computer Systems, APOCS 2020, Salt Lake City, UT, USA, January 8, 2020, Bruce M. Maggs (Ed.). SIAM, 147–161. https://doi.org/10.1137/1.9781611976021.11 Google ScholarGoogle ScholarCross RefCross Ref
  76. Kyle Singer, Yifan Xu, and I-Ting Angelina Lee. 2019. Proactive Work Stealing for Futures. In Proceedings of the 24th Symposium on Principles and Practice of Parallel Programming (PPoPP ’19). ACM, New York, NY, USA. 257–271. isbn:978-1-4503-6225-2 https://doi.org/10.1145/3293883.3295735 Google ScholarGoogle ScholarDigital LibraryDigital Library
  77. K. C. Sivaramakrishnan, Stephen Dolan, Leo White, Sadiq Jaffer, Tom Kelly, Anmol Sahoo, Sudha Parimala, Atul Dhiman, and Anil Madhavapeddy. 2020. Retrofitting parallelism onto OCaml. Proc. ACM Program. Lang., 4, ICFP (2020), 113:1–113:30. Google ScholarGoogle ScholarDigital LibraryDigital Library
  78. K. C. Sivaramakrishnan, Lukasz Ziarek, and Suresh Jagannathan. 2014. MultiMLton: A multicore-aware runtime for standard ML. Journal of Functional Programming, FirstView (2014), 6, 1–62. Google ScholarGoogle Scholar
  79. Daniel Spoonhower. 2009. Scheduling Deterministic Parallel Programs. Ph. D. Dissertation. Carnegie Mellon University. https://www.cs.cmu.edu/~rwh/theses/spoonhower.pdf Google ScholarGoogle Scholar
  80. Sam Westrick, Jatin Arora, and Umut A. Acar. 2022. Entanglement Detection With Near-Zero Cost. In Proceedings of the 24th ACM SIGPLAN International Conference on Functional Programming (ICFP 2022). Google ScholarGoogle Scholar
  81. Sam Westrick, Rohan Yadav, Matthew Fluet, and Umut A. Acar. 2020. Disentanglement in Nested-Parallel Programs. In Proceedings of the 47th Annual ACM Symposium on Principles of Programming Languages (POPL)". Google ScholarGoogle Scholar
  82. Kathy Yelick, Luigi Semenzato, Geoff Pike, Carleton Miyamoto, Ben Liblit, Arvind Krishnamurthy, Paul Hilfinger, Susan Graham, David Gay, Phil Colella, and Alex Aiken. 1998. Titanium: a high-performance Java dialect. Concurrency: Practice and Experience, 10, 11-13 (1998), 825–836. Google ScholarGoogle ScholarCross RefCross Ref
  83. Lukasz Ziarek, K. C. Sivaramakrishnan, and Suresh Jagannathan. 2011. Composable asynchronous events. In Proceedings of the 32nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI 2011, San Jose, CA, USA, June 4-8, 2011. 628–639. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Efficient Parallel Functional Programming with Effects

      Recommendations

      Comments

      Login options

      Check if you have access through your login credentials or your institution to get full access on this article.

      Sign in

      Full Access

      PDF Format

      View or Download as a PDF file.

      PDF

      eReader

      View online with eReader.

      eReader