<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stefan-Marr.de &#187; Manycore</title>
	<atom:link href="http://soft.vub.ac.be/~smarr/tag/manycore/feed/" rel="self" type="application/rss+xml" />
	<link>http://soft.vub.ac.be/~smarr</link>
	<description>personal and research notes</description>
	<lastBuildDate>Tue, 24 Jan 2012 18:41:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>OOSPLA 2011 @SPLASH2011, Day 2</title>
		<link>http://soft.vub.ac.be/~smarr/2011/10/oospla-2011-splash2011-day-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=oospla-2011-splash2011-day-2</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/10/oospla-2011-splash2011-day-2/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 10:00:19 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[OOPSLA]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[SPLASH]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=491</guid>
		<description><![CDATA[The second day of the technical tracks started with a keynote by Markus Püschel. He is not the typical programming language researcher you meet at OOPSLA, but he does research in automatic optimization of programs. In his keynote, he showed a number of examples how to get the best performance for a given algorithm out [...]]]></description>
			<content:encoded><![CDATA[<p>The second day of the technical tracks started with a <a href="http://splashcon.org/2011/program/keynotes/188-onward-keynote">keynote by Markus Püschel</a>. He is not the typical programming language researcher you meet at OOPSLA, but he does research in automatic optimization of programs. In his keynote, he showed a number of examples how to get the best performance for a given algorithm out of a particular processor architecture. Today’s compilers are still not up to the task, and will probably never be up to it. Given a naïve implementation, hand-optimized C code can have 10x speedup when dependencies are made explicit, and the compiler knows that no aliasing can happen. He was then discussing how that can be approached in an automated way, and was also thinking about what programming languages could do.</p>
<h2>Award Papers</h2>
<p>Afterwards, I attended the session with the awarded OOPSLA papers. The <a href="http://dx.doi.org/10.1145/2048066.2048098">Hybrid Partial Evaluation</a> talk presented an approach to avoid the typical cost of use of reflection or ‘interpretation’. The presentation of <a href="http://dx.doi.org/10.1145/2048066.2048099">SugarJ: Library-based Syntactic Languages</a> felt like a déjà vu. I did not get where it is different from <a href="http://scg.unibe.ch/research/helvetia">Helvetica</a> other than that it is for Java. The third paper on <a href="http://dx.doi.org/10.1145/2048066.2048100">Reactive Imperative Programming with Dataflow Constraints</a> was interesting in that it used also memory protection tricks to realize a reactive model in C++. The last presentation: <a href="http://dx.doi.org/10.1145/2048066.2048101">Two for the Price of One: A Model for Parallel and Incremental Computation</a> was very interesting. I have not used incremental computations as far as I am aware of anywhere other than for course work, but bringing it together with parallel programming in a single programming model, gives plenty of opportunities for super-linear speedups.</p>
<h2>Parallel and Concurrent Programming</h2>
<p>The second session of the day was on parallel and concurrent programming. <a href="http://dx.doi.org/10.1145/2048066.2048108">Kismet: Parallel Speedup Estimates for Sequential Programs</a> tackled the problem to get an idea of what opportunities for parallelism are available in a given program without having to change the used algorithms and approaches to much. For that, it uses data dependency analysis to characterize the critical path on a data-flow level. Since that usually does not give realistic results because of overestimation of parallelizability, they use in addition a hierarchical model of loops and the knowledge of the available hardware parallelism to better predict possible speedups.</p>
<p>The <a title="Efficiently speeding up sequential computation through the n-way programming model" href="http://dx.doi.org/10.1145/2048066.2048109">second</a> and the <a title="Exploiting coarse-grain speculative parallelism" href="http://dx.doi.org/10.1145/2048066.2048110">third talk</a> where almost identical in terms of problem and goal. Essentially, they provide the necessary infrastructure to run different variants of sequential implementations in parallel and then chose either the winner in terms of runtime or precision. These approaches are especially interesting if the available algorithms have very different properties for different input or input sizes. For instance, some mathematical algorithms just do not converge to a solution for certain inputs while they are very fast for others.</p>
<p>The last talk of the session discussed <a href="http://dx.doi.org/10.1145/2048066.2048111">Scalable Join Patterns</a>. Join patterns are an old approach to describe synchronization mechanism flexibly and declaratively. The presented work provided a scalable implementation approach that seems to work quite well and when they would use a compilation based approach for the patters, I guess it could be a very feasible and flexible replacement for standard synchronization mechanism provided as libraries.</p>
<h2>Panel</h2>
<p>Instead of attending the third paper session of the day, I attended the panel on <a href="http://splashcon.org/2011/schedule/wednesday-oct-26/229">Multicore, Manycore, and Cloud Computing: Is a new Programming Language Paradigm required?</a>. Well, it was entertaining <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Nothing really new, no surprising arguments as far as I recall, but certainly interesting to watch. I think, they also recorded it. So it might be floating around the web soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/10/oospla-2011-splash2011-day-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transitioning to Multicore @SPLASH2011</title>
		<link>http://soft.vub.ac.be/~smarr/2011/10/transitioning-to-multicore-splash2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=transitioning-to-multicore-splash2011</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/10/transitioning-to-multicore-splash2011/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 01:13:40 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SPLASH]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=477</guid>
		<description><![CDATA[And here we go again: SPLASH 2011 has started with its first day of workshops. I attended the Transitioning to Multicore workshop. For me the most interesting talks were two empirical studies presented by Fernando Castor. The first talk was about a controlled experiment with students using coarse-grained locks (or actually MVars) and STM in [...]]]></description>
			<content:encoded><![CDATA[<p>And here we go again: SPLASH 2011 has started with its first day of workshops.</p>
<p>I attended the <a href="http://tmc.supertriceratops.com/">Transitioning to Multicore workshop</a>.</p>
<p>For me the most interesting talks were two empirical studies presented by Fernando Castor. The first talk was about a <a href="http://tmc.supertriceratops.com/papers/tmc2011-7-Castor.pdf">controlled experiment with students using coarse-grained locks (or actually MVars) and STM in Haskell</a>. While such experiments are usually biased in some way or another, he presented an interesting set of anecdotes along with the actual results. Notably, he observed similar mistakes done by the students as we observed as part of our <a href="http://soft.vub.ac.be/~tvcutsem/multicore/">Multicore Programming</a> course. It seems to be hard to define the right granularity of atomicity, especially when an all-inclusive atomic section is not applicable. His second talk was about analyzing the use of <a href="http://tmc.supertriceratops.com/papers/tmc2011-1-Torres.pdf">concurrency constructs in open source software</a>. While this was still very early work, it shows how gradual the adoption of libraries like java.util.concurrent is in such software projects.</p>
<p>The other presentations included approaches to <a href="http://tmc.supertriceratops.com/papers/tmc2011-6-Pina.pdf">minimize conflicts in transactional systems</a>, <a href="http://tmc.supertriceratops.com/papers/tmc2011-2-Rito.pdf">automated support for memorization</a> on top of STM, and how Intel’s TBB can be used to express <a href="http://tmc.supertriceratops.com/papers/tmc2011-3-Reed.pdf">parallel pipelined programs</a> with a focus on which kind of pipelines can be easily expressed.</p>
<p>For me, the workshop ended with a panel discussion featuring Doug Lea, Matt Sottlie, Suresh Srinivas, and Tucker Taft. The most interesting point made was that one of the goals should be to facilitate all kind of different flavors of parallel programming (<a title="Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Multicore/Manycore Era?" href="http://www.stefan-marr.de/2011/09/which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era/">of course! <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </a>) Matt pointed out in his introduction that parallel programming models are all good and well, and that being able to spilt up a problem in threads is important, but that the memory wall is often not discussed and that feeding enough data to the threads to keep them busy is becoming increasingly harder. Another point made in different variations is the importance of tools, their accessibility to developers, and their integration with runtimes and hardware. Doug mentioned also that the hardware vendors are making life harder for everyone without apparent reason by not using standards for instance to number cores. Especially since they do not provide the mechanisms to query the cache design properties and core arrangements that inhibits portable and reliable performance for mechanism like work-stealing schedulers.</p>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/10/transitioning-to-multicore-splash2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Multicore/Manycore Era?</title>
		<link>http://soft.vub.ac.be/~smarr/2011/09/which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/09/which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 21:52:51 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[Encapsulation]]></category>
		<category><![CDATA[Enforcement]]></category>
		<category><![CDATA[Guarantees]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[Locality]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[Models]]></category>
		<category><![CDATA[Properties]]></category>
		<category><![CDATA[Virtual Machines]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=469</guid>
		<description><![CDATA[As preparation for SPLASH&#8217;11, here my paper for the VMIL workshop. It is a position paper discussing in which direction virtual machines should evolve in the future with regard to the challenges manycore architectures and concurrent programming bring. As I said, this is a position paper, which hopefully provokes discussion. Feedback of any kind is [...]]]></description>
			<content:encoded><![CDATA[<p>As preparation for SPLASH&#8217;11, here my paper for the <a href="http://www.cs.iastate.edu/~design/vmil/2011/">VMIL workshop</a>. It is a position paper discussing in which direction virtual machines should evolve in the future with regard to the challenges manycore architectures and concurrent programming bring.</p>
<p>As I said, this is a position paper, which hopefully provokes discussion. Feedback of any kind is welcome, and I am happy to adapt my presentation accordingly.</p>
<p><strong>Abstract</strong></p>
<blockquote>
<p>While parallel programming for very regular problems has been used in the scientific community by non-computer-scientists successfully for a few decades now, concurrent programming and solving irregular problems remains hard. Furthermore, we shift from few expert system programmers mastering concurrency for a constrained set of problems to mainstream application developers being required to master concurrency for a wide variety of problems.</p>
<p>Consequently, high-level language virtual machine (VM) research faces interesting questions. What are processor design changes that have an impact on the abstractions provided by VMs to provide platform independence? How can application programmers&#8217; diverse needs be facilitated to solve concurrent programming problems?</p>
<p>We argue that VMs will need to be ready for a wide range of different concurrency models that allow solving concurrency problems with appropriate abstractions. Furthermore, they need to abstract from heterogeneous processor architectures, varying performance characteristics, need to account for memory access cost and inter-core communication mechanisms but should only expose the minimal useful set of notions like locality, explicit communication, and adaptable scheduling to maintain their abstracting nature.</p>
<p>Eventually, language designers need to be enabled to guarantee properties like encapsulation, scheduling guarantees, and immutability also when an interaction between different problem-specific concurrency abstractions is required.</p></blockquote>
<ul>
	<li>Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Multicore/Manycore Era?, <em>Stefan Marr</em>, <em>Mattias De Wael</em>, <em>Michael Haupt</em>, <em>Theo D&#8217;Hondt</em>, Proceedings of the 5th Workshop on Virtual Machines and Intermediate Languages, USA, ACM (2011), to appear.</li>
	<li>Paper: <a title="Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Multicore/Manycore Era?" href="http://soft.vub.ac.be/~smarr/downloads/vmil11-smarr-et-al-which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicore-manycore-era.pdf">PDF</a><br /> ©ACM, 2011. This is the author&#8217;s version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. To appear.</li>
	<li>BibTex: <a href="http://www.bibsonomy.org/bibtex/2f67c508d81780a9a7e987cb4f5bdaeda/gron">BibSonomy</a></li>
</ul>
<p><strong>Slides</strong></p>


<div style="width:425px;margin:0 auto;" id="__ss_9883270"><object id="__sse9883270" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vmil2011-flattened-111026004845-phpapp02&#038;stripped_title=which-problems-does-a-multilanguage-virtual-machine-need-to-solve-in-the-multicoremanycore-era&#038;userName=gron" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse9883270" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vmil2011-flattened-111026004845-phpapp02&#038;stripped_title=which-problems-does-a-multilanguage-virtual-machine-need-to-solve-in-the-multicoremanycore-era&#038;userName=gron" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/09/which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sly and the RoarVM: Exploring the Manycore Future of Programming</title>
		<link>http://soft.vub.ac.be/~smarr/2011/08/sly-and-the-roarvm-exploring-the-manycore-future-of-programming/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sly-and-the-roarvm-exploring-the-manycore-future-of-programming</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/08/sly-and-the-roarvm-exploring-the-manycore-future-of-programming/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 14:01:34 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Renaissance]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[behavior]]></category>
		<category><![CDATA[emergence]]></category>
		<category><![CDATA[garbage collection]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[Nondeterministic]]></category>
		<category><![CDATA[pauseless]]></category>
		<category><![CDATA[Sly]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[synchronization]]></category>
		<category><![CDATA[TILE64]]></category>
		<category><![CDATA[Tilera]]></category>
		<category><![CDATA[Virtual Machines]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=416</guid>
		<description><![CDATA[Today, I gave a talk at the ExaScience Lab, Intel Labs Europe in Leuven at IMEC. I talked mainly about the idea of nondeterministic programming, the Sly programming language and some details on our Smalltalk manycore virtual machine that enables those experiments. Thus, tried to spread the word about our Renaissance project at bit further. [...]]]></description>
			<content:encoded><![CDATA[<p>Today, I gave a talk at the <a href="http://www.exascience.com/">ExaScience Lab, Intel Labs Europe</a> in Leuven at IMEC. I talked mainly about the idea of nondeterministic programming, the Sly programming language and some details on our Smalltalk manycore virtual machine that enables those experiments. Thus, tried to spread the word about our <a href="http://soft.vub.ac.be/~smarr/renaissance/">Renaissance project</a> at bit further.</p>
<p>Below you can find the abstract and slides.</p>
<p><strong>Abstract</strong></p>
<blockquote>
<p>The manycore future has several challenges ahead of us that suggest that fundamental assumptions of contemporary programming approaches do not apply anymore when scalability is required.</p>
<p>Sly is a language prototype designed to experiment with the inherently nondeterministic properties of parallel systems. It is designed to enable programmers to embrace nondeterminism instead of guiding them to fight it. Nature shows that complex system can be built from independent entities that achieve a common goal without global synchronization/communication. Sly is design to enable the prototyping of algorithms that show such emerging behavior. It will be introduced in the first part of the talk.</p>
<p>The second part of the talk will focus on the underlying problems of building virtual machines for the manycore future, which allow to harness the available computing power. The RoarVM was design to experiment on the Tilera TILE64 manycore processor architecture which provides 64 cores and characteristics that are distinctly different from today&#8217;s commodity multicore processors. Memory bandwidth, caches and communication are the biggest challenges on such architectures and this talk will give a brief overview over the design choices of the RoarVM which tackle the characteristics of the TILE64 architecture.</p>
<p>&nbsp;</p>

<p>Acknowledgement: Sly and the RoarVM were designed and implemented by David Ungar and Sam Adams at IBM Research.</p></blockquote>
<div style="width:425px" id="__ss_8991354"> <iframe src="http://www.slideshare.net/slideshow/embed_code/8991354" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> </div>]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/08/sly-and-the-roarvm-exploring-the-manycore-future-of-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Sly3 Programming Language</title>
		<link>http://soft.vub.ac.be/~smarr/2011/08/the-sly3-programming-language/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-sly3-programming-language</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/08/the-sly3-programming-language/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 07:19:02 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Renaissance]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[course work]]></category>
		<category><![CDATA[emergence]]></category>
		<category><![CDATA[Ly]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[Nondeterministic]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[RoarVM]]></category>
		<category><![CDATA[Sly]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[Squeak]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=405</guid>
		<description><![CDATA[The following introduction and analysis of the Sly3 programming language was written by Pablo Inostroza Valdera as part of his course work for the Multicore Programming course of Tom Van Cutsem. The assignment was to write a blog post about a topic of their own choice, and I repost Pablo&#8217;s work here with his permission [...]]]></description>
			<content:encoded><![CDATA[  <script type="text/javascript" src="http://soft.vub.ac.be/~smarr/renaissance/code/shCore.js"></script>
  <script type="text/javascript" src="http://soft.vub.ac.be/~smarr/renaissance/code/shBrushSmalltalk.js"></script>
  <link type="text/css" rel="stylesheet" href="http://soft.vub.ac.be/~smarr/renaissance/code/shCoreDefault.css"/>

<p>The following introduction and analysis of the Sly3 programming language was written by Pablo Inostroza Valdera as part of his course work for the <a href="http://soft.vub.ac.be/~tvcutsem/multicore/">Multicore Programming course</a> of Tom Van Cutsem. The assignment was to write a blog post about a topic of their own choice, and I repost Pablo&#8217;s work here with his permission to spread the word about Sly a bit wider. We made his article also available as part of his work for the <a href="http://soft.vub.ac.be/~smarr/renaissance/">Renaissance project</a> itself.</p>

 <h2 style="text-align:center;margin-top:80px;"><a href="http://soft.vub.ac.be/~tvcutsem/multicore/index.html">Multicore Programming, Course Work</a></h2>
  <h1 style="text-align:center;">The <span class="sly">Sly3</span> Programming Language</h1>

  <h3 style="text-align:center;">Pablo Inostroza Valdera</h3>
  <h3 style="text-align:center;"><code>&lt; pinostro _ vub.ac.be &gt;</a></code></h3>

  <h3 style="text-align:center;">23 June 2011</h3>

  <h1>Introduction</h1>

  <p><span class="sly">Sly3</span> is a Smalltalk dialect that features two
  concepts in order to deal with parallelism: <em>ensembles</em>, which are
  collections of objects that can receive parallel messages, and modifiers,
  which decorate messages in order to modify their parallel behavior
  (<em>adverbs</em>) or to specify how to handle reductions
  (<em>gerunds</em>). In this article we analyze <span
  class="sly">Sly3</span>&#8216;s programming model.</p>

  <p><span class="sly">Sly3</span> is a language being developed in the
  context of the <a
  href="http://soft.vub.ac.be/~smarr/renaissance/">Renaissance Project</a>, at
  IBM. With <span class="sly">Sly3</span>, their authors David Ungar and Sam
  Adams explore abstractions for nondeterministic parallel programming. <span
  class="sly">Sly3</span> is the experimental successor of L<small>Y</small>,
  a javascript-like interpreted language that was implemented on top of
  Smalltalk[<a href= "#Ungar2010">UA10</a>]. As the 3 in Sly3 indicates, Sly
  itself underwent already three iterations of design. The main idea behind
  the design of <span class="sly">Sly3</span> is that multicore programming is
  commonly addressed by restricting the nondeterminism parts and trying to
  enforce strict determinism. As an example of this, Ungar and Adams refer to
  the actors paradigm. While the actor model certainly adds some order to
  concurrent computations, the truth is that some nondeterminism still
  persists because the global order in which messages arrive to an actor is
  nondeterministic. They proposed that instead of trying to restrict the
  nondeterminism, it should be embraced. The <span class="sly">Ly</span>
  language and, later on, the <span class="sly">Sly3</span> language are steps
  towards that direction. In this article we discuss the latter.</p>

  <h1>Ensembles, or How to Represent A Flock of Birds</h1>

  <p><span class="sly">Sly3</span>&#8216;s key elements were conceived by observing the
  nature. Think of a flock of birds, an ant colony or a school of fishes.
  These are all examples for a multitude of independent agents, acting in a
  nondeterministic way, whose aggregated behavior is more complex than that
  of the individuals. In other words, a more complex behavior <span class=
  "textit">emerges</span>. The idea of a whole formed from independent units
  is key to <span class="sly">Sly3</span>, and it has been reflected in the concept of
  an <em>ensemble</em>. An ensemble is a collection of
  objects, subject of receiving messages as a whole. In the following
  example, we create an ensemble and execute an operation on it:</p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false; gutter: false;">
  numbers := Sly3Ensemble with: {1. 2. 3. 4. 5}.
  squaredNumbers := numbers squared.
  </pre>
  </div>
  

  <p>This code yields: <code>%{1. 4. 9. 16. 25}</code>. Recall that the curly
  braces represent an array in Smalltalk. In Sly3, curly braces preceded by %
  denote an ensemble.</p>

  <p>Notice how the ensemble received a message as a whole, but it acted on
  each individual in order to produce a new ensemble with all of the elements
  squared. It is not surprising to know that the default behavior of this
  <em>mapping</em> is parallel, i.e., a different thread of execution is
  triggered for each individual computation. The standard execution strategy
  in this this simple example is as follows:</p>

  <ul>
    <li>The message was delegated to members of the ensemble, creating a
    parallel process for the evaluation of each of the messages. We can say
    that each member was treated <strong>individually</strong> and
    was executing its own <em>task</em>.</li>

    <li>For generating the final result, a new ensemble was created from the
    results of all the tasks of the previous step. We can say that we are
    <strong>ensembling</strong> together all the individual
    results.</li>
  </ul>

  <p>Notice that we have put in bold letters two words: individually and
  ensembling. We have done so, because both words characterize a strategy for
  handling a parallel computation. Actually, this is the default strategy in
  <span class="sly">Sly3</span>, but the programming model was designed to be able to
  customize these behaviors.</p>

  <h1>Adverbs and Gerunds, or How to Modulate Parallel Behavior</h1>
  
  <p>The basic model of message handling for an ensemble is:</p>

  <ol>
    
    <li>The ensemble that receives the message is treated in accordance to
        its <em>adverb</em>. A receiver&#8217;s adverb precedes the
        message name. In the absence of an explicit one, the default adverb for
        receiver, namely <code>individualLY</code>, is used.
        We elaborate on the meaning of <code>individualLY</code> in subsequent
        paragraphs, important here is to note that adverbs&#8217; names always end in <em>LY</em>.
    </li>

    <li>If there are operands, they have to be treated in accordance with
    their <em>adverbs</em>. An operand adverb follows the
    message name. In the absence of an explicit one, the default adverb for
    operands, namely <code>wholLY</code>, is used.</li>

    <li>The operation is executed according to an overall strategy, also
    determined by an <em>adverb</em>.</li>

    <li>The result of the operation is reduced in accordance to a
    <em>gerund</em>. In the absence of an explicit one,
    the default gerund, namely <code>ensemblING</code>, is used. Gerunds&#8217; names
    always end in <em>ING</em>.</li>
  </ol>

  <p>Regarding the point 3, it suffices to mention that currently there are
  only three overall strategies, namely, <em>serially</em>, <em>plainly</em> and the
  default one, which we can call <em>parallelly</em>.
  Note that the metaphor of the adverb is taken to an extreme in
  <span class="sly">Sly3</span>. Many words that do not sound like adverbs are
  <em>adverbialized</em> in order to fit in the
  conceptual framework.
  <em>Serially</em> forces serial executions, so no processes/threads
  are spawned to compute the results. This can be useful either for semantic
  reasons or when the cost of parallel execution is to high, i.e., when we
  are below the sequential threshold. The adverb <em>plainly</em> can be used to turn off ensemble behavior, and
  therefore, to treat the ensemble as a collection (e.g., we could ask for
  the size of an ensemble by using plainly, and this would not imply sending
  a message to each of its members). For the sake of brevity, we are not
  going to discuss the overall strategies further, since they are not
  relevant for grasping the essence of the <span class="sly">Sly3</span> programming
  model.</p>

  <table style="margin-left:auto;margin-right:auto;width:70%;">
        <tr>
          <th style="width:30%;"><strong>Adverb</strong></th>
          <th><strong>Informal description</strong></th>
        </tr>

        <tr>
          <td><code>wholLY</code></td>
          <td>just pass me along as a whole ensemble</td>          
        </tr>

        <tr>
          <td><code>individualLY</code></td>
          <td>create a process/thread for each of my members</td>
        </tr>

        <tr>
          <td><code>collectionLY</code></td>
          <td>treat me as a collection instead of an ensemble</td>
        </tr>

        <tr>
          <td><code>duplicativeLY</code></td>
          <td>copy each of my members, to produce a new ensemble</td>
        </tr>

        <tr>
          <td><code>roundLY</code></td>
          <td>create a process for each combination of the receiver&#8217;s members and my members</td>
        </tr>

        <tr>
          <td><code>randomLY</code></td>
          <td>chose <code>n</code> of my members randomly, <code>n</code> is a parameter of this
          adverb</td>
        </tr>

        <tr>
          <td><code>valueLY</code></td>
          <td>take a block and apply it to each of my members</td>
        </tr>

        <caption>
          <strong>Table 1:</strong> Some of the principal <em>adverbs</em> in <span class="sly">Sly3</span>.
        </caption>
    </table>

  <p>The syntax of <span class="sly">Sly3</span> is cumbersome, so next we present some
  examples in order to provide a more clear idea of how to express things in
  this language. Let&#8217;s analyze them in the light of three of the steps
  presented before (1, 2 and 4; 3 is excluded since are not going to discuss
  the <em>overall strategy</em>). In order to guide our
  analysis, figure <a href="#fig:table">1</a> presents a table with brief
  descriptions of some of the main adverbs in <span class="sly">Sly3</span>, and their
  impact on the message evaluation process. We have not included a similar
  table for gerunds, because their names are in general more self
  descriptive.</p>

  <p><strong>Example 1</strong></p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false; gutter: false;">
    %{true. true. false. true} andING
  </pre>
  </div>

  <ul>
    <li>In this example, there are no adverbs specified, therefore, the
    <em>receiver&#8217;s</em> adverb is the default one, i.e.,
    <em>individually</em>. This implies that the
    processing of the members is done independently (i.e. in different
    Smalltalk processes).</li>

    <li>There are no arguments, therefore, no argument&#8217;s adverb.</li>

    <li>There is a gerund <code>andING</code> that acts on the result of the
    operation reducing the independent results coming from different
    processes. As its name indicates, <code>andING</code> performs logical
    <em>and</em> over the members of the resulting
    ensemble. Notice that there no actual message specified here, thus,
    <code>andING</code> is applied to unchanged set of members of the
    ensemble.</li>

    <li>Therefore, the result of this operation is: <code>false</code>.</li>
  </ul>

  <p><strong>Example 2</strong></p>
  
  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false; gutter: false;">
    %{1. 2. 3} plusRoundLY: %{10. 20. 30}
  </pre></div>

  <ul>
    <li>Here are no adverbs specified for the receiver, therefore, the
    <em>receiver&#8217;s</em> adverb is the default one, i.e.,
    <em>individually</em>. This implies that the
    processing of the members is done independently (i.e. in different
    processes/threads).</li>

    <li><code>roundLY</code> is an argument to the operand (<code>%10. 20. 30</code>
    ). This adverb says: create a process/thread for each combination of the
    receiver&#8217;s member and the argument&#8217;s member; acting as a cartesian
    product.</li>

    <li>There is no gerund, which means that the default one
    (<code>ensemblING</code>) is used.</li>

    <li>Therefore, the result of this operation is: <code>%{11. 12. 13. 21. 22.
    23. 31. 32. 33}</code>.</li>
  </ul>

  <p><strong>Example 3</strong></p>
  
  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false; gutter: false;">
    %{1. 2. 3} valueLY: [ <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_mad.gif' alt=':x' class='wp-smiley' />  | x * 10]
  </pre></div>
  

  <ul>
    <li><code>valueLY</code> is an argument of the receiver, therefore, the
    receiver has to be mapped to a new ensemble using the given block as the
    <em>mapper</em>.</li>

    <li>There are no arguments, therefore, no argument&#8217;s adverb. Recall that
    the block is an argument to the adverb. As we can see, the problems of
    Sly3&#8242;s syntax become evident in these cases.</li>

    <li>Therefore, the result of this operation is: <code>%{10. 20.
    30}</code>.</li>
  </ul>

  <h1>An Overview of Sly3&#8242;s Implementation</h1>

  <p>In order to have a comprehensive view of the spectrum of the current
  <em>custom behaviors</em> available for direct use, in
  figure <a href="#fig:hierarchy">1</a> we show the hierarchy of gerunds and
  adverbs that we can find in the current image of <span class="sly">Sly3</span>.
  Notice that this forms a restricted vocabulary that we can use as a basis
  of more complex strategies, in a LEGO-like way. In fact, we can see this
  hierarchy as a custom domain-specific language suited for the description
  of common strategies for handling parallelism.</p>

<a href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/08/sly-hierarchy.png"><img src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/08/sly-hierarchy.png" alt="" title="The hierarchy of modifiers of Sly3." width="400" height="448" class="size-full wp-image-408" /></a>
<p style="text-align:center;"><strong>Figure 1:</strong> The hierarchy of modifiers of <span class="sly">Sly3</span>.</p>

  <p>Based on what we have discussed so far, we can characterize
  <span class="sly">Sly3</span> as:</p>

  <ul>
    <li>An Object-oriented language, descendant of Smalltalk, which
    incorporates ensembles as first-class entities to model parallelism.</li>

    <li>It features parallelism by default. As soon as a message is sent to
    an ensemble, it is assumed that the processing will be spawned as
    independent tasks over the members of this ensemble.</li>

    <li>Implicit parallelism. The processes that handle messages for
    ensembles are spawned <em>under the hood</em>, and
    programmers interact without having to switch to a <span class=
    "textit">parallel mindset</span>.</li>

    <li>The way the receiver and the operands of a message are treated is
    specified by a set of adverbs.</li>

    <li>The way the result is reduced is specified by a set of gerunds.</li>

    <li>The messages are not reified as for instance in the case of
    <em>Communicating Sequential Processes</em> or
    <em>actors</em>.</li>

    <li>Communication is assumed to be synchronous.</li>

    <li>The processes are not reified as in the case of actor-based
    computing.</li>
  </ul>

  <h1>A Note on the Evaluation Process</h1>

  <p>The <span class="sly">Sly3</span> language is implemented as an extension of a
  Smalltalk Virtual Machine, the RoarVM. The current strategy is that
  whenever a message to an ensemble is detected, a custom message dispatcher
  is launched in order to handle it. Thus, the message is parsed and
  evaluated at runtime. The message is
  analyzed by partitioning the receiver according to its adverb, and pairing
  it with the arguments according to arguments&#8217; adverbs. Then, the actual
  operation is executed in whichever set of operands resulted from the
  previous processing. The final result is reduced according to the gerund.
  When we use the expression <em>according to</em>, it is
  worth to highlight that the actual behavior is encoded in the classes of
  the gerunds an adverbs.</p>

  <p>Below we give as example the implementation of the <code>totallING</code>
  gerund. In the image it is the only method of the class
  <code>Sly3ModTotalling</code>. Notice, that it nothing more but the
  implementation of a simple summing policy.</p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false;">
    ; method of the class Sly3ModTotalling
    reduceForEvaluator: ev
      "Sum the elements in results and return the result.
      Assumes these elements understand +."
      | result results |
      results := ev result.

      results isEmpty ifTrue:
        [ self error: 'No members, how should we handle?  proceed for nil'.  
          ^nil ].

      result := 0.
      results do: [ :each | result := each + result ].
      ev result: result
  </pre></div>



  <p>Below we give the code for the two relevant method of the
  <code>Sly3ModCollectionly</code> class that implements the
  <code>collectionLY</code> adverb in Sly3. Although it is necessary to deeply
  understand the behavior of the process of evaluating a message in order to
  understand this code, at least we can have an intuition that what is
  happening at some point is that a collection is created and returned (see
  line 17). Eventually, this is how the creation
  of a collection from an ensemble (which is what <code>collectionLY</code> does)
  is implemented.</p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false;">
    ; methods of the class Sly3ModCollectionly
    amendOperandTuples: operandTuplesIncludingThisOne
    	| ens |
    	ens := (operandTuplesIncludingThisOne collect: [:ot | ot last]).
    	^ operandTuplesIncludingThisOne collect: [:ot |
    		  ot copy removeLast; addLast: ens; yourself]


    extendOperandTuples: operandTuplesSoFar 
               operand: operand
               membersOrNil: operandMembers
    	| mems |
    	mems := operandMembers ifNil: [operand] 
                                ifNotNil: [operandMembers].
    	^ operandTuplesSoFar
    	    ifEmpty: [OrderedCollection with: 
                             (OrderedCollection with: mems)]
    	    ifNotEmpty: [ operandTuplesSoFar collect: 
                               [:tuple | tuple copy addLast: mems; yourself]]
  </pre></div>

  <p>Therefore, each modifier in <span class="sly">Sly3</span> is self descriptive and
  fully determines the impact that their presence provokes on the evaluation
  process.</p>

  <h1>Implementing MapReduce in <span class="sly">Sly3</span></h1>

  <p>In order to show an example of how to use <span class="sly">Sly3</span>, we have
  implemented a <em>naive</em> MapReduce framework. Take a look at the
  <a href="http://soft.vub.ac.be/~tvcutsem/multicore/index.html">course notes</a>
  for an Erlang implementation of the
  <a href="http://soft.vub.ac.be/~tvcutsem/multicore/6-MapReduce.zip">same examples</a>.</p>
  
  <p>It is worth to stress that the conciseness of
  the code that we eventually obtain is a consequence of both using
  <span class="sly">Sly3</span> and the application of an Object-oriented approach. The
  framework relies on ensembles that receive messages. By doing that, the
  messages are implicitly sent in parallel, so we do not have to specify this
  in the code. We next discuss the core excerpts of the code.</p>

  <p>Imagine two well-known applications of MapReduce. First, we want to
  count the number of occurrences of words in a set of documents. Another
  application is to know in which documents some words are found. In order to
  do that, the MapReduce paradigm requires us to provide the problem-specific
  knowledge by means of a map procedure and a reduce procedure.</p>

  <p>Since <span class="sly">Sly3</span> being an object-oriented language, we have
  modeled the MapReduce problem-independent behavior as a class
  <code>MapReduce</code>. Any particular implementation has to subclass this
  class and override two abstract methods, namely, <code>mapForKey:value:</code>
  and <code>reduceForKey:values:</code>.</p>

  <p>Facing the problem of counting words in a document, below are the
  methods of the class <code>CountWordsMapReduce</code> that implement this
  behavior in <span class="sly">Sly3</span>.
  Notice that for sakes of simplicity, we have modeled a filesystem as
  a <code>Dictionary</code> whose keys are strings that represent file names
  and whose values are ensembles corresponding to the set of words in a
  file.</p>


  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false;">
    "Specific methods of the class CountWordsMapReduce"
    mapForKey: ignore value: fileName
    	| words |
    	words :=  self consult: fileName.
    	^ words valueLY: [:y| {y. 1}]

    reduceForKey: word values: counts
    	^ {word. counts totallING}

    consult: file
    	^ files at: file
  </pre></div>

  <p>Facing the problem of indexing the texts using the words that they
  contain, below are the methods of the class <code>TextIndexingMapReduce</code>
  that implement this behavior in <span class="sly">Sly3</span>.</p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false;">
    "Specific methods of the class TextIndexingMapReduce"
    mapForKey:  ignore value: fileName
    	|words |
    	words :=   self consult: fileName. 
    	^ words valueLY: [:word| {word. fileName}]

    reduceForKey: word  values: names
    	^ {word. names members asSet}

    consult: file
    	^ files at: file
  </pre></div>
    
  <p>Notice that in both cases, it suffices to use combinations of the
  existing adverbs to achieve the desired functionality (see lines 5 and 8 of the
  first listing and line 5 in the second
  one). Moreover let&#8217;s now analyze the class <code>MapReduce</code>, that
  implements all the <em>machinery</em> of our naive
  MapReduce implementation.</p>

  <div style="padding-top:10px;padding-bottom:10px;padding-left:40px;">
  <pre class="brush: st; toolbar: false;">
    "Specific methods of the class MapReduce"
    dictionaryToList: dict
    	|lst|
    	lst := OrderedCollection new.
    	dict associationsDo: 
              [:assoc| lst add:{assoc key. 
                       Sly3Ensemble 
                         withMembersFrom: assoc value}].
    	^ Sly3Ensemble withMembersFrom: lst

    do: input
    	|dict  nonFlatValues flatValues intermediateValues|
    	nonFlatValues:= input valueLY:  [ :pair |
         self mapForKey: (pair at: 1) value: (pair at: 2)].
    	flatValues := nonFlatValues members 
          inject:  (OrderedCollection new) 
          into: [:acc :cur | 
                  acc addAll: 
                        cur members asOrderedCollection. 
                  acc].
    	dict := self groupValuesByKey: flatValues.
    	intermediateValues:= self dictionaryToList: dict.
    	^ intermediateValues valueLY:
           [ :pair | self reduceForKey: (pair at: 1) 
                          values: (pair at: 2) ]

    groupValuesByKey: keyValues
    | dict|
    dict := Dictionary new.
    keyValues do:[:keyValue |
    	| key value |
    	key := keyValue at: 1.
    	value := keyValue at: 2.
    	(dict includesKey: key)
          ifTrue: 
            [(dict at:key) add: value]
          ifFalse: 
            [dict at: key 
                  put: (OrderedCollection newFrom: {value})] .
    	].
    ^ dict

    mapForKey: key value: value
    	self subclassResponsibility.

    reduceForKey: key values: values
    	self subclassResponsibility.
  </pre></div>
    
    
  <p>As it is possible to see in lines 9, 13 or 23 of the above code,
  the framework itself also profits from the fact that the data structures
  that are being passed are ensembles. By having ensembles as the main
  element being passed around, it is possible to have implicit parallel
  behavior, which is the key of the MapReduce approach. Evidently, in this
  case we are discussing a very limited version of MapReduce meant to be used
  on a single computer, but it is still useful to show how the implicit
  parallelism in <span class="sly">Sly3</span> works.</p>

  <h1>Conclusions</h1>

  <p>In the spectrum of language abstractions for dealing with parallelism
  and concurrency, <span class="sly">Sly3</span> is a language that has opted for a
  conservative style, in the sense that it is a specific element of the
  language (an ensemble) the one that is subject of parallelism. On the other
  hand, the stress has been put on giving a set of tools to programmers,
  enabling them to combine these tools. For customized strategies, it is the
  impression of the author of this article that the level of granularity is
  too coarse-grained. Although it is conceivable to extend the set of adverbs
  and gerunds by extending the hierarchy aforementioned, this implies to
  understand the <span class="sly">Sly3</span> implementation in very detail, something
  that we most likely do not expect from application programmers. It is
  possible to think of a meta-programming framework that could <em>inject</em> custom functionalities in the language, lowering the
  complexity for extending the set of primitives.</p>

  <p>Regarding the approach to parallelism, it is implicit and synchronous.
  Programmers are not aware of how computations are spawned or scheduled, and
  the only means they have to initiate parallel computations is by using
  ensembles.</p>

  <p>As regards to the syntax, <span class="sly">Sly3</span> uses decorated keyword
  based messages to model the way the message is handled by the virtual
  machine. Although it is conceivable that this schema can be improved, there
  are some problems originated from the fact that adverbs can decorate
  receivers, arguments, and the overall strategy. If we add to this
  complexity the gerunds, it is clear that it is difficult to express these
  multidimensional facets using a textual syntax.</p>

  <p>To sum up, <span class="sly">Sly3</span> is a language that incorporates in its
  design a series of patterns to deal with parallelism, but the mechanism for
  extending the set of parallel primitives could be reconsidered, in order to
  reduce the complexity of extending <span class="sly">Sly3</span>. However, the
  MapReduce example has shown that it is possible to concisely express
  complex patterns of interactions in <span class="sly">Sly3</span>, as soon as these
  patterns fall within the give set of <span class="sly">Sly3</span>&#8216;s primitives.</p>

  <h2>Bibliography</h2>

  <dl>
    <dt><a name="Ungar2010" id="Ungar2010">UA10</a></dt>

    <dd>David Ungar and Sam S. Adams.<br />
    <a href="http://domino.research.ibm.com/library/cyberdig.nsf/papers/9AA77D5888C803A9852577920058A645">Harnessing emergence for manycore programming: early experience
    integrating ensembles, adverbs, and object-based inheritance.</a><br />
    In <em>Proceedings of the ACM international conference companion on
    Object oriented programming systems languages and applications
    companion</em>, SPLASH &#8217;10, pages 19-26, New York, NY, USA, 2010.
    ACM.</dd>
  </dl>

<script type="text/javascript">SyntaxHighlighter.all();</script>

]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/08/the-sly3-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Price of the Free Lunch: Programming in the Multicore Era</title>
		<link>http://soft.vub.ac.be/~smarr/2010/12/the-price-of-the-free-lunch-programming-in-the-multicore-era/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=the-price-of-the-free-lunch-programming-in-the-multicore-era</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/12/the-price-of-the-free-lunch-programming-in-the-multicore-era/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 22:49:30 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Actors]]></category>
		<category><![CDATA[automatic parallelization]]></category>
		<category><![CDATA[brussels]]></category>
		<category><![CDATA[free lunch]]></category>
		<category><![CDATA[locks]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[over]]></category>
		<category><![CDATA[parallel]]></category>
		<category><![CDATA[pecha kucha]]></category>
		<category><![CDATA[software languages lab]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[vub]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=388</guid>
		<description><![CDATA[Last Friday was the annual Lab event of our Software Languages Lab. Like last year, many people related to the lab in one or the other way came to get an overview of what the current topics of our research are. This year, we presented our research in the form of a Pecha Kucha talk. [...]]]></description>
			<content:encoded><![CDATA[<p>Last Friday was the annual Lab event of our Software Languages Lab. Like last year, many people related to the lab in one or the other way came to get an overview of what the current topics of our research are.</p>
<p>This year, we presented our research in the form of a Pecha Kucha talk. That means every presenter got 20 slides to present and each of the slides was shown exactly 20 seconds. That gives enough time to convey the general idea, but avoids boring the people with endless technical details.</p>
<p>All in all, that worked out pretty well.</p>
<p>My talk gave an overview of what the Parallel Programming Group is up to, on a very high level. It motivates why we are doing research in languages and language runtimes/virtual machines, and names our approaches to tackle the challenges. Well, for researchers in the field that is probably to vague, but everyone else might get just enough out of it to see in which direction we are going.</p>
<p>&nbsp;</p>

<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/yiwitL5AFR8?hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/yiwitL5AFR8?hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>&nbsp;</p>

<div id="__ss_6066686" style="width: 425px;"><strong><a title="The Price of the Free Lunch: Programming in the Multicore Era" href="http://www.slideshare.net/gron/the-price-of-the-free-lunch-programming-in-the-multicore-era">The Price of the Free Lunch: Programming in the Multicore Era</a></strong><object id="__sse6066686" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pechakutcha-2010-004-101207163906-phpapp02&amp;stripped_title=the-price-of-the-free-lunch-programming-in-the-multicore-era&amp;userName=gron" /><param name="name" value="__sse6066686" /><param name="allowfullscreen" value="true" /><embed id="__sse6066686" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pechakutcha-2010-004-101207163906-phpapp02&amp;stripped_title=the-price-of-the-free-lunch-programming-in-the-multicore-era&amp;userName=gron" name="__sse6066686" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/12/the-price-of-the-free-lunch-programming-in-the-multicore-era/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RoarVM: The Manycore SqueakVM</title>
		<link>http://soft.vub.ac.be/~smarr/2010/11/roarvm-the-manycore-squeakvm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=roarvm-the-manycore-squeakvm</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/11/roarvm-the-manycore-squeakvm/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 23:40:41 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Renaissance]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[RoarVM]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=382</guid>
		<description><![CDATA[We are happy to announce, now officially, RoarVM: the first single-image manycore virtual machine for Smalltalk. The RoarVM supports the parallel execution of Smalltalk programs on x86 compatible multicore systems and Tilera TILE64-based manycore systems. It is tested with standard Squeak 4.1 closure-enabled images, and with a stripped down version of a MVC-based Squeak 3.7 image. Support for Pharo [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://github.com/smarr/RoarVM/"><img class="alignleft" title="RoarVM: The Manycore SqueakVM" src="http://github.com/smarr/RoarVM/raw/master/misc/RoarVM-logo-full.jpg" alt="" width="150" height="150" /></a>We are happy to announce, now officially, RoarVM: the first single-image manycore virtual machine for Smalltalk.</p>
<p>The RoarVM supports the parallel execution of Smalltalk programs on x86 compatible multicore systems and Tilera TILE64-based manycore systems. It is tested with standard Squeak 4.1 closure-enabled images, and with a stripped down version of a MVC-based Squeak 3.7 image. Support for Pharo 1.2 is currently limited to 1 core, but we are working on it.</p>
<p>A small teaser:<br /> 1 core   66286897 bytecodes/sec;  2910474 sends/sec<br /> 8 cores 470588235 bytecodes/sec; 19825677 sends/sec</p>
<p>RoarVM is based on the work of David Ungar and Sam S. Adams at IBM Research. The port to x86 multicore systems was done by me. They open-sourced their VM, formerly know as Renaissance VM (RVM), under the <a href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License</a>. Official announcement of the IBM source code release: <a href="http://soft.vub.ac.be/~smarr/rvm-open-source-release/">http://soft.vub.ac.be/~smarr/rvm-open-source-release/</a></p>
<p><a href="http://soft.vub.ac.be/~smarr/rvm-open-source-release/"></a>The source code of the RoarVM has been released as open source to enable the Smalltalk community to evaluate the ideas and possibly integrate them into existing systems. So, the RoarVM is meant to experiment with Smalltalk systems on multi- and manycore machines.</p>
<p>The open source project, and downloads can also be found on GitHub:</p>
<p><a href="http://github.com/smarr/RoarVM">http://github.com/smarr/RoarVM</a><br /> <a href="http://github.com/smarr/RoarVM/downloads">http://github.com/smarr/RoarVM/downloads</a></p>
<p><a href="http://github.com/smarr/RoarVM/downloads"></a>For more detailed information, please refer to the <a href="http://github.com/smarr/RoarVM/blob/master/README.rst">README</a> file.<br />Instructions to compile the RoarVM on Linux and OS X can be found in the <a href="http://github.com/smarr/RoarVM/blob/master/INSTALL.rst">INSTALL</a> file.<br />Windows is currently not supported, however, there are good chances that it<br />will work with cygwin or pthreads for win32, but that has not be verified in<br />anyway. If you feel brave, please give it a shot and report back.<br /><br />If the community does not object, we would like to occupy the<br /><a href="mailto:vm-dev@lists.squeakfoundation.org">vm-dev@lists.squeakfoundation.org</a> mailinglist for related discussions. So, if<br />you run into any trouble while experimenting with the RoarVM, do not hesitate<br />to report any problems and ask any questions.<br /><br />You can also follow us on Twitter <a href="http://twitter.com/roarvm">@roarvm</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/11/roarvm-the-manycore-squeakvm/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>RVM Open Sourced, Soon to be known as RoarVM</title>
		<link>http://soft.vub.ac.be/~smarr/2010/11/rvm-open-sourced-soon-to-be-known-as-roarvm/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rvm-open-sourced-soon-to-be-known-as-roarvm</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/11/rvm-open-sourced-soon-to-be-known-as-roarvm/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 22:12:49 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Renaissance]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[RoarVM]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=377</guid>
		<description><![CDATA[Just a brief heads up before the actual announcement of RoarVM. The Renaissance VM has been open sourced. The official contribution of IBM Research to the open source community can be found here: The Renaissance Virtual Machine: Open Source Release Announcement. The code is already posted to GitHub and somewhat extended to make it actually useful. Please [...]]]></description>
			<content:encoded><![CDATA[<p>Just a brief heads up before the actual announcement of RoarVM.</p>
<p>The Renaissance VM has been open sourced. The official contribution of IBM Research to the open source community can be found here: <a href="http://soft.vub.ac.be/~smarr/rvm-open-source-release/">The Renaissance Virtual Machine: Open Source Release Announcement</a>.</p>
<p>The code is already posted to <a href="http://github.com/smarr/RoarVM">GitHub</a> and somewhat extended to make it actually useful. Please feel free to head over to <a href="http://github.com/smarr/RoarVM">http://github.com/smarr/RoarVM</a>, play with the code, try the VM with your image, and report back.</p>
<p>The official announcement will be send out in the next couple of days, but any feedback we could get before hand would allow to fix issues before the community gets started with the VM.</p>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/11/rvm-open-sourced-soon-to-be-known-as-roarvm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SPLASH&#8217;10 Main Conference</title>
		<link>http://soft.vub.ac.be/~smarr/2010/11/splash10-main-conference/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=splash10-main-conference</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/11/splash10-main-conference/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 21:49:01 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[Assertions]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[FPGA]]></category>
		<category><![CDATA[GC]]></category>
		<category><![CDATA[Hera]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[Parallelization]]></category>
		<category><![CDATA[Reno]]></category>
		<category><![CDATA[RoarVM]]></category>
		<category><![CDATA[Self]]></category>
		<category><![CDATA[SPLASH]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=373</guid>
		<description><![CDATA[&#160; Tuesday &#8211; Evolution, Onward!, FPGAs, and the Hera-JVM On Tuesday the main conference started with its keynotes and research tracks. The keynote of Stephanie Forrest was an interesting introduction to how evolutionary approaches could be used in software development. One goal they are currently pursuing is fixing of certain types of bugs by reordering, [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>

<h2>Tuesday &#8211; Evolution, Onward!, FPGAs, and the Hera-JVM</h2>
<p>On Tuesday the main conference started with its keynotes and research tracks.</p>
<p>The keynote of Stephanie Forrest was an interesting introduction to how evolutionary approaches could be used in software development. One goal they are currently pursuing is fixing of certain types of bugs by reordering, deleting, and/or copying of parts in an AST. Well, that can not fix every bug, but might be interesting for many typical problems. Certainly the type of bugs I run into most frequently&#8230;</p>
<p>Onward! started with three interesting talks in the area of languages. The first on <em>Registration-Based Language Abstractions</em> presented an IDE approach to bringing high-level constructs to existing code-bases. You basically have an &#8220;imaginary&#8221; view only present in your IDE of what the low-level implementation details actually are meant to represent. Examples were simple standard Java for-loops using C-like notation getting replaced by for-each loops, or even whole class bodies getting simplified by abstracting from typical getter/setter patterns, or even delegation patterns. Neat!</p>
<p>Toon&#8217;s talk on <em>Pinocchio: Bringing Reflection to Life with First-Class Interpreters</em> advocated fully reflective systems that make it easy to build bug-specific debuggers. Thats a great idea, unfortunately not feasible in VMs which are not build in a meta-circular fully reflective way, I think. <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  We definitely need something more sophisticated for RoarVM than printf&#8230;</p>
<p>The last talk on this track was on <em>Concurrency by Modularity: Design Patterns, A Case in Point</em>. Well, on the one hand I agree, there are certain design patterns from the gang of four which can be parallelized, however, that does not solve the problem of share state&#8230; The point that increased modularity will increase you degree of possible parallelism might be appealing but it is only a correlation and not a strict causal relationship.</p>
<p>The presentations after lunch were addressing performance from the angle of FPGAs. The presentation on <em>Lime: a Java-Cpmpatible and Synthesizable Language for Heterogenous Architectures</em> made a case for object-oriented programming for FPGAs. The idea is to have a superset of Java, with a few additional keywords, that is than mappable to hardware. As far as I understood, Lime is basically a stream-based language and thus favors data-oriented programming. The second talk was titled <em>From OO to FPGA: Fitting Round Objects into Square Hardware?</em> Interesting for me were the challenges they had to overcome to actually implement an OO language on top of an FPGA. The problem is mainly today&#8217;s available tool chains, that usually support only a very restricted subset of C.</p>
<p>The second session in the afternoon included the most related talk to my own research, a presentation on a port of the JikesRVM to the Cell processor: <em>Hera-JVM: A Runtime System for Heterogeneous Multi-Core Architectures</em>. The heterogenous instruction set was not the biggest challenge here, but the restricted local memory of the SPEs required them to pull a few tricks. Not only the size, but also the non-shared memory approach gave problems. To support the full semantics of the JMM, they had to implement a coherence mechanism in software. Have seen something similar for the read-mostly heap in our <a href="http://github.com/smarr/RoarVM">RoarVM</a> before <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Afterwards, I arranged the necessary details for our Birds of a Feather meeting on <a href="#to-be-added">Non-deterministic Programming</a>.</p>
<h2>Wednesday &#8211; Assertions tested by the GC, Dynamic Parallelization</h2>
<p>On the OOPSLA track, I followed a talk on <em>What Can the GC Compute Efficiently?</em> This was an interesting talk, since I haven&#8217;t heard about anything similar before. The general idea is, that the GC supports an assertion system which allows to express a certain number of directly determinable properties. While the GC is doing its normal job, it can also check those assertions and verifies the described invariants almost for free. Again, neat <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Of course, the system has certain restrictions and the assertion language basically needs to ensure that the assertions can be checked in a single pass.</p>
<p>In the second session, Charlotte gave her talk on <em>Dynamic Parallelization of Recursive Code</em>. Have seen a presentation on her idea before, so most of the time I was think how could that be made fast. Would be great if she would purse the same idea in a Tracing JIT setting *sigh* Just for the fun of it, I suppose <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I bet there could be something in the idea of moving all the tracing, branch-prediction and speculative execution out of the CPU into the software. If they are really going for dump and small cores in the many-many-core world, we could squeeze at least some speedup out of those sequential algorithms. See the workshop paper by <a href="http://cccp.eecs.umich.edu/pespma/PESPMA-2010-Proceedings.pdf">András Vajda and Per Stenström</a>. Cool stuff, all that automatic parallelization non-sense with out the speculating part won&#8217;t work anyway <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>Thursday &#8211; Search without Objectives,</h2>
<p>The day started with a very interesting keynote. The take-away point is, if your goal is not reachable in a number of steps you can already predetermine, i.e., if you don&#8217;t have all the basic ingredients, than the typical goal-driven search approaches do not deliver good results. Instead of using a metric of whether your search brings you closer to your goal, you should us a metric that rewards novelty, interestingness, or just the differentness from the points you have reached in your search before. Searching with such a metric leads much more probable and typically a lot faster towards your initial goal. Kenneth Stanley present a number of very convincing arguments, but in the end he had also to admit that this approach is somehow constraint in its applicability by the rules of society. But at least we should try. So, on to something new!</p>
<p>The second keynote of the day was a bit too, ehm, applied? Well, it was certainly interesting to see what the influence of the F# team was on the .NET platform, but well, there was not really meat in that talk. From a theoretic perspective the CIL of .NET appeals to me much more than the JVM Bytecode set, but well, he was not talking about such low-level questions&#8230;</p>
<p>Afterwards, I followed the last OOPSLA session. Mainly out of curiosity what ownership types are all about. Now I have seen three talks, and can be reassured, they are not relevant for my VM design. Good. Well, the point is, such a type system just does not fit with a VM. Dynamic languages can not be sensibly compiled to such a type system, I think. Thats more a gut feeling than a great insight, but I don&#8217;t see how they match.</p>
<p>The last session of SPLASH for me was the short paper session of the Onward! track. It started very interesting with an experiment on how performance metrics can be turned to sound: <em>Sonifying Performance Data to Facilitate Tuning of Complex Systems</em>. I should try that for our VM, any approach is better than the one I use now&#8230; no at all *sigh* Well, our boids simulation already indicated a bug once, but well, if it is not used&#8230; Anyway, the talk was interesting, and the results could inspire further experiments.</p>
<p>The last talk was David&#8217;s: <em>Harnessing Emergency for Manycore Programming: Early Experience Integrating Ensembles, Adverbs, and Object-based Inheritance</em>. What should I say, of course David mentioned the RoarVM <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Thats great. But if it comes to the language, there are still a lot of open questions. Interestingly, David really managed to get the people thinking about the problem he presented. It was a small little puzzle of language design, something that seemed to appeal to the audience. He got some suggestions, but well, no ground breaking new idea as far as I could see. Hope they will follow up on it offline.</p>
<p>And that was SPLASH&#8217;10. Should have went to Lake Tahoe, saw some nice pictures of the nature, but hadn&#8217;t had the time <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Conclusion, Reno was just the right place to focus on work&#8230;</p>
<p>&nbsp;</p>

]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/11/splash10-main-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Towards an Actor-based Concurrent Machine Model</title>
		<link>http://soft.vub.ac.be/~smarr/2010/02/towards-an-actor-based-concurrent-machine-model/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=towards-an-actor-based-concurrent-machine-model</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/02/towards-an-actor-based-concurrent-machine-model/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 23:19:08 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Actors]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[Manycore]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VMs]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=289</guid>
		<description><![CDATA[Already quite a while ago, I was involved in writing a workshop paper about an actor model for virtual machines. Actually, the main idea was to find a concurrency model for a VM which supports multi-dimensional separation of concerns. However, AOP is not that interesting for me at the moment, so I am focussing on [...]]]></description>
			<content:encoded><![CDATA[<p>Already quite a while ago, I was involved in writing a workshop paper about an actor model for virtual machines. Actually, the main idea was to find a concurrency model for a VM which supports multi-dimensional separation of concerns. However, AOP is not that interesting for me at the moment, so I am focussing on the concurrency, especially the actor-based VM model.</p>
<p>After one year, I am back looking at that paper, and it still looks like a great model. Think, I will incorporate it into my manycore VM now <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Abstract</h3>
<blockquote>
<p>In this position paper we propose to extend an existing delegation-based machine model with concurrency primitives. The original machine model which is built on the concepts of objects, messages, and delegation, provides support for languages enabling multi-dimensional separation of concerns (MDSOC). We propose to extend this model with an actor-based concurrency model, allowing for both true parallelism as well as lightweight concurrency primitives such as coroutines. In order to demonstrate its expressiveness, we informally describe how three high-level languages supporting different concurrency models can be mapped onto our extended machine model. We also provide an outlook on the extended model&#8217;s potential to support concurrency-related MDSOC features.</p></blockquote>
<ul>
	<li>Towards an Actor-based Concurrent Machine Model, <em>Hans Schippers, Tom Van Cutsem, Stefan Marr, Michael Haupt, Robert Hirschfeld</em>, Proceedings of the fourth workshop on the Implementation, Compilation, Optimization of Object-Oriented Languages, Programs and Systems (ICOOOLPS), New York, NY, USA, ACM (2009), p. 4&#8211;9.</li>
	<li>Paper: <a title="Towards an Actor-based Concurrent Machine Model" href="http://soft.vub.ac.be/~smarr/downloads/icooolps09-schippers.pdf">PDF</a><br /> ©ACM, 2009. This is the author&#8217;s version of the work. It is posted here by permission of ACM for your personal use. Not for redistribution. The definitive version was published in ICOOOLPS’09 July 6, 2009, Genova, Italy. <a href="http://doi.acm.org/10.1145/1565824.1565825">http://doi.acm.org/10.1145/1565824.1565825</a></li>
	<li>BibTex: <a href="http://www.bibsonomy.org/bibtex/243d4b86261eac5a70d28160c493e70d1/gron">BibSonomy</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/02/towards-an-actor-based-concurrent-machine-model/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

