<?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; multicore</title>
	<atom:link href="http://soft.vub.ac.be/~smarr/tag/multicore/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>Synchronization Views for Event-loop Actors</title>
		<link>http://soft.vub.ac.be/~smarr/2011/12/synchronization-views-for-event-loop-actors/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=synchronization-views-for-event-loop-actors</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/12/synchronization-views-for-event-loop-actors/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 12:33:43 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Actors]]></category>
		<category><![CDATA[multicore]]></category>
		<category><![CDATA[paper]]></category>
		<category><![CDATA[Parallelism]]></category>
		<category><![CDATA[poster]]></category>
		<category><![CDATA[PPoPP]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=506</guid>
		<description><![CDATA[With Joeri we have been working already for a while on a paper to extend the standard actor model with more parallelism. This work is not completed yet, and there are still some theoretical issues with the approach he designed. But we are working on it! For the moment, you can have a sneak-peak at [...]]]></description>
			<content:encoded><![CDATA[<p>With Joeri we have been working already for a while on a paper to extend the standard actor model with more parallelism. This work is not completed yet, and there are still some theoretical issues with the approach he designed. But we are working on it!</p>
<p>For the moment, you can have a sneak-peak at the <a title="Synchronization Views for Event-loop Actors" href="http://soft.vub.ac.be/~smarr/downloads/ppopp12-dekoster-synchronization-views-for-event-loop-actors.pdf">poster abstract for PPoPP&#8217;12</a>.</p>
<p><strong>Abstract</strong></p>
<blockquote>
<p>The actor model has already proven itself as an interesting concurrency model that avoids issues such as deadlocks and race conditions by construction, and thus facilitates concurrent programming. The tradeoff is that it sacrifices expressiveness and efficiency especially with respect to data parallelism. However, many standard solutions to computationally expensive problems employ data parallel algorithms for better performance on parallel systems.</p>
<p>We identified three problems that inhibit the use of data-parallel algorithms within the actor model. Firstly, one of the main properties of the actor model, the fact that no data is shared, is one of the most severe performance bottlenecks. Especially the fact that shared state can not be read truly in parallel. Secondly, the actor model on its own does not provide a mechanism to specify extra synchronization conditions on batches of messages which leads to event-level data-races. And lastly, programmers are forced to write code in a continuation-passing style (CPS) to handle typical request-response situations. However, CPS breaks the sequential flow of the code and is often hard to understand, which increases complexity and lowers maintainability.</p>
<p>We proposes <em>synchronization views</em> to solve these three issues without compromising the semantic properties of the actor model. Thus, the resulting concurrency model maintains deadlock-freedom, avoids low-level race conditions, and keeps the semantics of macro-step execution.</p></blockquote>
<ul>
	<li>Synchronization Views for Event-loop Actors, <em>Joeri De Koster</em>, <em>Stefan Marr</em>, <em>Theo D&#8217;Hondt</em>, Proceedings of PPoPP&#8217;12, USA, to appear (2012).</li>
	<li>Paper: <a title="Synchronization Views for Event-loop Actors" href="http://soft.vub.ac.be/~smarr/downloads/ppopp12-dekoster-synchronization-views-for-event-loop-actors.pdf">PDF</a><br /> ©ACM, 2012. 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/2fe71bc6cb277972cdab0e9dac06d64e1/gron">BibSonomy</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/12/synchronization-views-for-event-loop-actors/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>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>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>

