Flocks, herds and schools: A distributed behavioral model
SIGGRAPH '87 Proceedings of the 14th annual conference on Computer graphics and interactive techniques
ACM Transactions on Programming Languages and Systems (TOPLAS)
Active messages: a mechanism for integrated communication and computation
ISCA '92 Proceedings of the 19th annual international symposium on Computer architecture
A methodology for implementing highly concurrent data objects
ACM Transactions on Programming Languages and Systems (TOPLAS)
Are wait-free algorithms fast?
Journal of the ACM (JACM)
Using MPI: portable parallel programming with the message-passing interface
Using MPI: portable parallel programming with the message-passing interface
PVM: Parallel virtual machine: a users' guide and tutorial for networked parallel computing
PVM: Parallel virtual machine: a users' guide and tutorial for networked parallel computing
Cilk: an efficient multithreaded runtime system
PPOPP '95 Proceedings of the fifth ACM SIGPLAN symposium on Principles and practice of parallel programming
Message passing versus distributed shared memory on networks of workstations
Supercomputing '95 Proceedings of the 1995 ACM/IEEE conference on Supercomputing
Concurrent programming in ERLANG (2nd ed.)
Concurrent programming in ERLANG (2nd ed.)
Compositional parallel programming languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Eraser: a dynamic data race detector for multithreaded programs
ACM Transactions on Computer Systems (TOCS)
Concurrent programming in ML
Scheduling multithreaded computations by work stealing
Journal of the ACM (JACM)
Communicating and mobile systems: the &pgr;-calculus
Communicating and mobile systems: the &pgr;-calculus
Proceedings of the ACM 2000 conference on Java Grande
Pict: a programming language based on the Pi-Calculus
Proof, language, and interaction
Communicating sequential processes
Communications of the ACM
The Theory and Practice of Concurrency
The Theory and Practice of Concurrency
Networks, Routers and Transputers: Function, Performance and Applications
Networks, Routers and Transputers: Function, Performance and Applications
Implementation of Production Systems on Message-Passing Computers
IEEE Transactions on Parallel and Distributed Systems
Concurrent Objects in a Process Calculus
TPPP '94 Proceedings of the International Workshop on Theory and Practice of Parallel Programming
The HiPE/x86 Erlang Compiler: System Description and Performance Evaluation
FLOPS '02 Proceedings of the 6th International Symposium on Functional and Logic Programming
Tempest: a substrate for portable parallel programs
COMPCON '95 Proceedings of the 40th IEEE Computer Society International Conference
ACM SIGPLAN Notices
Message-Passing and Shared-Data Programming Models " Wish vs. Reality
HPCS '05 Proceedings of the 19th International Symposium on High Performance Computing Systems and Applications
Haskell on a shared-memory multiprocessor
Proceedings of the 2005 ACM SIGPLAN workshop on Haskell
Exploiting coarse-grained task, data, and pipeline parallelism in stream programs
Proceedings of the 12th international conference on Architectural support for programming languages and operating systems
Concurrent programming without locks
ACM Transactions on Computer Systems (TOCS)
Manticore: a heterogeneous parallel language
Proceedings of the 2007 workshop on Declarative aspects of multicore programming
Orchestrating the execution of stream programs on multicore platforms
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Validity of the single processor approach to achieving large scale computing capabilities
AFIPS '67 (Spring) Proceedings of the April 18-20, 1967, spring joint computer conference
Communicating mobile processes
CSP'04 Proceedings of the 2004 international conference on Communicating Sequential Processes: the First 25 Years
Hi-index | 0.00 |
Process-oriented programming is a design methodology in which software applications are constructed from communicating concurrent processes. A typical process-oriented design involves the composition of a large number of small isolated component processes. These concurrent components allow for the scalable parallel execution of the resulting application on both shared-memory and distributed-memory architectures. In this paper we present a runtime designed to support process-oriented programming by providing lightweight processes and communication primitives. The runtime's scheduler, implemented using lock-free algorithms, automatically executes concurrent components in parallel on multicore systems. Heuristics dynamically group processes into cache-affine work units based on communication patterns. Work units are then distributed via wait-free work-stealing. Initial performance analysis shows that, using the algorithms presented in this paper, process-oriented software can execute with an efficiency approaching that of optimised sequential and coarse-grain threaded designs.