Abstract
The paper introduces Self-Replicating Objects (SROs), a new concurrent programming abstraction. An SRO is implemented and used much like an ordinary .NET object and can expose arbitrary user-defined APIs, but it is aggressive about automatically exploiting multicore CPUs. It does so by spontaneously and transparently partitioning its state into a set of replicas that handle method calls in parallel and automatically merging replicas before processing calls that cannot execute in the replicated state. Developers need not be concerned about protecting access to shared data; each replica is a monitor and has its own state. The runtime ensures proper synchronization, scheduling, decides when to split/merge, and can transparently migrate replicas to other processes to decrease contention. Compared to threads/locks or toolkits such as .NET Parallel Extensions, SROs offer a simpler, more versatile programming model while delivering comparable, and in some cases even higher performance.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
References
http://www.intel.com/pressroom/archive/releases/20090526comp.htm
Sutter, H.: The concurrency revolution, http://www.ddj.com/cpp/184401916
Case, L.: Does quad core matter? (2007), extremetech.com
Hagedoorn, H.: Cpu scaling in games with dual and quad core processors (2008), guru3d.com
Intel: Digital Office Performance: Business Productivity with SYSmark 2007 preview (2009), intel.com
van Renesse, R.: Goal-oriented programming, or composition using events, or threads considered harmful. In: EW-8 (1998)
Ousterhout, J.: Why threads are a bad idea (for most purposes). Invited talk at USENIX (1996)
Sutter, H., Larus, J.: Software and the concurrency revolution. Queue 3(7) (2005)
Harris, T.: Exceptions and side-effects in atomic blocks. Science of Computer Programming 58(3) (2005)
Larus, J.: Spending moore’s dividend. CACM 52(5) (2009)
Amdahl, G.: Validity of the single processor approach to achieving large scale computing capabilities (2000)
Chamberlain, B., Callahan, D., Zima, H.: Parallel programmability and the chapel language. In: IJHPCA (2007)
Ghulou, A., Sprangle, E., Fang, J., Wu, G., Zhou, X.: Ct: A flexible parallel programming model for tera-scale architectures (2007), techresearch.intel.com
Reinders, J.: Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism. O’Reilly Media, Sebastopol (2007)
Duffy, J., Essey, E.: Parallel LINQ: Running queries on multi-core processors (2009), msdn.microsoft.com
Leijen, D., Hall, J.: Parallel performance: Optimize managed code for multicore machines (2009), msdn.microsoft.com
Blelloch, G.: NESL: A nested data-parallel language. CMU Tech. Report (1993)
Burton, F.: Functional programming for concurrent and distributed computing. Computer Journal 30(5) (1987)
Hewitt, C., Bishop, P., Steiger, R.: A universal modular actor formalism for artificial intelligence. In: IJCAI (1973)
Yokote, Y., Tokoro, M.: Experience and evolution of concurrent smalltalk. SIGPLAN Notices 22(12) (1987)
Baker, h., Hewitt, C.: The incremental garbage collection of processes. In: AIPL 1977 (1977)
Armstrong, J., Virding, R., Wikström, C., Williams, M.: Concurrent Programming in Erlang. Prentice-Hall, Englewood Cliffs (1996)
Haller, P., Odersky, M.: Event-based programming without inversion of control. In: JMLC (2006)
Haller, P., Odersky, M.: Actors that unify threads and events (2007), scala-lang.org
Pickering, R.: Concurrency in f# - part iii - erlang style message passing (2007), strangelights.com
Fähndrich, M., et al.: Language support for fast and reliable message-based communication in singularity os. In: EuroSys (2006)
Benton, N., Cardelli, L., Fournet, C.: Modern concurrency abstractions for c#. TOPLAS (2004)
Chrysanthakopoulos, G., Singh, S.: An asynchronous messaging library for c#. In: SCOOL (2005)
Podwysocki, M.: Introducing maestro – a dsl for actor based concurrency (2009), weblogs.asp.net/podwysocki
Gustafsson, N.: Axum: Language overview (2009), msdn.microsoft.com
Dean, J., Ghemawat, S.: Mapreduce: simplified data processing on large clusters. In: SOSP (2004)
Eugster, P.: Uniform proxies for java. In: OOPSLA (2006)
Ostrowski, K., Birman, K., Dolev, D., Ahnn, J.: Programming with Live Distributed Objects. In: Vitek, J. (ed.) ECOOP 2008. LNCS, vol. 5142, pp. 463–489. Springer, Heidelberg (2008)
Ostrowski, K., et al.: Live Distributed Objects (2007), liveobjects.cs.cornell.edu
Zhang, X., Hiltunen, M., Marzullo, K., Schlichting, R.: Customizable service state durability for service oriented architectures. In: EDCC (2006)
Marian, T., Balakrishnan, M., Birman, K., van Renesse, R.: Tempest: Soft state replication in the service tier. In: DSN (2008)
Ranger, C., Raghuraman, R., Penmetsa, A., Bradski, G., Kozyrakis, C.: Evaluating mapreduce for multi-core and multiprocessor systems. In: HPCA (2007)
Lämmel, R.: Google’s mapreduce programming model - revisited. Sci. Comput. Program. 68(3), 208–237 (2007)
Thies, B., Karczmarek, M., Amarasinghe, S.: Streamit: A language for streaming applications. In: ICCC (2001)
Black, A., Carlsson, M., Jones, M., Kieburtz, R., Nordlander, J.: Timber: A programming language for real-time embedded systems (2002), timber-lang.org
Varela, C., Agha, G.: Programming dynamically reconfigurable open systems with salsa. In: OOPSLA (2001)
Lauer, H., Needham, R.: On the duality of operating system structures. In: ACM SIGOPS OSR (1979)
Fournet, C., Gonthier, G.: The join calculus: A language for distributed mobile programming. In: APPSEM (2000)
Sulzmann, M., Lam, E., van Weert, P.: Actors with multihea- ded message receive patterns. In: COORDINATION (2008)
Srinivasan, S., Mycroft, A.: Kilim: Isolation-typed actors for java. In: Vitek, J. (ed.) ECOOP 2008. LNCS, vol. 5142, pp. 104–128. Springer, Heidelberg (2008)
Thomas, D., et al.: Actra: A multitasking / multiprocessing smalltalk. SIGPLAN Notices 24(4) (1989)
von Behren, R., Condit, J., Zhou, F., Necula, G., Brewer, E.: Capriccio: scalable threads for internet services. In: SOSP (2003)
Cunningham, R., Kohler, E.: Making events less slippery with eel. In: HotOS (2005)
von Behren, R., Condit, J., Brewer, E.: Why events are a bad idea (for high-concurrency servers). In: HotOS (2003)
Li, P., Zdancewic, S.: A language-based approach to unifying events and threads. Tech Report, U. of Penn (2006)
Blumofe, R., Joerg, C., Kuszmaul, B., Leiserson, C., Randall, K., Zhou, Y.: Cilk: An efficient multithreaded runtime system. In: PPoPP (1995)
Leijen, D., Schulte, W., Burckhardt, S.: The design of a task parallel library. In: OOPSLA (2009)
Allen, E., et al.: Project fortress: A multi-core language for multi-core processors (2008), linux-mag.com
Balakrishnan, S., Sohi, G.: Program demultiplexing: Data-flow based speculative parallelization of methods in sequential programs. In: SIGARCH (2006)
Rinard, M., Diniz, P.: Eliminating synchronization bottlenecks using adaptive replication. TOPLAS (2003)
Ostrowski, K., Birman, K., Dolev, D.: Quicksilver scalable multicast. In: NCA (2008)
Author information
Authors and Affiliations
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2010 Springer-Verlag Berlin Heidelberg
About this paper
Cite this paper
Ostrowski, K., Sakoda, C., Birman, K. (2010). Self-Replicating Objects for Multicore Platforms. In: D’Hondt, T. (eds) ECOOP 2010 – Object-Oriented Programming. ECOOP 2010. Lecture Notes in Computer Science, vol 6183. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-642-14107-2_22
Download citation
DOI: https://doi.org/10.1007/978-3-642-14107-2_22
Publisher Name: Springer, Berlin, Heidelberg
Print ISBN: 978-3-642-14106-5
Online ISBN: 978-3-642-14107-2
eBook Packages: Computer ScienceComputer Science (R0)