<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Open Parallel</title>
	<atom:link href="http://openparallel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://openparallel.com</link>
	<description>Software for Multicore and Parallel Computing</description>
	<lastBuildDate>Mon, 30 Jan 2012 23:54:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='openparallel.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Open Parallel</title>
		<link>http://openparallel.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://openparallel.com/osd.xml" title="Open Parallel" />
	<atom:link rel='hub' href='http://openparallel.com/?pushpress=hub'/>
		<item>
		<title>Multicore World 2012: THE conference in Australasia and the Pacific for Multicore Technologies and Parallelism</title>
		<link>http://openparallel.com/2011/09/29/multicore-world-2012-the-conference-in-australasia-and-the-pacific-for-multicore-technologies-and-parallelism/</link>
		<comments>http://openparallel.com/2011/09/29/multicore-world-2012-the-conference-in-australasia-and-the-pacific-for-multicore-technologies-and-parallelism/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 01:46:21 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[Multicore World 2012]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=235</guid>
		<description><![CDATA[Open Parallel presents Multicore World Multicore is unstoppable: the economics are driving it. Therefore we need software to exploit the huge opportunities that these new architectures offer You have been there, a conference that was full of brilliant new technology that you will be able to use &#8230; possibly sometime in the future. Multicore World [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=235&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Open Parallel</strong> presents <a href="http://www.multicoreworld.com"><strong>Multicore World</strong></a></p>
<p><a href="http://openparallel.files.wordpress.com/2011/09/logo_long_blue_middle1.jpg"><img class="aligncenter size-full wp-image-248" title="logo_long_blue_middle" src="http://openparallel.files.wordpress.com/2011/09/logo_long_blue_middle1.jpg?w=575&#038;h=84" alt="" width="575" height="84" /></a></p>
<p><strong>Multicore is unstoppable:</strong> the economics are driving it. Therefore we need software to exploit the huge opportunities that these new architectures offer</p>
<p>You have been there, a conference that was full of brilliant new technology that you will be able to use &#8230; possibly sometime in the future.</p>
<p><strong>Multicore World is different.</strong></p>
<p>We present you today what you can start using <strong>today</strong> &#8211; because multicore technology is with us already – and it&#8217;s not as hard to employ as you might think. Multicore World 2012 goes to great lengths to find the best in the field of hardware and software development and bring them all to Wellington to give you a cut through the current state of the multicore world.</p>
<p>Confirmed Keynote Speakers are <a href="http://www.multicoreworld.com/index.php/mw/mw12/announcement/view/2"><strong>James Reinders</strong></a>, Intel Chief Software Evangelist, <a href="http://www.multicoreworld.com/index.php/mw/mw12/announcement/view/1"><strong>Tim Mattson</strong></a> (Khronos OpenCL Group, Senior Research Scientist, Intel) and <strong>Martin McKendry</strong> (ex-SVP at Avaya, Siebel, Openwave)</p>
<p>Check the impressive line-up of international guest speakers <a href="http://openparallel.com/multicore-world-2012/">here</a> with six of them coming from the US exclusively for Multicore World 2012.  Join them: CFP is still open till 20 February 2012</p>
<p>Multicore World 2012 will be at Wellington Town Hall, <strong>27-28 March 2012</strong>. More information in the conference website <a href="http://www.multicoreworld.com"><strong>Multicore World</strong></a></p>
<p>&nbsp;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/235/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/235/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/235/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=235&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2011/09/29/multicore-world-2012-the-conference-in-australasia-and-the-pacific-for-multicore-technologies-and-parallelism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>

		<media:content url="http://openparallel.files.wordpress.com/2011/09/logo_long_blue_middle1.jpg" medium="image">
			<media:title type="html">logo_long_blue_middle</media:title>
		</media:content>
	</item>
		<item>
		<title>Improve your website speed-up to 70% with Open Parallel&#8217;s customised version of HipHop with TBB</title>
		<link>http://openparallel.com/2011/09/26/improve-your-website-speed-up-to-70-with-open-parallels-customised-version-of-hiphop-with-tbb/</link>
		<comments>http://openparallel.com/2011/09/26/improve-your-website-speed-up-to-70-with-open-parallels-customised-version-of-hiphop-with-tbb/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 20:42:51 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[PHP - HipHop]]></category>
		<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=231</guid>
		<description><![CDATA[We present a three stages process that brings up to 50% resource drop and up to 70% speed-up compared to your current Apache setup. First Step &#8212;&#8212;&#8212;- We analyze a typical request of your site. To display your site the browser first fetches the page that is generated by your PHP application &#8211; served off [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=231&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We present a three stages process that brings <strong>up to 50% resource drop</strong> and <strong>up to 70% speed-up</strong> compared to your current Apache setup.</p>
<p>First Step<br />
&#8212;&#8212;&#8212;-</p>
<p>We analyze a typical request of your site. To display your site the browser first fetches the page that is generated by your PHP application &#8211; served off Apache. This page includes many static resources: the browser fetches all of those to display the site. This step goes back to your Apache server that already served your PHP content and serves all static files the same way. This is a perfectly valid way of dealing with static files if your site has a low and continuous traffic pattern. If you deal with peak loads frequently or your average load is more than 50-70 concurrent users per server then Apache becomes a performance bottleneck.</p>
<p>To reduce the work Apache needs to do, we put nginx in for serving static files. Nginx only off loads the heavy lifting of the PHP work to Apache. This way we cut down the memory and CPU usage already by about 30-40% depending of your website.</p>
<p>Now we have to start modifying code as HipHop uses a stripped down version of PHP 5.2. The most important difference is the missing &#8216;eval&#8217; function.</p>
<p>Second Step<br />
&#8212;&#8212;&#8212;&#8211;</p>
<p>We look into your code base, at the structure of your site and port it to run on the HipHop engine. It is a pretty standard procedure and once done your development cycle will not change a lot. You gain a dramatic change in performance. All changes are compatible with standard PHP.</p>
<p>HipHop takes your PHP code and translates it into C++ which we compile down to a Linux binary. Facebook, probably the largest PHP site in the internet, reduced their computing needs to power the site by nearly 50% by moving to HipHop.</p>
<p>Third Step<br />
&#8212;&#8212;&#8212;-</p>
<p>Here occurs the biggest customization work but with the biggest rewards. If you use a multi-processor architecture (which you do if you run on bare metal or high spec virtualised servers) then you can parallelise tasks in your programs to run on all the CPUs you have available in parallel.</p>
<p>We will present a custom HipHop version with TBB (Threading Building Blocks) functionality that enables us to run for and while loops in parallel and increase the performance that way.</p>
<p>Depending on the amount of for/while loops in your code and the nature of them and the work they do we can optimize them to run on many CPUs instead of sequentially on one. Your for loops will suddenly be extremely fast.</p>
<p>Our PHP language extensions give you certain data structures and a parallel_for function that is thread save and auto scales to the amount of CPUs in your system. This last step will give you a total of up to 50% resource drop and up to 70% speed-up compared to your Apache setup.</p>
<p><strong><a href="http://openparallel.com/contact-us/">Contact Open Parallel</a></strong> for more information</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=231&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2011/09/26/improve-your-website-speed-up-to-70-with-open-parallels-customised-version-of-hiphop-with-tbb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>
	</item>
		<item>
		<title>A new hope for efficient, safe data sharing between threads in Perl</title>
		<link>http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/</link>
		<comments>http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/#comments</comments>
		<pubDate>Mon, 04 Jul 2011 16:09:40 +0000</pubDate>
		<dc:creator>Sam Vilain</dc:creator>
				<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=218</guid>
		<description><![CDATA[Recently, I attended YAPC::NA in Asheville, NC.  One of the most interesting technical talks I saw was use types; by Reini Urban. In it, he describes new possibilities for making type-safe Perl constructs be honored by the Perl interpreter. This is interesting for a number of reasons: say you have an array of items, which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=218&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I attended YAPC::NA in Asheville, NC.  One of the most interesting technical talks I saw was <a href="http://www.yapc2011.us/yn2011/talk/3289"><code>use types;</code></a> by Reini Urban. In it, he describes new possibilities for making type-safe Perl constructs be honored by the Perl interpreter.</p>
<p>This is interesting for a number of reasons: say you have an array of items, which you know are going to be native integers, you can store them with a whole lot less memory than the current situation:</p>
<p><img src="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/av-14.png" alt="" /><br />
<img src="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/sviv-14.png" alt="" /></p>
<p>Under Reini&#8217;s proposal, this could be reduced to:</p>
<p><img src="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/av-typed.png" alt="" /></p>
<p>Yes, that&#8217;s about two data structures for the entire (fixed size) array. This is the most dramatic of the memory reductions and would bring Perl quite close to C in terms of memory use for data without resorting to relatively slow pack/unpack systems like <a href="http://search.cpan.org/dist/Judy/">Judy</a>. It would also be very fast.<br />
There are also provisions for other typed scalar values (such as float, strings, etc) and also a solution for hashes called &#8220;perfect hashes&#8221;.</p>
<p>Already this is all very good stuff, but it was the treatment of <code>:const</code> that caught my eye;</p>
<p><code>my int $x : const;</code></p>
<p>This guarantees that once Perl has allocated and initialized the value, it <i>may not change</i>. This would allow one of the worst problems with the existing <code>threads::tbb</code> library to be avoided.</p>
<p>Currently, the data structures that you share through <code>threads::tbb::concurrent</code> and other containers must not be updated after they are saved to the container. However, it is very difficult to ensure this and there are some operations which change memory, which you wouldn&#8217;t think are writes &#8211; even innocuous things such as printing an integer, which may upgrade the data structure from an IV (integer only) to a PVIV (integer + string &#8220;dualvar&#8221;) to cache the conversion. The current API avoids this problem mostly by copying memory structures very quickly on the first access, and then subsequent accesses will work with the copied data. But it is not foolproof, and it&#8217;s possible that any access to data structures which have been shared may cause another thread to segfault the process due to an unsafe data structure access.</p>
<p>This proposal would provide the perfect API for ensuring that changes are thread-safe: requiring that only <code>:const</code> values may be put inside it. I would posit that the result would not only be easier to work with and safer by design, but use less memory and run faster, as the values do not need to be copied to share between threads in the first place.</p>
<p>But it gets even better.</p>
<p>With &#8220;perfect&#8221; hashes, and <code>:const</code> and typed arrays and scalars, the Moose-like idiom of <code>__PACKAGE__-&gt;make_immutable</code>, which forbids a range of run-time dynamic behavior, could go even further: it could mark the actual package stash (symbol table) as <code>:perfect</code> or <code>:const</code>. If the <code>Perl_clone()</code> API takes this into account, then thread creation in Perl could get a whole lot faster. Currently, creating a new Perl thread basically duplicates the entire heap of your program &#8211; this comes from its design as a replacement for the Unix copy-on-write <i>fork()</i>, which was never implemented for Windows.  If modules can mark which parts of them have finished changing, and may no longer change, then those parts don&#8217;t need to be duplicated.  Even if they are not <code>:const</code> &#8211; just being <code>:perfect</code> could allow the perfect hash keys to be shared, and so on.</p>
<p>One of the senior Perl figures I talked to about this was excited that this would be &#8220;real&#8221; <code>:const</code>, not the &#8220;humpty-dumpty const&#8221; behavior required by C++.  In C++, the <code>const</code> keyword can be overridden by <code>mutable</code>.  This was intended for things like reference counts, but in any case those are probably best handled by the relevant API calls specific to reference counts (which can use <code>atomic</code> types).</p>
<p>The summary is that Moose programs which use the <code>make_immutable</code> API would be able to start new threads, using far less CPU time and memory to do so; as well as the other benefits of this code, such as using less memory for object instances.</p>
<p>Of course, this is all very much a roadmap, and requires a lot of community acceptance of the idea, and working proposals in terms of patch sets and so on.  However, Reini is hopeful for targeting Perl 5.16 for the first few changes, and 5.18 for more of them.  At the current rate of Perl releases, that could mean this hitting a production Perl release as early as 2012.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/218/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/218/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/218/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=218&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f98eae5330b95c5bb92ab705fb5a7c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">samvilain</media:title>
		</media:content>

		<media:content url="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/av-14.png" medium="image" />

		<media:content url="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/sviv-14.png" medium="image" />

		<media:content url="http://cpansearch.perl.org/src/RURBAN/types-0.05_02/doc/yapc2011/pix/av-typed.png" medium="image" />
	</item>
		<item>
		<title>Threading Perl using TBB : the CPAN module and white paper</title>
		<link>http://openparallel.com/2011/05/11/threading-perl-using-tbb-the-cpan-module-and-white-paper/</link>
		<comments>http://openparallel.com/2011/05/11/threading-perl-using-tbb-the-cpan-module-and-white-paper/#comments</comments>
		<pubDate>Wed, 11 May 2011 04:08:30 +0000</pubDate>
		<dc:creator>Sam Vilain</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[TBB]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=201</guid>
		<description><![CDATA[Before Easter, I quietly released version 0.01 of the threads::tbb module to CPAN.  This week, I posted the white paper I&#8217;ve been working on to demonstrate that indeed it does permit high-performance threaded programs to be written.  The paper, included with the 0.02 CPAN release, is called Threading Perl with TBB.  I managed to demonstrate [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=201&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Before Easter, I quietly released version 0.01 of the <span style="color:#888888;"><a title="threads::tbb on CPAN" href="http://search.cpan.org/dist/threads-tbb"><span style="color:#888888;"><tt>threads::tbb</tt></span></a></span> module to CPAN.  This week, I posted the white paper I&#8217;ve been working on to demonstrate that indeed it does permit high-performance threaded programs to be written.  The paper, included with the 0.02 CPAN release, is called <a title="Threading Perl with TBB - the white paper" href="http://cpansearch.perl.org/src/SAMV/threads-tbb-0.02/doc/threading-perl-with-tbb.pdf" target="_blank">Threading Perl with TBB</a>.  I managed to demonstrate scaling to 7 out of 8 processors, which is good enough for a 0.01 release I think.</p>
<p>Writing a LaTeX article-style white paper is an unusual way to communicate a new idea in the Perl community, which are normally focused on CPAN releases, conference presentations, blog posts etc.  However I chose this format for a wider audience &#8211; as the research itself applies to many of the dynamic language environments out there, and I try to characterize which interpreters it is applicable to &#8211; along with warnings about the difficulties in proceeding.</p>
<p>Actually, the first attempt at this effort was for PHP/Zend, to go alongside other OpenParallel successes with PHP/HipHop.  However it became obvious early on that the depth of previous research and support framework I had access to made targeting PHP first not a feasible option.  At least not for someone without the oral transmission of how the Zend internals work.</p>
<p>Here&#8217;s the abstract, with a little summary commentary:</p>
<p><span id="more-201"></span></p>
<blockquote><p>Perl’s history has seen two threading models; one shared-state model now dis-<br />
continued, and one heap-duplicating model with a very inefficient shared state ap-<br />
proach. There is also an Erlang-style threading library on CPAN, <tt>threads::lite</tt>,<br />
more efficient and scalable but specific in functionality.</p></blockquote>
<p>This summarizes the &#8220;Threading History&#8221; section of the paper.  Threading has a bad rap to date, with many language communities considering it a flawed approach, inherently instable or unnecessary if you have <cite>fork()</cite>.  I&#8217;m with the TBB authors on this &#8211; that it&#8217;s more of an API issue.  This section tries to give the section of the relevant history for Perl, as it explains why in the Perl community the situation is so.  As the <a title="Perl 5 converted to Git release announcement on use.perl.org" href="http://use.perl.org/articles/08/12/22/0830205.shtml" target="_blank">person who compiled the Perl git history</a>, my focus for this section was certainly on what is available in git and on CPAN.</p>
<blockquote><p>A task-oriented parallelisation approach permits parallel operations on data sets<br />
as well as pipeline-based programming. <tt>threads::tbb</tt>, the core invention of the<br />
paper, uses Intel’s Threading Building Blocks (TBB) along with a system of lazy<br />
cloning for state, and is shown to result in speed-ups for embarassingly parallel tasks<br />
to 8 processor cores or more.</p></blockquote>
<p>There is a section in the paper where I have effectively summarized the contents of the TBB approach for the <a title="Virtues of a Programmer by Larry Wall" href="http://en.wikipedia.org/wiki/Larry_Wall#Virtues_of_a_programmer" target="_blank">lazy by virtue</a> Perl programmer.  It references <a title="Intel Threading Building Blocks: Outfitting C++ for Multi-core Processor Parallelism, 2007, O'Reilly" href="http://oreilly.com/catalog/9780596514808" target="_blank">James Reinders&#8217; book</a>, still the best source of information on TBB.  It also summarizes the results section, where I show that:</p>
<ul>
<li>the approach works for &#8220;synthetic&#8221; tasks &#8211; ie, inner loops, with the best time increase being a 7-times speed up on an 8-core system.</li>
<li>described effects of memory allocation mutex contention are observed, and can be worked around using the TBB scalable memory allocator proxy.</li>
<li>The API is useful enough to be useful to retrofit a legacy program.</li>
</ul>
<blockquote><p>The results are applicable in principle to other languages which are built around<br />
boxed variables and state machine interpreters, such as PHP/Zend or standard<br />
Python.</p></blockquote>
<p>As I mentioned before the jump, most of the difficulties are around the nature of having a state machine and are applicable to a selection of other Virtual Machines.  This assertion would need to be tested by those other communities of course.</p>
<blockquote><p>The cloning logic duplicates core Perl 5 code in intent, the API for which could be<br />
cleaned up to avoid some minor API intrusions. Green fields interpreter approaches<br />
would benefit from a const concept to avoid duplication in the first place, and for<br />
safer operation.</p></blockquote>
<p>The &#8220;lazy clone&#8221; approach I mentioned has some very large caveats, and I attempt to explain why they are necessary in terms of achieving practical speed-ups, mitigating factors to the decision, and design approaches for avoiding the problems in the first place.</p>
<blockquote><p>Transformations for task-orientation are similar to those required for event-<br />
oriented programming, with potential to parallelize event frameworks, or for APIs<br />
which span the two styles.</p></blockquote>
<p>This is a possibility I want to expand upon in the future &#8211; I believe that the <tt>parallel_while</tt> API in TBB would allow you to make event-style frameworks which allow multiple events to be processed in parallel.  This would be interesting and perhaps a new style of programming.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/201/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/201/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/201/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=201&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2011/05/11/threading-perl-using-tbb-the-cpan-module-and-white-paper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/4f98eae5330b95c5bb92ab705fb5a7c1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">samvilain</media:title>
		</media:content>
	</item>
		<item>
		<title>Do you have a slow PHP site?</title>
		<link>http://openparallel.com/2011/01/20/do-you-have-a-slow-php-site/</link>
		<comments>http://openparallel.com/2011/01/20/do-you-have-a-slow-php-site/#comments</comments>
		<pubDate>Thu, 20 Jan 2011 07:16:10 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[PHP - HipHop]]></category>
		<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=156</guid>
		<description><![CDATA[HipHop and TBB specialists Do you have a slow PHP site? Here is how we help you deal with it: optimizing PHP with HipHop! We are specialists in HipHop and help companies to transition to HipHop Read about our work with Intel’s TBB in WordPress (White Paper) and WordPress on HipHop (White Paper). Open Parallel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=156&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>HipHop and TBB specialists</strong></p>
<p>Do you have a slow PHP site?</p>
<p>Here is how we help you deal with it: <strong>optimizing PHP with HipHop!</strong></p>
<p><strong>We are specialists in HipHop</strong> and help companies to transition to <a href="http://en.wikipedia.org/wiki/HipHop_(software)">HipHop</a></p>
<p>Read about our work with <strong>Intel’s TBB in WordPress</strong> (<strong><a href="http://openparallel.wordpress.com/2010/11/01/tbb-in-wordpress-–-white-paper/">White Paper</a></strong>) and <strong>WordPress on HipHop</strong> (<strong><a href="http://openparallel.wordpress.com/2010/11/01/wordpress-on-hiphop-white-paper/">White Paper</a></strong>). </p>
<p><strong>Open Parallel is a consulting company that can help you grow your PHP based application and transition to a HipHop based application stack.</strong> We also offer customized HipHop engines that exactly serve your needs, as HipHop can be more than just the standard &#8220;off-the-shelf&#8221; version that is available online. Our extensive experience in both, the HipHop engine and porting PHP projects to HipHop will help you scale without the need of extensive re-training of your developers.</p>
<p>On top of being a Consultancy Company doing HipHop work, we also do Research into the HipHop engine and enhance it with our deep and direct knowledge of Intel’s <strong>TBB</strong> (<a href="http://en.wikipedia.org/wiki/Intel_Threading_Building_Blocks">Threading Building Blocks</a>).</p>
<p><strong><a href="http://openparallel.wordpress.com/contact-open-parallel/">Contact us</a></strong>. Or hear directly about our work at Linux Conference Australia 2011. We will present <strong><a href="http://lca2011.linux.org.au/programme/schedule/view_talk/174?day=friday">“Integration of Intel’s TBB into Facebook’s HipHop”</a></strong> on Friday 28 January 2011 in LCA2011 in Brisbane, Australia.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/156/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/156/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/156/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=156&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2011/01/20/do-you-have-a-slow-php-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>
	</item>
		<item>
		<title>TBB in WordPress – White Paper</title>
		<link>http://openparallel.com/2010/11/01/tbb-in-wordpress-%e2%80%93-white-paper/</link>
		<comments>http://openparallel.com/2010/11/01/tbb-in-wordpress-%e2%80%93-white-paper/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 03:37:33 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[PHP - HipHop]]></category>
		<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=98</guid>
		<description><![CDATA[PDF version Introduction When we at Open Parallel started to look at a way to implement TBB into PHP and HipHop, we initially planned to tackle the HipHop optimizer and try to come up with some sort of automatic conversion that uses TBB where possible. This turned out to be a not workable task for [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=98&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://openparallel.files.wordpress.com/2010/09/tbb-in-wordpress-oct-10.pdf">PDF version</a></p>
<p><strong>Introduction</strong><br />
When we at <a href="http://www.openparallel.com"><strong>Open Parallel</strong></a> started to look at a way to implement <a href="http://www.threadingbuildingblocks.org/">TBB</a> into PHP and <a href="http://developers.facebook.com/blog/post/358">HipHop</a>, we initially planned to tackle the HipHop optimizer and try to come up with some sort of automatic conversion that uses TBB where possible. This turned out to be a not workable task for the moment and we went down the track of <strong>mapping TBB commands directly to new PHP functions. </strong></p>
<p>The idea was to implement TBB commands into HipHop and write PHP equivalents for the case where either HipHop is not compiled with our patches or where the project runs on a more traditional stack.</p>
<p><strong>First command: parallel_for</strong><br />
We started out with <a href="http://openparallel.wordpress.com/2010/09/08/parallel_for-implementation-project-tbb-hiphop/">parallel_for</a> as it looked like one of the commands that suit a web project best. There are many loops in WordPress and the ability to effect free parallelization on them looks like a very promising option. As not all loops can be run in parallel, we opted for writing a patch set for WordPress that used the new syntax and commands.</p>
<p>On the HipHop side, TBB was already used for memory management and adding the parallel_for command was pretty straightforward. We extended the known language constructs of HipHop by the command parallel_for and created a patch set for the HipHop code base. With these patches in place, we were able to compile PHP constructs containing the keyword parallel_for on the HipHop engine.</p>
<p>After initial tests with the new command and demo scripts on how to use it, we took the WordPress code apart and tried to find a foreach loop that was used frequently. We found that the plugin code had one of the more frequently used foreach loops and rewrote it using our new parallel_for &#8211; it worked after some debugging. </p>
<p><strong>Verdict so far:</strong> extending HipHop is not entirely straightforward but can be done. </p>
<p>Adding TBB to the PHP language is possible, but the developer using it needs to judge if a loop can run in parallel or not. The language construct we currently use might not be straightforward enough for the junior PHP developer, but then again, they will most probably not be our target audience anyway, as they have to learn how to judge if something can run in parallel first. </p>
<p><strong>Bottom line</strong>: An intermediate PHP developer can use the TBB extension after some initial training on what to look for.</p>
<p><strong>An example</strong> invocation of the parallel_for function looks like this:<br />
function test_pfor_callback($indices) {<br />
    foreach ($indices as $idx) {<br />
            echo &#8220;{$idx}\n&#8221;;<br />
            flush();<br />
    }<br />
}<br />
parallel_for(0, 1000, &#8216;test_pfor_callback&#8217;);</p>
<p><strong>WordPress on HipHop</strong><br />
The next step was to run the hacked WordPress version on HipHop and compare it to the original version. This bit was the impressive bit. Just to recap, we added one command out of the TBB functionality to PHP and then modified one foreach to run with our parallel_for implementation.</p>
<p>In the initial tests, we saw a significant drop in memory usage and a sizable reduction of the time our test suite needed to run. We subsequently moved more code into parallel_for constructs and refined our testing, and even though our gains in terms of memory dropped, we managed to gain more on the execution time.</p>
<p><strong>Adding TBB</strong><br />
The lessons learned from this experiment are interesting. HipHop is a better way to run PHP &#8211; we kind of expected this &#8211; but adding TBB to the game for more than the memory management looks like the way forward. <strong>TBBs parallel_for gave us a considerable speed-up and a significant decrease in memory consumption</strong></p>
<p>This experiment also showed that there is a vast field of optimization in script languages for optimizing loops. We will look into this in more depth and try to come up with a <strong>more general TBB implementation in PHP and HipHop in the future</strong>. The reduced memory footprint and the decrease of execution time due to running tasks in parallel are addressing very real life problems, and fixing this in a more general way looks like a very much needed language extension.</p>
<p><strong>Details of the Tests</strong><br />
Going into the details of the tests, we explain our test set-up and show how these tests can be replicated on your hardware to see what speedups you can gain &#8211; the first tests ran on real networks on different physical machines whereas the later ones ran with the one described below.</p>
<p>We tested on virtual machines running <a href="http://www.virtualbox.org/">VirtualBox</a> with HipHop and WordPress (including MySQL) running in the VM and <a href="http://tsung.erlang-projects.org/">Tsung</a> running on the host machine. The host was running MacOS 10.6.4 and the nodes were running Ubuntu 10.04. For each test the VM was rebooted, HipHop started with our Open Parallel <a href="http://github.com/openparallel/HipHop-scripts/blob/master/run-hiphop.sh">startup script</a> and then Tsung started from the host.</p>
<p><a href="http://collectd.org/">Collectd</a> was used to gather the performance data from the node systems and no other services as the required ones were running at the time of the tests, in order to reduce noise. We even stopped using Nginx as a frontend loadbalancer to make sure we were really only measuring the pure time HipHop needs to render the page.</p>
<p><strong>The Open Parallel WordPress repository</strong> can be found on <a href="http://github.com/openparallel">github</a> and there are some repositories that hold additional resources that might be needed to run the tests or come in handy for testing. We also published our <a href="http://github.com/openparallel/HipHop-scripts/blob/master/tsung/tsung.xml">Tsung config</a> to illustrate how our typical user session looked like that we ran our tests with.</p>
<p><strong>Memory Usage Reduction</strong><br />
Testing revealed that we were able to reduce the memory usage by about 100MB in our current version. This value moves quite a bit depending on the functions that are moved into the parallel_for construct and it is quite hard to come up with a MB/invocation number. We did some in-depth testing in that area and all we can say is that the amount of memory used was <strong>always below</strong> the amount the unpatched version used &#8211; from time to time not by much &#8211; but always below.</p>
<p>The parameter that was constantly below the unpatched version &#8211; and by a lot &#8211; was the connection time and the number of sessions handled in parallel. We were able to optimize in that area to the extend of more than one minute less time needed to complete our test run, and managed to get the amounts of pages served per second up to 7.2 compared to 6.3 in the unpatched version.</p>
<p>The attached graphs show the memory and CPU usage we recorded during the test runs and show the responses/sec for the different setups.</p>
<p>We are happy to supply more information if needed to replicate the tests on your systems and are happy to discuss the outcomes on the <a href="http://groups.google.com/group/hiphop-php-dev">HipHop mailing list</a></p>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/cpu-standard.png" title="HipHop - Standard - CPU" width="547" height="188" /><p class="wp-caption-text">HipHop - Standard - CPU</p></div>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/memory-standard.png" width="547" height="174" /><p class="wp-caption-text">HipHop - standard - Memory</p></div>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/cpu-optimized.png" width="547" height="188" /><p class="wp-caption-text">HipHop - Optimized - CPU</p></div>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/memory-optimized.png" width="547" height="174" /><p class="wp-caption-text">HipHop - Optimized - Memory</p></div>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/page-sec-standard.png" width="547" height="424" /><p class="wp-caption-text">Pages - Seconds - Standard</p></div>
<div class="wp-caption aligncenter" style="width: 557px"><img alt="" src="http://dl.dropbox.com/u/1785261/TBB/page-sec-optimized.png" width="547" height="424" /><p class="wp-caption-text">Pages - Seconds - Optimized</p></div>
<p><strong>© Open Parallel</strong> White Paper<br />
November 2010</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=98&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2010/11/01/tbb-in-wordpress-%e2%80%93-white-paper/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/cpu-standard.png" medium="image">
			<media:title type="html">HipHop - Standard - CPU</media:title>
		</media:content>

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/memory-standard.png" medium="image" />

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/cpu-optimized.png" medium="image" />

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/memory-optimized.png" medium="image" />

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/page-sec-standard.png" medium="image" />

		<media:content url="http://dl.dropbox.com/u/1785261/TBB/page-sec-optimized.png" medium="image" />
	</item>
		<item>
		<title>WordPress on HipHop &#8211; White Paper</title>
		<link>http://openparallel.com/2010/11/01/wordpress-on-hiphop-white-paper/</link>
		<comments>http://openparallel.com/2010/11/01/wordpress-on-hiphop-white-paper/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 23:11:43 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[PHP - HipHop]]></category>
		<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=90</guid>
		<description><![CDATA[PDF version When we started out thinking about TBB (Threading Building Blocks) and its various implementations in script languages, PHP was a strong contender from day one. PHP is very widely used, and some projects that started out as small pet projects on the side grew to massive sites that have to deal with all [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=90&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://openparallel.files.wordpress.com/2010/09/wordpress-on-hiphop-nov-10.pdf">PDF version</a></p>
<p>When we started out thinking about <strong><a href="http://www.threadingbuildingblocks.org/">TBB</a></strong> (Threading Building Blocks) and its various implementations in script languages, PHP was a strong contender from day one. </p>
<p>PHP is very widely used, and some projects that started out as small pet projects on the side grew to massive sites that have to deal with all the usual scalability problems. Some of them decided to rewrite the whole platform in a new language that scales better -Amazon is one of them; others stick to the language, but try to optimize the performance.</p>
<p>To optimize the performance of PHP there are a number of screws that can be adjusted and the real execution performance of PHP is often only a minor concern. Database performance was a major problem for Yahoo! for a while. The improved art of caching is becoming more and more relevant, with Memcached, Varnish and Redis three very strong products complementing the older version of running Squid in front of the web server farm.</p>
<p>PHP execution speed has for a long time been an area of tuning as well, and the Zend optimizer was for a long time pretty much the only way to speed things up. The Zend optimizer is commercial and does not have a deep market penetration as far as we can tell. The other version of running PHP faster was <strong><a href="http://www.phpcompiler.org/">phc</a></strong>, a PHP compiler that generated an optimized binary. Phc does not have a deep market penetration either and the project is not the most active.</p>
<p>Facebook is one or the largest shops running on a PHP stack in the moment and they were trying to speed up the execution time of PHP with a project called HipHop. </p>
<p>HipHop is Facebook&#8217;s answer to the lack of high performance optimizers for PHP and comes in two versions. The HipHop engine can either statically compile the entire PHP project to a binary that can be run with a HipHop wrapper, or run in a just-in-time compiler mode. The JIT mode is  especially handy for development and debugging and is the mode we used for most of our development and testing.</p>
<p>HipHop takes a PHP source tree and compiles it first to optimized c++ and then compiles c++ to a binary that runs on Linux and some UNIX versions. It uses the GNU tool chain for compilation and makes use of TBB for memory management in the moment only.</p>
<p>As our focus was to improve the execution speed of a well known PHP project, we picked WordPress and ported it over to HipHop. </p>
<p>Our initial tests looked very promising and after further testing the community started patching WordPress as well and we saw patches in the WordPress root that made it possible to compile it on HipHop. As the WordPress team was moving forward new incompatibilities were introduced, but the support for up to date patch sets is improving on a daily basis.</p>
<p>We started measuring performance on a traditional Apache based LAMP stack and compared it to a HipHop based stack. Our development machines were standard Core 2 Duo machines running virtual box with the Ubuntu 10.04 LTS release and either Apache or HipHop and a second VM with our test code. We ran all the tests from the same box between VMs to reduce network latency and then on different physical machines to measure the impact of network overhead and reduce the impact of our monitoring. The network was standard wireless with 54MBit and no other significant traffic than the two VMs communicating with each other. </p>
<p>The test code was using Tsung and generated a Digg style attack with a max of 250 concurrent connections. The emitting side was timed to a total of 70 seconds starting with an interval of 1 second for new users then dropping down to an interval of a quarter of a second and then rising to a second again. Tsung is written in Erlang and can handle lots of concurrent connections in a very efficient way. In fact the impact of running the test code on the same physical machine was not as significant as we had expected, and the results via network were not too different to the ones run locally CPU and memory wise.</p>
<p>The problem with our test set-up was the lack of big enough machines to complete the Apache test entirely to the end. The development VMs ran on 1GB of memory and ran out of memory and started swapping pretty much instantly after starting the test. Even running Apache on a dedicated machine with 2GB of ram the attack maxed out the box pretty fast and the tests were cancelled after about 6 minutes as the box running Apache was not responding anymore.</p>
<p>The results we saw from running Apache was that initially the connection setup is really fast, but then the amount of resources Apache needs to process PHP are stacking up too fast and in the end the server swaps to death.</p>
<p>The next test was to run WordPress on HipHop and we had success with our tests. The time to complete the entire test was 4 minutes 20 seconds and we had at all times memory left on the server. The limiting factor here was the CPU, as far as we can tell.</p>
<p>The results are pretty obvious. Apache cannot be as optimized as a compiled binary version of the PHP project and we expected the HipHop version to run faster than the Apache version. The interesting bit was how fast Apache ran out of resources (which was after about the 100th  connection) and how badly it ground to halt. The VM had to be killed after each test run and the testing code was not able to run through an entire test.</p>
<p>HipHop is a considerable improvement for running PHP projects and we can confirm a significantly reduced memory footprint. The problem seems to be CPU-bound now and we will address this in the next test.</p>
<p><strong>© Open Parallel</strong> White Paper<br />
October 2010 </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/90/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/90/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/90/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=90&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2010/11/01/wordpress-on-hiphop-white-paper/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>
	</item>
		<item>
		<title>parallel_for implementation</title>
		<link>http://openparallel.com/2010/09/08/parallel_for-implementation-project-tbb-hiphop/</link>
		<comments>http://openparallel.com/2010/09/08/parallel_for-implementation-project-tbb-hiphop/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 01:35:17 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=54</guid>
		<description><![CDATA[parallel_for implementation for Project TBB (Intel) / HipHop (Facebook) We tried to performance test the HipHop engine against Apache and then try to see how our changes to the HipHop engine influence the performance of WordPress. We started out to performance test WordPress on Apache and HipHop. To get stats of the pure PHP performance [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=54&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>parallel_for implementation</strong> for Project TBB (Intel) / HipHop (Facebook)</p>
<p>We tried to performance test the HipHop engine against Apache and then try to see how our changes to the HipHop engine influence the performance of WordPress.</p>
<p>We started out to performance test WordPress on Apache and HipHop. To get stats of the pure PHP performance we used a tool called <a href="http://tsung.erlang-projects.org/">tsung</a> that is built for stress testing various protocols including HTTP.</p>
<p>Tsung can be configured to not fetch the entire site with all the static files like stylesheets and images but also to fetch only the PHP interpreted files. As we were not interested in performance numbers about static file serving we decided to only fetch PHP files with tsung.</p>
<p>Tsung can simulate a typical &#8220;viral attack&#8221; where a small number of concurrent connections start to build up load which then builds up to lots of concurrent connections and drops off to a normal base load. We configured tsung to run a maximum of 250 concurrent connections. The connections would be initiated in the simulator in three timed phases the times on the simulator are preset, the time that the server needs to answer all the queries will vary quite a bit as we can see later.</p>
<p>The performance numbers for the initial session connection times were slightly in favor of Apache but with growing numbers of simulated users the performance degraded quite dramatic whereas HipHop even in the just-in-time mode was very stable in terms of request times and resource consumption. The main problem with Apache was the resource consumption which simply maxed out our development servers.</p>
<p>The next step was to prove that our parallel_for implementation worked and actually increased the performance. In order to find a good place to hack WordPress and add our parallel_for to it we found wp_includes/plugin.php. In there is a function called apply_filters which had a for each loop that looked like it could benefit from parallel execution. apply_filters is used quite often in the WordPress code base so it seemed like a good point to get started.</p>
<p>We started off with the WordPress version of <a href="http://github.com/huichen">Hui Chen</a> who has a very current patch set for running WordPress on HipHop and added our patches for the parallel_for. Our HipHop version is a fork off Hui Chen&#8217;s HipHop fork as well. We have a <a href="http://github.com/openparallel/hiphop-php-tbb-patchset">patch set</a> for the parallel_for functionality that we have also pushed to our <a href="http://github.com/openparallel">github account</a>.</p>
<p>Running the benchmarks we can see that our parallel_for version uses less memory and generates less load on the server. It also had lower response times across all measured characteristics in tsung. The graphs also show that the overall time the test needed to complete our simulation was considerably longer for the version without parallel_for.</p>
<p>Lets read the numbers. The parallel_for version needed nearly 100MB less memory to run the test and was close to twice as fast. We moved a lot of work from PHP to the HipHop engine and measured that PHP would greatly benefit from a parallel_for function that runs native in C++. TBB looks like a perfect fit for those problems and our results show this quite nicely.</p>
<p>If we look at the impact this one change had onto the overall performance of WordPress on HipHop we can easily see how a wider implementation of parallel_for would benefit the performance on this stack.</p>
<p>the memory graph:</p>
<p><a href="http://openparallel.files.wordpress.com/2010/09/memory.png"><img src="http://openparallel.files.wordpress.com/2010/09/memory.png?w=300&#038;h=118" alt="" title="memory" width="300" height="118" class="aligncenter size-medium wp-image-55" /></a></p>
<p>the CPU graph:</p>
<p><a href="http://openparallel.files.wordpress.com/2010/09/cpu.png"><img src="http://openparallel.files.wordpress.com/2010/09/cpu.png?w=300&#038;h=149" alt="" title="cpu" width="300" height="149" class="aligncenter size-medium wp-image-56" /></a></p>
<p><strong></strong></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=54&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2010/09/08/parallel_for-implementation-project-tbb-hiphop/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>

		<media:content url="http://openparallel.files.wordpress.com/2010/09/memory.png?w=300" medium="image">
			<media:title type="html">memory</media:title>
		</media:content>

		<media:content url="http://openparallel.files.wordpress.com/2010/09/cpu.png?w=300" medium="image">
			<media:title type="html">cpu</media:title>
		</media:content>
	</item>
		<item>
		<title>Paper Accepted for LCA2011!</title>
		<link>http://openparallel.com/2010/08/13/paper-for-lca2011/</link>
		<comments>http://openparallel.com/2010/08/13/paper-for-lca2011/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 02:34:32 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=41</guid>
		<description><![CDATA[We are pleased to confirm that our paper submitted to Linux Conference Australia (LCA2011) has been accepted! Here is the abstract with links Integration of Intel&#8217;s Threading Building Blocks into Facebook&#8217;s HipHop for PHP Hardware companies take the lead by shipping only Multicore processors as the standard for the industry. It is their solution to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=41&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We are pleased to confirm that our paper submitted to Linux Conference Australia (<a href="http://lca2011.linux.org.au/">LCA2011</a>) <strong>has been accepted!</strong></p>
<p>Here is the abstract with links<br />
<strong><br />
Integration of Intel&#8217;s Threading Building Blocks into Facebook&#8217;s HipHop for PHP</strong></p>
<p>Hardware companies take the lead by shipping only <a href="http://en.wikipedia.org/wiki/Multi-core_processor">Multicore</a> processors as the standard for the industry. It is their solution to the power wall: reducing the operating voltage while making transistors smaller and faster. By using Multicore chips they will avoid that your latest laptop will burn your lap. Chip designers are concentrated now on gathering together lots of cores in a single chip: 4 cores are the norm today and chips with dozens and even hundreds of cores are already available or to be launched in the following few years.<br />
But chipmakers forgot to check if the software that will exploit this massive processing power was available. Programmers now need to invent ways to write applications that take advantage of this increasing number of cores without spending too much time developing them or lowering its quality and performance. Not to mention how decades of legacy code will perform in the new hardware. (Read <a href="http://spectrum.ieee.org/computing/software/the-trouble-with-multicore">The Trouble with Multicore</a>)</p>
<p>Is this context we established Open Parallel, a group that is working to create an ecosystem of developers, academia and industry to further multicore processing into the mainstream. The presentation will show the evolution and milestones that happened since 2005, but will focus on a current project: <a href="http://openparallel.wordpress.com/2010/08/13/tbb-into-hiphop/">TBB into HipHop</a>.</p>
<p>“<a href="http://www.threadingbuildingblocks.org/">Intel® Threading Building Blocks</a> (TBB) is an open source library that helps to take advantage of multicore processor performance. It offers an approach to expressing parallelism in a C++ program.”</p>
<p>“<a href="http://developers.facebook.com/blog/post/358">HipHop for PHP</a> transforms PHP source code into highly optimized C++. It was developed by Facebook and was released as open source in early 2010.”</p>
<p>At the beginning of 2010 we teamed up with <a href="http://www.intel.com">Intel</a> to get the word out about their TBB.  Around that time, Facebook released their HipHop engine. We agreed to implement TBB into the HipHop engine as a first project to get our team working on TBB. We are now at a stage where we contributed back code to the community with some TBB features exposed and ready to implement in PHP projects via the HipHop engine.</p>
<p>In July 2010 we announced our HipHop branch/extension that aims to push the integration of TBB&#8217;s library into HipHop beyond the already utilized data structures (such as the<br />
concurrent_hash_map). In particular we are looking to get some parallel functionality exposed to PHP itself through this extension. We have already had some initial success with a parallel_for implementation that can be used from PHP scripts using a familiar API (Aligned with the C++ API but slightly modified to better suit PHP style). </p>
<p>Our repository can be found at http://github.com/OpenParallel/hiphop-php, the extension is simply named tbb, and can be found in the usual paths in the source tree. </p>
<p>This experiment gave us some deeper insights into how parallel programming with TBB works and how we can start helping others use these technologies. At the time of writing the abstract, we are porting WordPress to HipHop with the new TBB-HipHop commands. We aim to show our code and full results at LCA2011</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=41&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2010/08/13/paper-for-lca2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>
	</item>
		<item>
		<title>TBB into HipHop</title>
		<link>http://openparallel.com/2010/08/13/tbb-into-hiphop/</link>
		<comments>http://openparallel.com/2010/08/13/tbb-into-hiphop/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 01:05:06 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[TBB - HipHop]]></category>

		<guid isPermaLink="false">http://openparallel.wordpress.com/?p=22</guid>
		<description><![CDATA[Hello HipHop users and developers! Today July 26, 2010 we announce our HipHop branch/extension that aims to push the integration of Intel’s Threading Building Blocks library into HipHop beyond the already utilized data structures (such as the concurrent_hash_map). In particular we are looking to get some parallel functionality exposed to PHP itself through this extension. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=22&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Hello HipHop users and developers!</p>
<p>Today July 26, 2010 we announce our HipHop branch/extension that aims to push the integration of <a href="http://www.threadingbuildingblocks.org/">Intel’s Threading Building Blocks</a> library into <a href="http://wiki.github.com/facebook/hiphop-php/">HipHop</a> beyond the already utilized data structures (such as the concurrent_hash_map).<br />
In particular we are looking to get some parallel functionality exposed to PHP itself through this extension.</p>
<p>We have already had some initial success with a parallel_for implementation that can be used from PHP scripts using a familiar API (Aligned with the C++ API but slightly modified to better suit PHP style).</p>
<p>Our <a href="http://github.com/OpenParallel/hiphop-php">repository</a> can be found at http://github.com/OpenParallel/hiphop-php, the extension is simply named tbb, and can be found in the usual paths in the source tree.</p>
<p>The thread <a href="http://groups.google.com/group/hiphop-php-dev/browse_thread/thread/a62646545edac173">TBB in HipHop</a> shows the discussion with Facebook engineers about our work</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=22&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2010/08/13/tbb-into-hiphop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/3c09aff1cfefb4befee567d1306b2d3e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">multicoreblog</media:title>
		</media:content>
	</item>
	</channel>
</rss>
