<?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; Virtual Machines</title>
	<atom:link href="http://soft.vub.ac.be/~smarr/tag/virtual-machines/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>Modularity and Conventions for Maintainable Concurrent Language Implementations: A Review of Our Experiences and Practices</title>
		<link>http://soft.vub.ac.be/~smarr/2012/01/modularity-and-conventions-for-maintainable-concurrent-language-implementations-a-review-of-our-experiences-and-practices/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=modularity-and-conventions-for-maintainable-concurrent-language-implementations-a-review-of-our-experiences-and-practices</link>
		<comments>http://soft.vub.ac.be/~smarr/2012/01/modularity-and-conventions-for-maintainable-concurrent-language-implementations-a-review-of-our-experiences-and-practices/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 11:30:37 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Case Study]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[Experience Report]]></category>
		<category><![CDATA[MISS Workshop]]></category>
		<category><![CDATA[Modularity]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VMs]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=521</guid>
		<description><![CDATA[Modularity: AOSD&#8217;12 will be in Potsdam at the end of March, and I am looking forward especially to the MISS&#8217;12 workshop. My understanding of the workshop&#8217;s format is that its goal is to encourage the participants to actively interact. Far to often, workshops are just a collection of semi-related presentations, without a common problem and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://aosd.net/2012/">Modularity: AOSD&#8217;12</a> will be in Potsdam at the end of March, and I am looking forward especially to the <a href="http://www.aosd.net/workshops/miss/2012/">MISS&#8217;12 workshop</a>.</p>

<p>My understanding of the workshop&#8217;s format is that its goal is to encourage the participants to actively interact. Far to often, workshops are just a collection of semi-related presentations, without a common problem and without a common goal. I fear a bit, the MISS workshop will have a similar problem. Being part of the program committee, I have seen all the submissions and the author do tend to prefer <em>business as usual</em> over actual position papers. From my perspective, this is really a pity. It is a lost chance to really exchange ideas actively and perhaps start collaborations with interesting people. A technical paper, with a few ideas and a work-in-progress prototype does not qualify as a position paper in my opinion. Usually, that kind of work only encourages discussion between people that have been working on similar things already. But let&#8217;s see how it turns out.</p>

<p>Our contribution to the workshop is a little experience report on how concurrency and modularity are related to each other in interpreter implementations. And, to make it short: modularity does matter to manage concurrency invariants, but things like AOP are far less important than some people might hope.</p>

<p><strong>Abstract</strong></p>
<blockquote>
<p>In this paper, we review what we have learned from implementing languages for
parallel and concurrent programming, and investigate the role of modularity.
To identify the approaches used to facilitate correctness and maintainability,
we ask the following questions: What guides modularization? Are informal
approaches used to facilitate correctness? Are concurrency concerns
modularized? And, where is language support lacking most?</p>

<p>Our subjects are AmbientTalk, SLIP, and the RoarVM. All three evolved over the
years, enabling us to look back at specific experiments to understand the
impact of concurrency on modularity.</p>

<p>We conclude from our review that concurrency concerns are one of the strongest
drivers for the definition of module boundaries. It helps when languages offer
sophisticated modularization constructs. However, with respect to concurrency,
other language features like single-assignment are of greater importance.
Furthermore, tooling that enables remodularization taking concurrency
invariants into account would be of great value.</p></blockquote>
<ul>
	<li>Modularity and Conventions for Maintainable Concurrent Language Implementations: A Review of Our Experiences and Practices, <em>Stefan Marr</em>, <em>Jens Nicolay</em>, <em>Tom Van Cutsem</em>, <em>Theo D&#8217;Hondt</em>, Proceedings of the 2nd Workshop on  Modularity In Systems Software (MISS&#8217;2012), ACM (2012), to appear.</li>
	<li>Paper: <a title="Modularity and Conventions for Maintainable Concurrent Language Implementations: A Review of Our Experiences and Practices" href="http://soft.vub.ac.be/~smarr/downloads/miss12-smarr-et-al-modularity-and-conventions-for-maintainable-concurrent-language-implementations.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/2442f0063842536e3628d10a4244620b6/gron">BibSonomy</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2012/01/modularity-and-conventions-for-maintainable-concurrent-language-implementations-a-review-of-our-experiences-and-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSOM/PL: A Virtual Machine Product Line</title>
		<link>http://soft.vub.ac.be/~smarr/2011/12/csompl-a-virtual-machine-product-line/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=csompl-a-virtual-machine-product-line</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/12/csompl-a-virtual-machine-product-line/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 21:09:46 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[ADL]]></category>
		<category><![CDATA[AOP]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[CSOM]]></category>
		<category><![CDATA[FOP]]></category>
		<category><![CDATA[MDSoC]]></category>
		<category><![CDATA[Product lines]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VM]]></category>
		<category><![CDATA[VMADL]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=512</guid>
		<description><![CDATA[Welcome to Academia. That is how I take this one&#8230; Publishing can really be an odyssey, and it all started with my Master thesis. Today, we have the 28th of December 2011. And I think I handed my thesis in somewhere around the 23rd of September 2008. I agree that there have been issues with [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome to Academia. That is how I take this one&#8230;</p>
<p>Publishing can really be an odyssey, and it all started with my Master thesis. Today, we have the 28th of December 2011. And I think I handed my thesis in somewhere around the 23rd of September 2008. I agree that there have been issues with the original version of the paper, but nothing was so fundamental that it would explain the more than three years it took to get it finally out. <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Thank for the warm welcome anyway.</p>
<p><strong>Abstract</strong></p>
<blockquote>
<p>CSOM/PL is a software product line SPL derived from applying multi-dimensional separation of concerns MDSOC techniques to the domain of high-level language virtual machine VM implementations. For CSOM/PL, we modularised CSOM, a Smalltalk VM implemented in C, using VMADL virtual machine architecture description language. Several features of the original CSOM were encapsulated in VMADL modules and composed in various combinations. In an evaluation of our approach, we show that applying MDSOC and SPL principles to a domain as complex as that of VMs is not only feasible but beneficial, as it improves understandability, maintainability, and configurability of VM implementations without harming performance.</p></blockquote>
<ul>
	<li>CSOM/PL: A Virtual Machine Product Line, <em>Michael Haupt</em>, <em>Stefan Marr</em>, <em>Robert Hirschfeld</em>, Journal of Object Technology, Volume 10, (2011), pp. 12:1-30.</li>
	<li>Paper: <a title="CSOM/PL: A Virtual Machine Product Line" href="http://soft.vub.ac.be/~smarr/downloads/jot11-mhaupt-csompl-a-virtual-machine-product-line.pdf">PDF</a>.</li>
	<li>BibTex: <a href="http://www.bibsonomy.org/bibtex/2410111b6472d242e566afe4d27c3b7de/gron">BibSonomy</a></li>
        <li>DOI: <a href="http://dx.doi.org/10.5381/jot.2011.10.1.a12">doi:10.5381/jot.2011.10.1.a12</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/12/csompl-a-virtual-machine-product-line/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DLS&#8217;11 and VMIL&#8217;11 @SPLASH2011</title>
		<link>http://soft.vub.ac.be/~smarr/2011/10/dls11-and-vmil11-splash2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dls11-and-vmil11-splash2011</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/10/dls11-and-vmil11-splash2011/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 20:31:28 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[DLS]]></category>
		<category><![CDATA[SPLASH]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VM]]></category>
		<category><![CDATA[VMIL]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=482</guid>
		<description><![CDATA[The second conference day was unfortunately full of “conflicts of interest”… It was pretty hard to choose between all the talks on the schedule. Beside DLS and VMIL, there was also a workshop on Actor systems. However, I did not make it to this one. Cherry picking between DLS and VMIL was already hard enough [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.stefan-marr.de/2011/10/transitioning-to-multicore-splash2011/">second conference day</a> was unfortunately full of “conflicts of interest”… It was pretty hard to choose between all the talks on the schedule.</p>

<p>Beside <a href="http://www.dynamic-languages-symposium.org/dls-11/program/index.html">DLS</a> and <a href="http://www.cs.iastate.edu/~design/vmil/2011/program.shtml">VMIL</a>, there was also a <a href="http://apice.unibo.it/xwiki/bin/view/AGERE/">workshop on Actor systems</a>. However, I did not make it to this one. Cherry picking between DLS and VMIL was already hard enough and worked out only partially.</p>
<p>The two DLS keynotes were certainly highlights of the whole SPLASH conference. Gilad’s talk, on Dart was not just interesting but quite entertaining; especially their take on the optional type system looks useful. I like the reasoning behind their approach a lot. Who needs sound type systems anyway? Well, then again, I had a few bugs were a complete type system could have notified me earlier to make me aware that I am doing something stupid. So, I wonder whether it would be hard to have another optional type system in addition, which could be enabled on demand for certain modules to check a more strict set of constraints?</p>

<p>The second DLS keynote was David’s presentation with the title: <a href="http://splashcon.org/2011/program/dls/245-invited-talk-2">“Everything You Know (About Parallel Programming) is Wrong!: A Wild Screed About the Future”</a>. The main conclusion is certainly that <a href="http://en.wikipedia.org/wiki/Romeo_and_Juliet">Romeo</a> would not have died when there would have been synchronization to avoid the race condition. What a nerdy example <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>In the end, the parallel revolution will need to find the balance between performance and correctness, since correctness is always bought by introducing delays and thus hampers performance. Another point he made more implicitly is that programming these systems becomes not only harder because of the parallel aspect, but also because of the ever-growing complexity of the underlying hardware. We just do not know anymore what is going on and why the performance is not as expected.</p>

<p>The VMIL workshop started with Eliot’s presentation. But, well, if you know how Eliot presents his work on the Cog VM then you know, that it is likely that people not acquainted with the details of Smalltalk VMs have a very hard time to follow. His <a href="http://www.cs.iastate.edu/~design/vmil/2011/papers/p03-miranda.pdf">paper</a> made the message a bit clearer, I think. His main point was the VM integration of the Bochs processor emulator for debugging.</p>


<p>After the first break, Lars talked a bit too much about Dart as a language, and the VM details were rather scarce. They said that they are going for simplicity, and the one aspect that I remember was that they do not have any static initialization to avoid ‘spontaneous’ executions. And well, their Smalltalk and Java history certainly shows between the lines.</p>

<p>The talk titled <a href="http://www.cs.iastate.edu/~design/vmil/2011/papers/p02-kell.pdf">“Virtual machines should be invisible”</a> was essentially about how to build a VM that reuses the standard systems ABI to integrate better with the surrounding system. They use the DWARF debugging format and dynamic linking techniques to reach that goal. Interesting but not platform-independent and I do not really see why that would be desirable or necessary for what I consider a VM.</p>

<p>I unfortunately missed the talk on <a href="http://www.cs.iastate.edu/~design/vmil/2011/papers/p06-gil.pdf">“A Microbenchmark Case Study and Lessons Learned”</a>. From the comments made later in the workshop, it seemed to have been an interesting and very relevant talk.</p>

<p>The talk titled <a href="http://www.cs.iastate.edu/~design/vmil/2011/papers/p07-zhao.pdf">“Intermediate Language Extensions for Parallelism”</a> was interesting, but I found that this IL is rather language dependent and is only applicable for a X10 or Habanero-ish language. Sure, the Cilk-style seems to be useful for a number of parallel problems, but it is not the only paradigm out there, so I wonder how that IL would look like if it would be designed for a multi-language VM.</p>

<p>The last talk of the workshop was mine: <a href="http://soft.vub.ac.be/~smarr/2011/09/which-problems-does-a-multi-language-virtual-machine-need-to-solve-in-the-multicoremanycore-era/">Which Problems Does a Multi-Language Virtual Machine Need to Solve in the Multicore/Manycore Era?</a> So, if you have any answers or thoughts on that topic, please leave me a note.</p>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/10/dls11-and-vmil11-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>Using R to Understand Benchmarking Results</title>
		<link>http://soft.vub.ac.be/~smarr/2011/09/using-r-to-understand-benchmarking-results/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-r-to-understand-benchmarking-results</link>
		<comments>http://soft.vub.ac.be/~smarr/2011/09/using-r-to-understand-benchmarking-results/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 11:15:18 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Benchmarks]]></category>
		<category><![CDATA[R]]></category>
		<category><![CDATA[RoarVM]]></category>
		<category><![CDATA[Smalltalk]]></category>
		<category><![CDATA[Statistics]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VM]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=441</guid>
		<description><![CDATA[Why R? Evaluating benchmark results with Excel became too cumbersome and error prone for me so that I needed an alternative. Especially, reevaluating new data for the same experiments was a hassle. However, the biggest problem with Excel was that I did not know a good way to query the raw data sets and group [...]]]></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/shBrushR.js"></script>
<link type="text/css" rel="stylesheet" href="http://soft.vub.ac.be/~smarr/renaissance/code/shCoreDefault.css"/>

<h2>Why R?</h2>

<p>Evaluating benchmark results with Excel became
   too cumbersome and error prone for me so that I needed an alternative.
   Especially, reevaluating new data for the same experiments was a hassle.
   However, the biggest problem with Excel was that I did not know a good
   way to query the raw data sets and group results easily to
   be able to answer different kind of questions about the data.
   Thus, I decided I need to learn how to do it in a better way.
   Since, I was not really happy with the debuggability, traceability,
   and reusability of my spreadsheets either, I gave up on Excel entirely.
   I bet, Excel can do most of the things I need, but I wanted a text-based
   solution for which I can use my normal tools, too.</p>

<p>While working on <a href="https://github.com/smarr/ReBench">ReBench</a>,
   I got already in touch with
   <a href="http://matplotlib.sourceforge.net/">matplotlib</a> to generate
   simple graphs from benchmark results automatically.
   But well, Python does not feel like the ultimate language for what I was
   looking for either. Instead, <a href="http://www.r-project.org/">R</a> was
   mentioned from time to time when it came to statistical evaluation of
   measurements. And, at least for me, it turned out to be an interesting
   language with an enormous amount of libraries. Actually, a bit
   to enormous for my little needs, but it looked like a good starting
   point to brush up on my statistics knowledge.</p>

<p>By now, I use it regularly and applied it to a number of problems,
   including my work on the <a href="https://github.com/smarr/RoarVM">RoarVM</a>
   and a paper about
   <a href="http://www.hpi.uni-potsdam.de/hirschfeld/projects/som/index.html#csompl">CSOM/PL</a>.</p>
   
<h2>Benchmark Execution</h2>

<p>Before we can analyze any benchmark results, we need a reliable way to
   execute them, ideally, as reproducible as possible. For that purpose,
   I use a couple of tools:</p>
   <dl>
     <dt><a href="https://github.com/smarr/ReBench">ReBench</a></dt>
     <dd>A Python application that executes benchmarks based on a given
         configuration file that defines the variables to be varied,
         the executables to be used and the benchmarks and their
         parameters.</dd>
     <dt><a href="http://www.squeaksource.com/SMark.html">SMark</a></dt>
     <dd>A Smalltalk benchmarking framework that allows one to write
         benchmarks in a style similar to how unit-tests are written.</dd>
     <dt><a href="https://github.com/tobami/codespeed">Codespeed</a></dt>
     <dd>This is mostly for the bigger picture, a web application
         that provides the basic functionality to track long-term
         performance of an application.<br/><br/></dd>
  </dl>

<p>Beside having good tools, serious benchmarking requires some background
   knowledge. Today&#8217;s computer systems are just to complex to get good
   results with the most naive approaches.
   In that regard, I highly suggest to read the following two
   papers which discussing many of the pitfalls that one encounters when
   working with modern virtual machines, but also just on any modern
   operating system and with state-of-the-art processor tricks.</p>
   
   <ul>
     <li><em>Georges, A.; Buytaert, D. &#038; Eeckhout, L.</em><br/>
         <a href="http://dx.doi.org/10.1145/1297105.1297033">Statistically Rigorous Java Performance Evaluation</a><br/>
         SIGPLAN Not., ACM, 2007, 42, 57-76. (<a href="http://itkovian.net/base/files/papers/oopsla2007-georges-preprint.pdf">PDF</a>)</li>
     <li><em>Blackburn, S. M.; McKinley, K. S.; Garner, R.; Hoffmann, C.; Khan, A. M.; Bentzur, R.; Diwan, A.; Feinberg, D.; Frampton, D.; Guyer, S. Z.; Hirzel, M.; Hosking, A.; Jump, M.; Lee, H.; Moss, J. E. B.; Phansalkar, A.; Stefanovik, D.; VanDrunen, T.; von Dincklage, D. &#038; Wiedermann, B.</em></li>
         <a href="http://dx.doi.org/10.1145/1378704.1378723">Wake Up and Smell the Coffee: Evaluation Methodology for the 21st Century</a>
         Commun. ACM, ACM, 2008, 51, 83-89. (<a href="http://domino.watson.ibm.com/comm/research_people.nsf/pages/hirzel.index.html/$FILE/cacm08-dacapo-benchmarks.pdf">PDF</a>)</li>
   </ul>
   

<h2>Getting Started with R</h2>

<p>Now, we need to find the right tools to get started with R.
   After searching a bit, I quickly settled on
   <a href="http://www.rstudio.org/">RStudio</a>. It feels pretty much like
   a typical IDE with a <a href="http://en.wikipedia.org/wiki/Read-eval-print_loop">REPL</a>
   at its heart. As you can see in the screenshot
   below, there are four important areas. Top-left are your *.R files
   in a code editor with syntax highlighting and code completion. Top-right
   is your current R workspace with all defined variables and functions.
   This allows also to view and explore your current data set easily.
   On the bottom-right, we got a window that usually contains either
   help texts, or plots.
   Last but not least, in the bottom-left corner is the actual REPL.</p>

<p><a href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/RStudio.png"><img
class="aligncenter size-medium wp-image-444" title="Screenshot of RStudio"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/RStudio-300x187.png"
alt="Screenshot of RStudio" width="300" height="187" /></a></p>

<p><code>Rscript</code> is the interpreter that can be used on the command-line
   and thus, is nice to have for automating tasks. I installed it using MacPorts.</p>

<p>This introduction is accompanied by a
   <a href="https://github.com/smarr/BenchR/blob/master/using-R-to-understand-benchmarking-results.R">script</a>.
   It contains all the code discussed here and can be used to follow the
   introduction avoiding to much copy&#8217;n'past. Furthermore, the code here
   is not as complete as the script, to be a little more concise.</p>

<p>The first thing to do after setting up R is to install some libraries.
   This can be done easily from the REPL by executing the following code:
   <code>install.packages("plyr")</code>. This will
   install the <code>plyr</code> library providing <code>ddply()</code>,
   which we are going to use later to process our data set.
   Before it is going to install the code, it will ask for a mirror nearby
   to download the necessary files.
   To visualize the benchmark results afterwards, we are going to use bean plots
   from the <code>beanplot</code> library. The <code>doBy</code> library
   provides some convenience functions from which we are going to use
   <code>orderBy()</code>.
   After the installing all libraries, they can be loaded by executing
   <code>library(lib_name)</code>.</p>

<p>The documentation for functions, libraries, and other topics is always
   just a question mark away. For instance, to find out how libraries are installed,
   execute the following code in the REPL: <code>?install.packages</code>.

<h2>Preprocessing Benchmark Results</h2>

<p>To give a little context, the experiment this introduction is based on
   tries to evaluate the impact of using an object table instead of direct
   references on the performance of our manycore Smalltalk, the RoarVM.</p>

<p>The data set is available here:
   <a href="http://stefan-marr.de/downloads/object-table-data.csv.bz2">object-table-data.csv.bz2</a>.
   Download it together with the <a href="https://raw.github.com/smarr/BenchR/master/using-R-to-understand-benchmarking-results.R">script</a> and
   put it into the same folder.
   After opening the script in RStudio, you can follow the description here
   while using the code in RStudio directly. The run-button will execute a
   line or selection directly in the REPL.</p>

<h3>Loading Data</h3>

<p>First, change the working directory of R to the directory where you put
   the data file: <code>setwd("folder/with/data-file.csv.bz2/")</code>.
   The file is a compressed comma-separated values file that contains
   benchmark results, but no header line. Furthermore, some of the rows do not
   contain data for all columns, but this is not relevant here and we can just
   fill the gabs automatically.
   Load the compressed data directly into R&#8217;s workspace by
   evaluating the following code:</p>
   
<pre class="brush: r; toolbar: false;">
bench &lt;- read.table("object-table-data.csv.bz2",
                    sep="\t", header=FALSE,
                    col.names=c("Time", "Benchmark", "VirtualMachine",
                                "Platform", "ExtraArguments", "Cores",
                                "Iterations", "None", "Criterion",
                                "Criterion-total"),
                    fill=TRUE)
</pre>

<p>As you can see in the workspace on the right, the variable <code>bench</code>
   contains now 60432 observations for 10 variables. Type the following
   into the REPL to get an idea of what kind of data we are looking at:
   <code>summary(bench)</code>, or <code>View(bench)</code>.
   Just typing <code>bench</code> into the REPL will print the plain content,
   too.
   As you will see, every row represents one measurement with a set of
   properties, like the executed benchmark, its parameters, and the virtual 
   machine used.
</p>

<h3>Transforming Raw Data</h3>

<p> As a first step, we will do some parsing and rearrange the data to
    be able to work with it more easily. The name of the virtual machine binary
    encodes a number of properties that we want to be able to access directly.
    Thus, we split up that information into separate columns. </p>

<pre class="brush: r; toolbar: false;">
bench &lt;- ddply(bench,
               ~ VirtualMachine, # this formula groups the data by the value in VirtualMachine
               transform,
               # the second part of the VM name indicates whether it uses the object table
               ObjectTable = strsplit(as.character(VirtualMachine), "-")[[1]][2] == "OT",
               # the third part indicates the format of the object header
               Header = factor(strsplit(as.character(VirtualMachine), "-")[[1]][3]))  
</pre>

<p> This operation could use some more explanation, but most important
    know now is that we add the two new columns and that the data
    is being processed grouped by the values in the <code>VirtualMachine</code>
    column. </p>

<p> The data set contains also results from another experiment and some of the
    benchmarks include very detailed information. Neither of those information
    is required at the moment and we can drop the irrelevant data points
    by using <code>subset</code>. </p>

<pre class="brush: r; toolbar: false;">
bench &lt;- subset(bench,
                Header == "full"         # concentrate on the VM with full object headers
                 &#038; Criterion == "total", # use only total values of a measurement
                select=c(Time, Platform, # use only a limited number of columns
                         ObjectTable, Benchmark, ExtraArguments, Cores))
</pre>

<p> Furthermore, we assume that all variations in measurements come from the
    same non-deterministic influences. This allows to order the measurements,
    before correlating them pair-wise. The data is order based on all columns,
    where <code>Time</code> is used as the first ordering criterion. </p>

<pre class="brush: r; toolbar: false;">
bench &lt;- orderBy(~Time + Platform + ObjectTable + Benchmark + ExtraArguments + Cores, bench)
</pre>

<h3>Normalizing Data</h3>

<p> In the next step, we can calculate the speed ratio between pairs of
    measurements. To that end, we group the data based the unrelated variables
    and divide the measured runtime by the corresponding measurement of the VM
    that uses an object table. Afterwards we drop the measurements for the VM
    with an object table, since the speed ratio here is obviously always 1.
</p>

<pre class="brush: r; toolbar: false;">
norm_bench &lt;- ddply(bench, ~ Platform + Benchmark + ExtraArguments + Cores,
                    transform,
                    SpeedRatio = Time / Time[ObjectTable == TRUE])
norm_bench &lt;- subset(norm_bench, ObjectTable == FALSE, c(SpeedRatio, Platform, Benchmark, ExtraArguments, Cores))
</pre>

<h2>Analyzing the Data</h2>

<h3>The Basics</h3>

<p> Now we are at a point were we can start to make sense of the benchmark
    results.
    The summary function provides now a useful overview of the data and
    we can for instance concentrate on the speed ratio alone.
    As you might expect, you can also get properties like the standard
    deviation, arithmetic mean, and the median easily: </p>

<pre class="brush: r; toolbar: false;">
summary(norm_bench$SpeedRatio)
sd(norm_bench$SpeedRatio)
mean(norm_bench$SpeedRatio)
median(norm_bench$SpeedRatio)
</pre>

<p> However, that is very simple, a bit more interesting are R&#8217;s features
    to query and process the data. The first question we are interested
    in is, whether there is actually an impact on the performance difference
    for different numbers of cores: </p>

<pre class="brush: r; toolbar: false;">
summary(norm_bench$SpeedRatio[norm_bench$Cores==1])
summary(norm_bench$SpeedRatio[norm_bench$Cores==16])
</pre>

<h3>Beanplots</h3>

<p> Starring at numbers is sometimes informative, but usually only useful
    for small data sets.
    Since we humans are better in recognizing patterns in visual representations,
    <a href="http://www.jstatsoft.org/v28/c01/paper">beanplots</a> are a better
    way to make sense of the data. They are an
    elegant visualization of the distribution of measurements. </p>

<pre class="brush: r; toolbar: false;">
beanplot(SpeedRatio ~ Platform,
         data = norm_bench,
         what = c(1,1,1,0), log="",
         ylab="Runtime: noOT/OT",
         las=2)
</pre>

<p><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/overall-distribution-beanplot.png"><img
class="aligncenter size-medium wp-image-454" title="Beanplot of the overall
distribution of all measurements"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/overall-distribution-beanplot-300x180.png"
alt="" width="300" height="180" /></a></p>


<p> This beanplot tells us, like the numbers before, that the mean is smaller
    than 1, which is the expected result and means that the indirection
    of an object table slows the VM down. However, the numbers did not tell
    use that there are various clusters of measurements that now become visible
    in the beanplot and are worth investigating. </p>

<p> Let&#8217;s look at the results split up by number of cores. </p>

<pre class="brush: r; toolbar: false;">
beanplot(SpeedRatio ~ Cores,
         data = norm_bench,
         what = c(1,1,1,0), log="",
         ylab="Runtime: noOT/OT")
</pre>

<p><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-cores.png"><img
class="aligncenter size-medium wp-image-455" title="Distribution of
measurements split up by cores"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-cores-300x180.png"
alt="" width="300" height="180" /></a></p>

<h3>Digging Deeper</h3>

<p> While noticing that the variant without object table is faster
    for more cores, we also see that the speed ratios are distributed unevenly.
    While the bean for 1-core has a 2-parted shape, the 2-cores bean has a lot
    more points where measurements clump.
    That is probably related to the benchmarks: </p>

<pre class="brush: r; toolbar: false;">
beanplot(SpeedRatio ~ Benchmark,
         data = subset(norm_bench, Cores==2),
         what = c(1,1,1,0), log="",
         ylab="Runtime: noOT/OT", las=2)
beanplot(SpeedRatio ~ Benchmark,
         data = subset(norm_bench, Cores==16),
         what = c(1,1,1,0), log="",
         ylab="Runtime: noOT/OT", las=2)
</pre>

<p class="aligncenter"><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-benchmarks-cores2.png"><img
class="size-thumbnail wp-image-457" title="Results for 2 cores"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-benchmarks-cores2-150x150.png"
alt="" width="150" height="150" /></a>

<a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-benchmarks-cores16.png"><img
class="size-thumbnail wp-image-458" title="Results for 16 cores"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/distribution-by-benchmarks-cores16-150x150.png"
alt="" width="150" height="150" /></a></p>

<p> Those two graphs are somehow similar, but you might notice that the float
    loop benchmark has a couple of strong outliers.
    I forgot the exact identifier of the float loop benchmark, so lets find out
    with this code: <code>levels(norm_bench$Benchmark)</code><br/>
    Now let&#8217;s filer the data shown by that benchmark. </p>

<pre class="brush: r; toolbar: false;">
beanplot(SpeedRatio ~ Cores,
         data = subset(norm_bench, Benchmark == "SMarkLoops.benchFloatLoop"),
         what = c(1,1,1,0), log="", ylab="Runtime: noOT/OT")
</pre>

<p><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/float-bench-per-core.png"><img
class="aligncenter size-medium wp-image-463" title="Results for the float loop
benchmark split up by cores"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/float-bench-per-core-300x180.png"
alt="" width="300" height="180" /></a></p>


<p> This visualization reassures me, that there is something strange going on.
    The distribution of result still looks clumped as if there is another
    parameter influencing the result, which we have not regarded yet.
    The only column we have not looked at is <code>ExtraArguments</code>,
    so we will add them. Note that <code>droplevels()</code> is applied on the
    data set this time before giving it to the <code>beanplot()</code> function.
    This is necessary since the plot would contain all unused factor levels
    instead, which would reduce readability considerably. </p>

<pre class="brush: r; toolbar: false;">
beanplot(SpeedRatio ~ Cores + ExtraArguments,
         data = droplevels(subset(norm_bench, Benchmark == "SMarkLoops.benchFloatLoop")),
         what = c(1,1,1,0), log="", ylab="Runtime: noOT/OT", las=2)
</pre>

<p><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/float-bench-per-core-and-extra-arguments.png"><img
class="aligncenter size-medium wp-image-464" title="Results of the float loop
benchmark split up by cores and extra benchmark arguments"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/float-bench-per-core-and-extra-arguments-300x180.png"
alt="" width="300" height="180" /></a></p>


<h3>Fixing up a Mistake</h3>

<p> This plot now shows us that there are three groups of results with
    different <code>ExtraArguments</code>.
    Think I forgot that the data set contains some very specific benchmarks.
    The overall goal of the benchmarks is to test the weak scaling behavior of
    the VM by increasing work-load and number-of-cores together.
    However, for the questions we are interested here, only those weak-scaling
    benchmarks are of interest.
    Thus, we need to filter out a couple of more data points, since the results
    will be unnecessarily biased otherwise.
    To filter the data points we use <code>grepl</code>.
    It matches the strings of <code>ExtraArguments</code> and allows us to
    filter out the single-core and the 10x-load benchmarks.</p>

<pre class="brush: r; toolbar: false;">
norm_bench &lt;- subset(norm_bench,
                     !grepl("^1 ", ExtraArguments)    # those beginning with "1" put load on a single core
                     &#038; !grepl("s0 ", ExtraArguments)) # those having "s0" in it put 10x load on each core
norm_bench &lt;- droplevels(norm_bench)
</pre>

<p> And since I always wanted to say that: 
    The exercise to regenerate all interesting graphs and re-answer the
    original questions are left to the interested reader. <img src='http://soft.vub.ac.be/~smarr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 

<h2>Conclusion</h2>

<p> As a final graph, we can plot all benchmarks for all cores,
    and get an overview. The <code>par</code> function allows to adapt the
    margins of the plot, which is necessary here to get the full benchmark
    names on the plot. </p>

<pre class="brush: r; toolbar: false;">
par(mar=c(20, 4, 1, 1))
beanplot(SpeedRatio ~ Cores + Benchmark,
         data = norm_bench,
         what = c(1,1,1,0), log="",  ylab="Runtime: noOT/OT", las=2)
</pre>

<p><a
href="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/final-overview.png"><img
class="aligncenter size-medium wp-image-465" title="Overview split by number
of cores and benchmarks"
src="http://soft.vub.ac.be/~smarr/wp-content/uploads/2011/09/final-overview-300x180.png"
alt="" width="300" height="180" /></a></p>

<p> As we already knew, we see an influence of the number of cores on the
 results, but more importantly, we see most benchmarks benefitting from removing
 the extra indirection through the object table. The float loops benefit by
 far the strongest. The float objects are so small and usually used only
 temporary that avoiding the object table pays off.
 For the integer loops it does not make a difference, since the VMs uses
 immediate values (tagged integers). Thus, the integers used here are not
 objects allocated in the heap and the object table is not used either. </p>

<p> Beyond the won insight into the performance implications of an object table
    this analysis also demonstrates the benefits of using a language like
    R. Its language features allow us to filter and reshape data easily.
    Furthermore, regenerating plots and tracing steps becomes easy, too.
    Here it was necessary since some data points needed to be removed from
    the data set to get to reasonable results. Reexecuting part of the script
    or just exploring the data is convenient and done
    fast, which allows me to ask more questions about the data and understand the
    measurements more deeply. Furthermore, it is less a hassle to reassess
    the data in case certain assumptions have changed, we made a mistake,
    or the data set changed for other reasons.
    From my experience, it is much more convenient than Excel, but that might
    just be because I spend more time on learning R than on learning Excel. </p>

<p> In case you try it out yourself, you will certainly want to experiment
    with other types of visualizations, save them to files, etc.
    A few of these things can be found in my benchmarking scripts on
    GitHub: <a href="https://github.com/smarr/BenchR">BenchR</a>.</p>

<script type="text/javascript">SyntaxHighlighter.all();</script>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2011/09/using-r-to-understand-benchmarking-results/feed/</wfw:commentRss>
		<slash:comments>1</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 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>Locality and Encapsulation: My Student’s Presentation at the TiC Summer School</title>
		<link>http://soft.vub.ac.be/~smarr/2010/05/locality-and-encapsulation-my-students-presentation-at-the-tic-summer-school/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=locality-and-encapsulation-my-students-presentation-at-the-tic-summer-school</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/05/locality-and-encapsulation-my-students-presentation-at-the-tic-summer-school/#comments</comments>
		<pubDate>Tue, 25 May 2010 09:27:59 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Encapsulation]]></category>
		<category><![CDATA[Idea]]></category>
		<category><![CDATA[Locality]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Slides]]></category>
		<category><![CDATA[summer school]]></category>
		<category><![CDATA[TiC'10]]></category>
		<category><![CDATA[Virtual Machines]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=297</guid>
		<description><![CDATA[On the first day here at the summer school, the organizers gave us the opportunity to present our research ideas to the lecturers and other participants. I presented my idea on extending the virtual machine models with explicit support for concurrency models. My brief presentation focused on using multiple-language virtual machines to provide support for [...]]]></description>
			<content:encoded><![CDATA[<p>On the first day here at the summer school, the organizers gave us the opportunity to present our research ideas to the lecturers and other participants.</p>
<p>I presented my idea on extending the virtual machine models with explicit support for concurrency models. My brief presentation focused on using multiple-language virtual machines to provide support for domain-specific concurrent languages. It basically states the question whether it is possible to use the concepts of locality and encapsulation as a common foundation for a wide range of different models. Since I am at the very beginning of working on this specific idea, there aren&#8217;t any answers yet.</p>


<div style="width:425px" id="__ss_4284861"><object id="__sse4284861" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=encapsulation-and-locality-final-100524234608-phpapp02&#038;rel=0&#038;stripped_title=encapsulation-and-locality-a-foundation-for-concurrency-support-in-multilanguage-vms" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse4284861" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=encapsulation-and-locality-final-100524234608-phpapp02&#038;rel=0&#038;stripped_title=encapsulation-and-locality-a-foundation-for-concurrency-support-in-multilanguage-vms" 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/2010/05/locality-and-encapsulation-my-students-presentation-at-the-tic-summer-school/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>
		<item>
		<title>Intermediate Language Design of High-level Language Virtual Machines: Towards Comprehensive Concurrency Support</title>
		<link>http://soft.vub.ac.be/~smarr/2010/02/intermediate-language-design-of-high-level-language-virtual-machines-towards-comprehensive-concurrency-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=intermediate-language-design-of-high-level-language-virtual-machines-towards-comprehensive-concurrency-support</link>
		<comments>http://soft.vub.ac.be/~smarr/2010/02/intermediate-language-design-of-high-level-language-virtual-machines-towards-comprehensive-concurrency-support/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 21:38:21 +0000</pubDate>
		<dc:creator>Stefan</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Bytecode]]></category>
		<category><![CDATA[concurrency]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Instruction Set]]></category>
		<category><![CDATA[Intermediate Language]]></category>
		<category><![CDATA[OOPSLA]]></category>
		<category><![CDATA[Survey]]></category>
		<category><![CDATA[Virtual Machines]]></category>
		<category><![CDATA[VMIL]]></category>

		<guid isPermaLink="false">http://soft.vub.ac.be/~smarr/?p=285</guid>
		<description><![CDATA[My second workshop paper got published at the ACM Digital Library. This is actually only an abstract, but nonetheless, it might be interesting for people looking into the design of virtual machines and especially bytecodes/intermediate languages. Abstract Today&#8217;s major high-level language virtual machines (VMs) are becoming successful in being multi-language execution platforms, hosting a wide [...]]]></description>
			<content:encoded><![CDATA[<p>My second workshop paper got published at the ACM Digital Library. This is actually only an abstract, but nonetheless, it might be interesting for people looking into the design of virtual machines and especially bytecodes/intermediate languages.</p>
<h3>Abstract</h3>
<blockquote>
<p>Today&#8217;s major high-level language virtual machines (VMs) are becoming successful in being multi-language execution platforms, hosting a wide range of languages. With the transition from few-core to many-core processors, we argue that VMs will also have to abstract from concrete concurrency models at the hardware level, to be able to support a wide range of abstract concurrency models on a language level. To overcome the lack of sufficient abstractions for concurrency concepts in  VMs, we proposed earlier to extend VM intermediate languages by special  concurrency constructs[<a href="http://www.stefan-marr.de/2010/02/virtual-machine-support-for-many-core-architectures-decoupling-abstract-from-concrete-concurrency-models/">PLACES09</a>].</p>
<p>As a first step towards this goal, we try to fill a gap in the current literature and survey the intermediate language design of VMs.  Our goal is to identify currently used techniques and principles as well as to gain an overview over the available concurrency related features in intermediate languages.</p>
<p>Another aspect of interest is the influence of the particular target language, for which the VM is originally intended, on the intermediate language.</p></blockquote>
<ul>
	<li>Paper: <a title="Intermediate Language Design of High-level Language Virtual Machines: Towards Comprehensive Concurrency Support" href="http://soft.vub.ac.be/~smarr/downloads/vmil09-smarr.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 VMIL&#8217;09, October 25, 2009. <a href="http://doi.acm.org/10.1145/1711506.1711509">http://doi.acm.org/10.1145/1711506.1711509</a></li>
	<li>BibTex: <a href="http://www.bibsonomy.org/bibtex/24cadae2ab990d54d761d2233f8a21505/gron">BibSonomy</a></li>
</ul>
<h3>Slides of the Talk at VMIL09/OOPSLA</h3>
<div id="__ss_2357339" style="width: 425px; text-align: left;"><object style="margin:0px" 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=vmil09-005-091027084911-phpapp01&amp;rel=0&amp;stripped_title=intermediate-language-design-of-highlevel-language-vms-towards-comprehensive-concurrency-support" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=vmil09-005-091027084911-phpapp01&amp;rel=0&amp;stripped_title=intermediate-language-design-of-highlevel-language-vms-towards-comprehensive-concurrency-support" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
]]></content:encoded>
			<wfw:commentRss>http://soft.vub.ac.be/~smarr/2010/02/intermediate-language-design-of-high-level-language-virtual-machines-towards-comprehensive-concurrency-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

