<?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>Sun, 25 Mar 2012 07:41:59 +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>Recommended Steps for a Corporate Multicore Strategy</title>
		<link>http://openparallel.com/2012/03/25/recommended-steps-for-a-corporate-multicore-strategy/</link>
		<comments>http://openparallel.com/2012/03/25/recommended-steps-for-a-corporate-multicore-strategy/#comments</comments>
		<pubDate>Sun, 25 Mar 2012 07:32:47 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[Multicore World 2012]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=292</guid>
		<description><![CDATA[Multicore is unstoppable: the economics are driving it. Therefore we need software to exploit the huge opportunities that these new architectures offer. This is a permanent change that affects all computing. Even if you are a decision maker in your organization, maybe you did not notice it, but someone in your payroll should be paying attention [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=292&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Multicore is unstoppable: the economics are driving it. Therefore we need software to exploit the huge opportunities that these new architectures offer. </strong>This is a permanent change that affects all computing.</p>
<p>Even if you are a decision maker in your organization, maybe you did not notice it, but someone in your payroll should be paying attention to it.</p>
<p>Or worse, your competitors are doing it&#8230;</p>
<p>Based on years of working in Multicore and Parallel Computing Open Parallel presents these recommendations for a basic <strong>Corporate Multicore Strategy</strong></p>
<ul>
<li><em><strong>Staff Survey</strong></em></li>
</ul>
<p>Start by doing an in-house survey about your capabilities. Maybe some of your developers are active Open Source Software (OSS) contributors in their spare time and have some of the skills that you will soon need.</p>
<p>Even better, they know more people that are keen to help</p>
<ul>
<li><em><strong>Hardware replacement</strong><strong> </strong></em></li>
</ul>
<p>Analyze which is the right Multicore hardware for you and how it will scale in the foreseeable future. Remember that vendors are ready to sell. Learn more about the opportunities offered through the Cloud.</p>
<ul>
<li><em><strong>Optimization</strong></em></li>
</ul>
<p>Start to think about everything that can be optimized: floor space, energy consumption, maintenance, performance, and code. Multicore will be able to give you a positive answer to some if not to all of them.</p>
<ul>
<li><em><strong>New Projects and Products</strong></em></li>
</ul>
<p>Multicore is not only about doing the same things faster. It is also about adding more options and features to the same problem with much more reliability. Think and explore different approaches to your markets, and don&#8217;t constrain your imagination. Dream about an option that was not possible before. You will be probably able to make it happen now</p>
<ul>
<li><em><strong>Training in Parallel Programming</strong></em></li>
</ul>
<p>Start now to discuss with your staff how to train them in the new software techniques. If you need to create a Chair in parallel programming at the local university, start to do it now. It will be a good investment, and not just for marketing reasons</p>
<ul>
<li><em><strong>Keep an eye on Universities</strong></em></li>
</ul>
<p>Some of them have been doing research on parallel programming for decades. They can have different models, experience in strange languages and maybe their recommendation is not what you are expecting. But their perspective and global network of talent is what you need to look forward 5-10 years in your strategy</p>
<ul>
<li><em><strong>New Management Models</strong></em></li>
</ul>
<p>Be prepared to use other&#8217;s innovations as well as their source code</p>
<p>Be prepared that others will use yours.</p>
<p>Learn about Open Innovation</p>
<p>Look at new management models, either from fast growing companies or how OSS companies are moving ahead or how others are failing to deal with the OSS model</p>
<p>Do not hesitate to talk to multicore companies from New Zealand and abroad; confusion is everywhere and they will be happy to hear your experiences in exchange for theirs. There is room for everyone at this stage, but move fast: this window of opportunity won&#8217;t last forever</p>
<ul>
<li><em><strong>Look outside your company</strong></em></li>
</ul>
<p>You will need to do joint ventures with IP providers. Be prepared to accept that independently of the country of origin, they can be better than anything else that exists in your own country. Innovation has no boundaries (and usually happens in the fringe)</p>
<ul>
<li><em><strong>Piggyback on vendor&#8217;s ecosystems</strong></em></li>
</ul>
<p>They designed these chips and they need that software developers learn how to properly unveil their potential. They will do whatever they can to help sell your solutions, if this mean that they can keep their customers happy and sell more hardware.</p>
<p>They are learning to build solutions in a niche too, but it is not in their core DNA; it&#8217;s easier for them to partner with you.</p>
<p>Do not waste resources trying to create your own channels; look for the best synergy in a major vendor (or better, in a pool of them) and go for that ecosystem.</p>
<p>This is a paradigm shift in the market that could take 10-15 years to mature. Better to start now.</p>
<p>Good luck in your journey.</p>
<p>And if you want to discuss it with us, <a href="http://openparallel.com/contact-us/" target="_blank">contact</a> Open Parallel now. Or check <strong><a href="http://openparallel.com/about/">how Open Parallel</a></strong> can help you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/292/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/292/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/292/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=292&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2012/03/25/recommended-steps-for-a-corporate-multicore-strategy/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>Your Chance to Explore the Parallel Universe</title>
		<link>http://openparallel.com/2012/03/10/your-chance-to-meet-the-serial-killers-and-explore-the-parallel-universe/</link>
		<comments>http://openparallel.com/2012/03/10/your-chance-to-meet-the-serial-killers-and-explore-the-parallel-universe/#comments</comments>
		<pubDate>Sat, 10 Mar 2012 01:29:30 +0000</pubDate>
		<dc:creator>multicoreblog</dc:creator>
				<category><![CDATA[Multicore World 2012]]></category>

		<guid isPermaLink="false">http://openparallel.com/?p=274</guid>
		<description><![CDATA[Because they’re coming to Wellington later this month, so you can explore it. And maybe you should, especially if you’re someone involved in IT, like a CIO, a CTO or a software engineer/developer. Something’s happened in the chip world. A change so fundamental it’s created opportunities to do everything faster, better and cheaper – across [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=274&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Because they’re coming to Wellington later this month, so you can explore it.</p>
<p>And maybe you should, especially if you’re someone involved in IT, like a CIO, a CTO or a software engineer/developer.</p>
<p>Something’s happened in the chip world. A change so fundamental it’s created opportunities to do everything faster, better and cheaper – across the board.</p>
<p>Serial computing is dead. It’s just that most people don’t know it yet. But it is. Intel knows that. So does Google. And ARM, the UK company whose processors drive 90% of the world’s smartphones. Weta Digital’s in the new loop, along with the scientists pitching to have the massive Square Kilometre Array (SKA) located in Australasia.</p>
<p>For all of them, serial computing is and old technology, killed by parallel processing. Parallel processing (PP) relies on newgen chips, not with a single core but with many, even thousands of them. For most people, though, the technology’s less important than the possibilities. Which are immense, according to PP’s champions. Many of whom are coming to Wellington this month for <strong><a href="http://multicoreworld.com/index.php/mw/mw12">Multicore World 2012</a></strong>, New Zealand’s first heads-up on this IT revolution.</p>
<p><strong><a href="http://multicoreworld.com/index.php/mw/index/pages/view/Speakers">Speakers</a></strong> at Multicore World (March 27-28) include Intel Software Director, <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#reinders">James Reinders</a> and <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#mattson">Dr Tim Mattson</a> from Intel Labs; <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#goodacre">John Goodacre</a>, Director, ARM Processor Division; Weta Digital’s CTO, <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#sylwan">Sebastian Sylwan</a>; <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#moir">Dr Mark Moir</a> from Oracle Labs; Microsoft’s <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#laksberg">Artur Laksberg</a> as well as the CSIRO’s <a href="http://multicoreworld.com/index.php/mw/index/pages/view/bios#cornwell">Dr Tim Cornwell</a> and speakers from the Universities of Melbourne and Otago.</p>
<p>RIP single core CPU? Yes, and we should be grateful for that. And, whether you’re a convert or a sceptic, this is a great opportunity to <strong><a href="http://multicoreworld.com/index.php/mw/mw12/schedConf/program">explore the parallel universe</a></strong>. Multicore World 2012 has been put together by New Zealand company, <strong>Open Parallel</strong> and there’s info and <strong><a href="http://multicoreworld.com/index.php/mw/mw12/schedConf/registration">registration details</a></strong> on the website <a href="http://multicoreworld.com/index.php/mw/mw12">http://MulticoreWorld.com</a></p>
<div id="ilikeposts"></div>
<div></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/openparallel.wordpress.com/274/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/openparallel.wordpress.com/274/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/openparallel.wordpress.com/274/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=openparallel.com&amp;blog=12304933&amp;post=274&amp;subd=openparallel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://openparallel.com/2012/03/10/your-chance-to-meet-the-serial-killers-and-explore-the-parallel-universe/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>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>
	</channel>
</rss>
