<?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>Big Problems, Crappy Computers</title>
	<atom:link href="http://clusterfudge.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://clusterfudge.wordpress.com</link>
	<description>Conquering the world, one thread at a time.</description>
	<lastBuildDate>Wed, 14 Dec 2011 13:17:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='clusterfudge.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Big Problems, Crappy Computers</title>
		<link>http://clusterfudge.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://clusterfudge.wordpress.com/osd.xml" title="Big Problems, Crappy Computers" />
	<atom:link rel='hub' href='http://clusterfudge.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Moving&#8230;</title>
		<link>http://clusterfudge.wordpress.com/2007/10/08/moving/</link>
		<comments>http://clusterfudge.wordpress.com/2007/10/08/moving/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 01:20:57 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/10/08/moving/</guid>
		<description><![CDATA[Since my last post, I&#8217;ve moved from the inland northwest to the beautiful silicon valley. As such, the project mentioned in my previous and long past post has been inherited by new employer. Its right up their alley, and since they&#8217;re willing to pay for me to work on it, I can&#8217;t complain. Also since [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=17&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Since my last post, I&#8217;ve moved from the inland northwest to the beautiful silicon valley. As such, the project mentioned in my previous and long past post has been inherited by new employer. Its right up their alley, and since they&#8217;re willing to pay for me to work on it, I can&#8217;t complain.</p>
<p>Also since my last post, I&#8217;ve moved my blog to a new site (which I&#8217;m actually hosting myself, so I hope my server doesn&#8217;t explode on some magical good day).</p>
<p>The new blog (which has already imported all the posts from this blog) can be found at http://clusterfudge.endoftheinternet.org .</p>
<p>Thanks for those of you who are still subscribed to RSS after 9 months of no posts, I appreciate your laziness.</p>
<p>This will be the last post here.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=17&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/10/08/moving/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>A New Project</title>
		<link>http://clusterfudge.wordpress.com/2007/01/11/a-new-project/</link>
		<comments>http://clusterfudge.wordpress.com/2007/01/11/a-new-project/#comments</comments>
		<pubDate>Thu, 11 Jan 2007 20:45:03 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Parallel Processing]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/01/11/a-new-project/</guid>
		<description><![CDATA[Now that my spiffy new cluster is finally up and running, I&#8217;m taking on a new project. Also, I&#8217;m taking on hands. If there&#8217;s anyone out there that is good at multithreaded-programming, databases, indexing, or just programming in general, I may need your help! I&#8217;m working on a new type of knowledge engine, which I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=16&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Now that my spiffy new cluster is finally up and running, I&#8217;m taking on a new project. Also, I&#8217;m taking on hands. If there&#8217;s anyone out there that is good at multithreaded-programming, databases, indexing, or just programming in general, I may need your help!</p>
<p>I&#8217;m working on a new type of knowledge engine, which I have yet to name, but it has four basic parts. It will have its own data delivery system (which for now is just a url scraper and wget, but will later use AI techniques to further its intelligence), an indexer, a grouping analysis on the index, and then an HTM framework that has definitely yet to be designed. I&#8217;m going to start small (indexing a fraction of the web as I only have about 1tb of storage to work with, though my plan for indexing will be significantly smaller than the data indexed itself), and scale up from there, if at all possible. There will be statisctical analysis, heavy distributed database work, some theoretical AI techniqes, and stupid amount of multi-threading.</p>
<p>Possible applications of this include, but are not limited to:</p>
<p>Search Engines</p>
<p>Speech/image recognition</p>
<p>Predictive Trend Analysis</p>
<p>And many more!</p>
<p>If this project sounds even vaguely interesting to you, leave a psot on this board and I will contact you over the weekend. I&#8217;ll be setting up a repository on sourceforge soon.</p>
<p>Thanks!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=16&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/01/11/a-new-project/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>Build Your Own Load Balancing Beowulf Cluster from Economy PCs, Cont&#8217;d</title>
		<link>http://clusterfudge.wordpress.com/2007/01/10/build-your-own-load-balancing-beowulf-cluster-from-economy-pcs-contd/</link>
		<comments>http://clusterfudge.wordpress.com/2007/01/10/build-your-own-load-balancing-beowulf-cluster-from-economy-pcs-contd/#comments</comments>
		<pubDate>Wed, 10 Jan 2007 17:47:04 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Parallel Processing]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/01/10/build-your-own-load-balancing-beowulf-cluster-from-economy-pcs-contd/</guid>
		<description><![CDATA[So, apparently there&#8217;s a lot of really angry people that read Digg on a daily basis, some with some justifiably angry comments, and others with some not as justifiably angry comments. So right now, I&#8217;m going to address the most common comments. A dual core 2.66ghz doesn&#8217;t mean you have a 5.32ghz box: Bravo, you&#8217;ve [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=15&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, apparently there&#8217;s a lot of really angry people that read Digg on a daily basis, some with some justifiably angry comments, and others with some not as justifiably angry comments. So right now, I&#8217;m going to address the most common comments.</p>
<p><strong>A dual core 2.66ghz doesn&#8217;t mean you have a 5.32ghz box:</strong></p>
<p>Bravo, you&#8217;ve discovered that I was glossing over some deep parallel processing theory. Two machines or cores will not get through a single process at the combined speed of their processors, as you will only be using one of the processors at a time. However, if you are to break your tasks into multiple processes, the work can be done with each process being given its processor or core. This is the brilliance behind parallel processing. You are not doing any particular work faster, you are just doing a bunch of it at the same time. With a little simple algebra, you can see that work being done brings your box&#8217;s or cluster&#8217;s total productivity average to roughly the equivalent of the SUM OF ALL CORES.</p>
<p>Moving on&#8230;</p>
<p><strong>T5212 machines are bad machines:</strong></p>
<p>Now, I cannot personally say anything negative about these machines, though it is entirely possible that they are a large steaming pile of crap and I&#8217;ve gotten very lucky with mine (I have 5). Now it is not important that you use these types of machines in your cluster. It is far more important that you use the processors within and compatible hardware, but let me speak to the primary issue: Intel Core and Core2 processors do not work with openMosix 2.4 . That&#8217;s all there is to it. You&#8217;re also going to run into freaky problems with AMD 64 bit systems, so I&#8217;d recommend you stay away from those as well.  The basic gist is that this software will run on any system with a Pentium D class processor or lower, and X-Windows (if you want it) requires about 64mb of ram to run properly. My suggestion of the T5212 was out of good experiences.</p>
<p>Now diggers, please stop being so angry!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=15&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/01/10/build-your-own-load-balancing-beowulf-cluster-from-economy-pcs-contd/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>Building your own Load Balancing Beowulf Cluster from Economy PC&#8217;s</title>
		<link>http://clusterfudge.wordpress.com/2007/01/09/building-your-own-load-balancing-beowulf-cluster-from-economy-pcs/</link>
		<comments>http://clusterfudge.wordpress.com/2007/01/09/building-your-own-load-balancing-beowulf-cluster-from-economy-pcs/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 20:14:15 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Parallel Processing]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/01/09/building-your-own-load-balancing-beowulf-cluster-from-economy-pcs/</guid>
		<description><![CDATA[NOTE: If you find yourself angry after reading this post, read this first. This seems difficult, at first glance, but really, it&#8217;s not. At all. From the time you get all your hardware plugged in to the time you&#8217;re doing some massive parallel processing, depending on your needs, can be anywhere from 2 hours to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=14&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>NOTE: If you find yourself angry after reading this post, read <a href="http://clusterfudge.wordpress.com/2007/01/10/build-your-own-load-balancing-beowulf-cluster-from-economy-pcs-contd">this</a> first.</strong></p>
<p>This seems difficult, at first glance, but really, it&#8217;s not.</p>
<p>At all.</p>
<p>From the time you get all your hardware plugged in to the time you&#8217;re doing some massive parallel processing, depending on your needs, can be anywhere from 2 hours to 10 minutes. And this simple guide will help you get there.</p>
<p><strong>Get the Hardware</strong></p>
<p>Now, mind you, I&#8217;m not trying to do this as cheaply as possible, but I am trying to do this with as much bang for your buck as possible. These are the things you need to get.</p>
<p>PCs: Duh, kinda the barebones necessity in a cluster, and I have a recommendation: eMachines T5212.  It&#8217;s got a Pentium 805 Dual core Processor with each core running at 2.66ghz, for a total of 5.32ghz per machine, and 2x1MB L2 cache, which while not stellar, is pretty respectable. It&#8217;s also got 1gb of RAM and a 200gb hard-drive, so storage problems go away pretty quickly too. There&#8217;s a lower model with half the ram and a smaller hard drive, the T5216, but I need the RAM, so I go with the T5212. At Best Buy and other stores, these run about 534.99 for just the tower. Mind you I have chosen this box for the hardware&#8217;s compatibility to the software we&#8217;ll be using in a later step.</p>
<p>Network Cables: You&#8217;re going to need at least one for each PC, and probably a couple more if you have an external device or PC acting as your DHCP server and/or gateway.</p>
<p>Network Hardware: You&#8217;re going to need a switch big enough for all your PCs to connect (or a  series of small ones that you can daisy chain together). Life will also be a lot easier if you have a <strong>ONE</strong> DHCP server for all of your machines. All the machines need to be on the same IP subnet, but don&#8217;t need to be on the same network switch or in the same geographic area.</p>
<p><strong>Setting Up your Hardware:</strong></p>
<p>In my personal configuration, I have a small network appliance that acts as a dhcp server, router, and print server, so I use that as the base of my networking needs. I then have a series of smaller switches which have 1 (count them, 1) link total back to the DHCP server. This is important for me, so that network traffic on the cluster doesn&#8217;t bog down the rest of my home network. How else could I play Halo while factoring 100 digit non-prime numbers? This will also help your cluster have fewer jumps between nodes.</p>
<p><strong>Your Software:</strong></p>
<p>I strongly recommend the use of ClusterKnoppix. It&#8217;s a great tool, and is very stable. It uses the 2.4 debian kernel, and has openMosix installed and configured for auto-detect (which means nodes are essentially plug-and-play, though not really, and I&#8217;ll discuss why later).  You&#8217;ll need one copy for each box, unless you choose to commit the knoppix image to the hard-drive of each machine. It&#8217;s not necessary, but it may be easier if you don&#8217;t have a stack of CDR&#8217;s at your disposal.</p>
<p><strong>Booting up the Cluster:</strong></p>
<p>This is probably the easiest part of the process. Place a ClusterKnoppix CD in each box, and boot it up. I can vouch that this hardware is compatible and you won&#8217;t have any issues loading, so now you&#8217;re ready to work! <strong>NOTE:</strong> If you do this with other hardware, I can&#8217;t guarantee things are going to work so swimmingly, and I am nowhere near qualified to help you trouble-shoot your hardware.  If you have a DHCP server and DNS somewhere on your network, your cluster should be live to the internet, so you can pick up your code off other boxes on the network or from a CVS server somewhere out there in the intarwebs. There is a version of GCC and G++, though I can&#8217;t think of the version numbers off the top of my head (feel free to check the link on the side of this blog, I&#8217;m sure its there somewhere).</p>
<p><strong>Making your Mosix Cluster a Beowulf</strong></p>
<p>There&#8217;s two methods, but they essentially do the same thing. The first is to commit a knoppix image to the hard-drive of one of your boxes. There are tools for formatting and repartitioning the harddrive in the utilities menu in KDE (I think it&#8217;s GTPart that&#8217;s installed, as well as a few others). Follow the instructions from http://www.knoppix.org or from any other live-distribution site (they&#8217;re a little extensive, else I would include them here). The second is to commit an alteration image to your hard disk, and then boot knoppix from this alteration image (a new feature to Knoppix that I&#8217;ve never used, so once again, check the intarwebs).</p>
<p>Either method you choose, I would strongly recommend you use LAM/MPI (or openMPI if you so strongly desire the biggest and baddest). The nice thing about this setup, is that you do not need to configure each machine with lam, or configure your root node with machine lists of all the other nodes in the network. All you have to do is create multiple processes on the node that has MPI installed, and openMosix will balance the cluster. It&#8217;s truly beautiful. In order to run a process in mpi, follow these simple instructions (for lam):</p>
<p>bash$: lamboot</p>
<p>&lt;some output here&gt;</p>
<p>bash$: mpirun -np (some number of processes) &lt;your executable name&gt; &lt;your arguments&gt;</p>
<p>That&#8217;s it. You don&#8217;t even need to compile your binaries using the MPI compilers, assuming they don&#8217;t use the MPI libraries. If they do, use mpic++ or mpicc as you would g++ or gcc, respectively.</p>
<p>I&#8217;d love to hear success stories, so please, leave comments!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=14&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/01/09/building-your-own-load-balancing-beowulf-cluster-from-economy-pcs/feed/</wfw:commentRss>
		<slash:comments>98</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>Load Balancing Beowulf Cluster</title>
		<link>http://clusterfudge.wordpress.com/2007/01/07/load-balancing-beowulf-cluster/</link>
		<comments>http://clusterfudge.wordpress.com/2007/01/07/load-balancing-beowulf-cluster/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 07:22:34 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[GANet Implementation]]></category>
		<category><![CDATA[Parallel Processing]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/01/07/load-balancing-beowulf-cluster/</guid>
		<description><![CDATA[For my clustering solutions, I&#8217;ve chosen live cd&#8217;s (clusterknoppix to be specific). I purchased about $2500 in old hardware (Pentium 850 Dual Core&#8217;s with 1GB of RAM running at 2.66ghz per core), and combining that with my existing hardware and I end up with a cluster with 15 cores running combined at a little over [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=13&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For my clustering solutions, I&#8217;ve chosen live cd&#8217;s (clusterknoppix to be specific). I purchased about $2500 in old hardware (Pentium 850 Dual Core&#8217;s with 1GB of RAM running at 2.66ghz per core), and combining that with my existing hardware and I end up with a cluster with 15 cores running combined at a little over 40ghz and 6GB of ram.  It&#8217;s not too shabby, if I do say so myself. It is an openMosix based cluster, so the load balancing is awesome. I&#8217;ve been using it thus far to do some prime number factoring.</p>
<p>One of the nice things about mosix clustering is its ease of use, while one of the nice things about beowulf clustering is the ease of data sharing and segregation. I&#8217;ve discussed previously in <a href="http://clusterfudge.wordpress.com/2007/01/07/ga-in-parallel-some-more-interesting-thoughts/" rel="bookmark">GA In Parallel, some more interesting thoughts&#8230;  </a>that load balancing is a problem with Beowulf clusters, and even with my crazy scheme of Multi-Level Hybrid Clusters (MLHC). The basic idea behind MLHC is to create a beowulf cluster whose slave nodes are actually mosix clusters. It was an invention more of necessity than anything else, but it solved my problem nonetheless.</p>
<p>My plan now is to install LAM/MPI (beowulf software, essentially) onto one of my mosix nodes and then create all of the MPI processes on a single node and allow the mosix kernel to load-balance the cluster. At that point, I&#8217;ll have a load-balanced beowulf cluster. My main issue until now has been creating multiple instances of complete populations of my GANet software, because a single member of a population can be up to 100mb. Since some of my nodes have only 256mb of RAM, they can&#8217;t even run one instance of GANet with a decent sized population. The solution then is to create multiple small populations that share information, with each population being small enough to run on a single node. Also, I&#8217;ve learned that my population members don&#8217;t need to be quite as large as I&#8217;m making to start, especially considering that I allow them to grow dynamically.</p>
<p>Today&#8217;s lesson, beowulf is nice, but mosix load-balances. So take both.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=13&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/01/07/load-balancing-beowulf-cluster/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>GA In Parallel, some more interesting thoughts&#8230;</title>
		<link>http://clusterfudge.wordpress.com/2007/01/07/ga-in-parallel-some-more-interesting-thoughts/</link>
		<comments>http://clusterfudge.wordpress.com/2007/01/07/ga-in-parallel-some-more-interesting-thoughts/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 06:33:51 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>
		<category><![CDATA[Genetic Algorithms]]></category>
		<category><![CDATA[Parallel Processing]]></category>

		<guid isPermaLink="false">http://clusterfudge.wordpress.com/2007/01/07/ga-in-parallel-some-more-interesting-thoughts/</guid>
		<description><![CDATA[Oooooooooh, PRETTY!!!! So for the longest time, I&#8217;ve been desiring a beowulf architecture, but setting up the cluster has always been an issue. The bigger issue, however, is thread synchronization. The nice thing about clusters, is you can put them together with whatever crappy machines you have lying around. The not-as-nice thing about clusters is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=12&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Oooooooooh, PRETTY!!!!</p>
<p>So for the longest time, I&#8217;ve been desiring a beowulf architecture, but setting up the cluster has always been an issue. The bigger issue, however, is thread synchronization. The nice thing about clusters, is you can put them together with whatever crappy machines you have lying around. The not-as-nice thing about clusters is that you tend not to have 20 identical machines lying around.</p>
<p>With the standard MPI solutions, a process is created permanently on a node, typically with a set amount of work to do before exiting or requesting more work. There are some simple techinques you can use to try to sync everything up, and by simple, I mean archaic. You could (though I truly would never recommend this) balance the workload by hand (using arithmetic, God forbid) when developing, timing out each machine and such. There are more sophisticated methods, which I personally would recommend.</p>
<p><strong>Thread Pooling</strong></p>
<p>The basic idea behind this is to create a simple server/client architecture, where the server hosts a data set, and the clients request an element from the set, process it, and return the result. Clients may end up waiting while the servers has no data to be processed.</p>
<p><strong>Data Pooling</strong></p>
<p>This is very similary to thread pooling, but applied to the Genetic Algorithm. Imagine your server as having a population of whatever you&#8217;re working on, and the clients occaisionally pull the top few members from the population and working with them, then submitting results back to the population. Since there is always a full population in the server, clients will not hang up waiting for the server to have work for them to do. This offers complete asyncrhonization without delays (except perhaps server overload).</p>
<p>Each of these methods have are heavy on the implementation side, so I&#8217;d like to try a cluster-based solution. Tune in next time!</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=12&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2007/01/07/ga-in-parallel-some-more-interesting-thoughts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>My research&#8230;</title>
		<link>http://clusterfudge.wordpress.com/2006/07/14/my-research/</link>
		<comments>http://clusterfudge.wordpress.com/2006/07/14/my-research/#comments</comments>
		<pubDate>Fri, 14 Jul 2006 17:40:50 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[GANet Implementation]]></category>
		<category><![CDATA[GANet Theory]]></category>

		<guid isPermaLink="false">https://clusterfudge.wordpress.com/2006/07/14/my-research/</guid>
		<description><![CDATA[So, these past couple of years, there&#8217;s been a few big courses I took to help me acquire the knowledge necessary for doing any kind of significant computer science research, and I can only recommend that all CS students take these: 1) Operating Systems If you&#8217;re going to do any kind of research, chances are [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=10&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, these past couple of years, there&#8217;s been a few big courses I took to help me acquire the knowledge necessary for doing any kind of significant computer science research, and I can only recommend that all CS students take these:</p>
<p>1) Operating Systems</p>
<p>If you&#8217;re going to do any kind of research, chances are your software is going to run for a long time, and is going to be a series of complicated processes, as opposed to your standard &#8220;Hello, world!&#8221; program.</p>
<p>Things I got:</p>
<p>Parallel processing, inter-process communication, sheduling, file systems.</p>
<p>2) Data Communications</p>
<p>Again, like OS, if you&#8217;re going to do research, chances are you&#8217;re going to need more than one machine, so it helps to know how to do networking. This was the class that gave me my basic foundation of knowledge to build my cluster.</p>
<p>Things I got:</p>
<p>Network structure, network administration, basic sockets programming, client-server architecture, multi-threaded server design.</p>
<p>3) Artificial Intelligence</p>
<p>There were two courses to our AI program at GU, and I feel like they didn&#8217;t hold the same weight. The first studied classical AI, which can be summed up as:</p>
<p>If A, then B. A. Thus, B.</p>
<p>Not particularly stimulating, am I right? There was a bit of game theory, and some state space traversal, but nothing too horribly complicated. And for some reason, none of the state-space stuff we generated worked real well anyways&#8230;.</p>
<p>Things I got:</p>
<p>Overview of Genetic Algorithms, introduction to neural networks. Overview of past failures of AI.</p>
<p>Now I suppose AI isn&#8217;t a course that you really need to be a well rounded CS student, but I enjoyed it.</p>
<p><b>What I was supposed to be talking about&#8230;</b></p>
<p>My research; It&#8217;s complicated, kinda convoluted, and totally time consuming. Good thing I don&#8217;t have a life. As I&#8217;ve discussed before, GA is a great tool for optimization. As I haven&#8217;t discussed before, neural networks are a great tool for recognizing patterns. Neural networks can come in many different structures, and the plan of my research is to use GA to &#8220;evolve&#8221; the structure of a neural network, based on how well it learns a given training set. I&#8217;ve yet to decide what kind of training set I will use, but I&#8217;m leaning towards natural language processing.</p>
<p>A neural network can have several layers, and I&#8217;ve chosen to represent the links between each layer as a two-dimensional array of booleans (true signifying that a link exists, false that one does not). Since there will be multiple layers, then there will also be more than one of these two-dimensional arrays, thus giving birth to the three-dimensional boolean array that is the bulk of my genome (bool *** adjacencyMatrices).</p>
<p>I would love to use the standard templated 3DArray_Genome from GALib, but alas, I wanted more scalability. The adjacencyMatrices have the ability to &#8220;grow&#8221; in number of layers (height), and number of nodes in any individual layer (width). In 3DArray_Genome, genomes are of a fixed size as of GA initialization.</p>
<p>I suppose that&#8217;s enough of a start for now, so until next time&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=10&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2006/07/14/my-research/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>Genetic Algorithms, not perpendicular, but&#8230;.</title>
		<link>http://clusterfudge.wordpress.com/2006/06/21/genetic-algorithms-not-perpendicular-but/</link>
		<comments>http://clusterfudge.wordpress.com/2006/06/21/genetic-algorithms-not-perpendicular-but/#comments</comments>
		<pubDate>Wed, 21 Jun 2006 05:29:19 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Genetic Algorithms]]></category>

		<guid isPermaLink="false">https://clusterfudge.wordpress.com/2006/06/21/genetic-algorithms-not-perpendicular-but/</guid>
		<description><![CDATA[PARALLEL! It&#39;s a pun. Get over it. Anyways, now it&#39;s time to talk a little parallel GA theory. There&#39;s a lot of variations, but essentially two different ways to parallelize the genetic algorithm. Single GA Parallelism GA is a great algorithm for parallelization. During the evaluation step, where each member of the population is given [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=9&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>PARALLEL!</p>
<p>It&#39;s a pun. Get over it. Anyways, now it&#39;s time to talk a little parallel GA theory. There&#39;s a lot of variations, but essentially two different ways to parallelize the genetic algorithm.</p>
<p><b>Single GA Parallelism</b></p>
<p>GA is a great algorithm for parallelization. During the evaluation step, where each member of the population is given a value, the same function is being called on each member of the population, one at a time. This is referred to as <b>embarrassingly parallel</b>, in that parallelizing the process takes no separation of information or sophisticated communication between function calls. All that is required is that each function call be given its own process in which to operate. Here is some sample c-like pseudo code:</p>
<p>void evaluatePopulation(pop)<br />
{<br />
&nbsp;&nbsp;&nbsp; for( each member of the population i )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; create pipe[i]<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; open(pipe[i]);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; for( each member of the population j )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fork();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(this is the child process)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if(I am a child process)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; TheReturn = pop[ME].evaluate();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; send(pipe[ME], TheReturn);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; exit(0);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; else//I am the parent</p>
<p>&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; for( each member of the population j )</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pop[j].value = recv(pipe[j]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; close(pipe[j]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}<br />
Multiple GA Parallelism</p>
<p>Another common use for parallelization is simply to scale one&#39;s application. GA is an interesting case of this, because the bulk of the work is done by &quot;random&quot; variation. Thus, the more &quot;random&quot; you have, the better chance you have of finding your optimal solution. The plan then is to create multiple instances of your GA and have each run in a separate process. Here is some sample c-like pseudo code:</p>
<p>void main()<br />
{<br />
&nbsp;&nbsp;&nbsp; GeneticAlgorithm GA;<br />
&nbsp;&nbsp;&nbsp; GA.init();</p>
<p>&nbsp;&nbsp;&nbsp; for( 10 times [i] )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; create pipe[i]<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; open(pipe[i]);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; for( 10 times )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fork();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(this is a child process)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if( I am a child process )<br />
&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; 100; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GA.step() // runs one generation of GA<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; send(pipe[ME], GA.pop.BestMember());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for( 10 times [i] )<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; pipe[i] &lt;&lt; &quot; = &quot; &lt;&lt; pipe[i].value &lt;&lt; endl;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; close(pipe[i]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>To improve upon this code, you could allow each process to share their best member(s) incrementally. Here is some sample c-like pseudo code:</p>
<p>void main()<br />
{<br />
&nbsp;&nbsp;&nbsp; GeneticAlgorithm GA;<br />
&nbsp;&nbsp;&nbsp; GA.init();</p>
<p>&nbsp;&nbsp;&nbsp; for( 10 times [i] )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; create pipe[i]<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; open(pipe[i]);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; for( 10 times )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fork();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(this is a child process)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; if( I am a child process )<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for( 10 times )<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; 10; i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GA.step() // runs one generation of GA<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; send(pipe[ME], GA.pop.BestMember);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; GA.pop.WorstMember = recv(pipe[(ME+1)%10]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; send(pipe[me], GA.pop.BestMember);</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for( 10 times [i] )<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout &lt;&lt; pipe[i] &lt;&lt; &quot; = &quot; &lt;&lt; pipe[i].value &lt;&lt; endl;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; close(pipe[i]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
}</p>
<p>The Implementation Differences</p>
<p>Single GA parallelization is easy to implement in the way shown in that you do not need to pass any genetic information, just the calculated values of each member of the population. It is also very easy to distribute across a Mosix type cluster, given one small drawback: the evaluation function needs to be very processor intensive in order to be distributed by the Mosix kernel. A fork()ed process must be in existence for about 3-5 seconds to give the kernel time to identify and migrate it. So, for little tiny calculations (like the airline example from my previous post, or from TSP if you&#39;re more familiar with these types of problems), your processes will not migrate and you&#39;re wasting your time.</p>
<p>Implementation of this style of parallelization in a Beowulf cluster requires you to specify a node for a member to be calculated on, send all genetic material, and then await a response. This also requires writing a separate worker application on all other nodes, to accept the incoming genetic material and process it, as was mentioned in the post &quot;<a href="http://clusterfudge.wordpress.com/2006/06/15/clustering-a-continuation/" title="Clustering, A Continuation">Clustering, A Continuation&#8230;</a>&quot;.</p>
<p>If you&#39;re already using a Beowulf cluster, Multiple GA parallelization is the easy way to go. A distribution like LAM/MPI will create identical copies of your GA on each slave node, so you don&#39;t need to fork() off any processes. For communication between slave nodes, it depends on whether or not you use blocking I/O.</p>
<p>For blocking I/O, you&#39;ll need to use your root node as a server to send material from slave node to adjacent nodes, in order to avoid nodes idling while waiting for adjacent nodes to get to an accept state.</p>
<p>For non-blocking I/O, you can use your root node to set up something called a gene-pool, where each process intermittently drops a little genetic material into the pool, then checks to see if there&#39;s any new material in the pool to grab. If not, it can continue on without waiting. This strategy can also be implemented with blocking I/O, but it&#39;s a little bit more convoluted.</p>
<p>That just about covers the basics for GA parallelism. Next time, I&#39;ll post my research from last semester, and then perhaps get into my new clustering scheme. Until next time&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=9&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2006/06/21/genetic-algorithms-not-perpendicular-but/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>The Genetic Algorithm: When Bits Do It. A lot.</title>
		<link>http://clusterfudge.wordpress.com/2006/06/19/the-genetic-algorithm-when-bits-do-it-a-lot/</link>
		<comments>http://clusterfudge.wordpress.com/2006/06/19/the-genetic-algorithm-when-bits-do-it-a-lot/#comments</comments>
		<pubDate>Mon, 19 Jun 2006 06:06:10 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Genetic Algorithms]]></category>

		<guid isPermaLink="false">https://clusterfudge.wordpress.com/2006/06/19/the-genetic-algorithm-when-bits-do-it-a-lot/</guid>
		<description><![CDATA[So the Genetic Algorithm (GA, since I&#39;m a lazy immediately-post-college student), is an optimization tool. It&#39;s capable of solving all kinds of really difficult problems. The GA is best used for problems where the best answer can&#39;t be found by traditional means in a reasonable amount of time. Thus, when using the Genetic Algorithm, it&#39;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=8&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So the Genetic Algorithm (GA, since I&#39;m a lazy immediately-post-college student), is an optimization tool. It&#39;s capable of solving all kinds of really difficult problems. The GA is best used for problems where the best answer can&#39;t be found by traditional means in a reasonable amount of time. Thus, when using the Genetic Algorithm, it&#39;s best to be looking for a good-enough solution.</p>
<p><b>&quot;Solutions,&quot; and why that&#39;s in bunny ears:</b></p>
<p>Imagine you&#39;re trying to get from LA to NY. There&#39;s a lot of ways you could get there, or &quot;solutions&quot; to your problem. Different airlines, different connections, first class vs. coach; the list goes on and on. If you ask someone how to get from LA to NY, you&#39;ll get a myriad of answers, so it&#39;s not a problem where you can&#39;t find a solution, it&#39;s a matter of whether or not that solution is very good. It&#39;s not a good plan to book a first class non-stop flight when you only have $45 to spend, and if you&#39;re on a deadline, you&#39;ll need to be there without a three-day layover in Cleveland. Especially if you&#39;re allergic to Cleveland. I heard about a guy once&#8230;.</p>
<p>Anyways, there&#39;s a lot of different variables that go into choosing the best way for you to get to NY. Now imagine this as a graph theory problem, LA and NY are at different ends of the graph, and all the different cities you could stop in on your way there are points on the graph inbetween the start and destination. The edges in the graphs represent where you can go (probably completely interconnected; every point connected to every other point). Now imagine on each of these edges, there&#39;s a weight or cost (associate with airline ticket costs, for our example problem). Since the graph is fully connected, there&#39;s a lot of ways to get from LA to NY, but which is best (AKA cheapest)?</p>
<p><b>Graph Theory and Why It Sucks So Bad</b></p>
<p>Graph problems, like the one described above, are notorious for being a royal pain. If you were to do the math a little, you would notice that the number of paths increases at an alarming rate when you increase the number of points in the graph. These problems typically fall into a category of problems called <b>NP-Complete</b>. The exact definition of an NP-Complete problem is several pages long, but it goes something like this:</p>
<p>A problem is NP-Complete iff there does not exist a polynomial time algorithm to find the optimal solution (least cost path from above).</p>
<p>A lot of optimization problems (problems with more than one feasible solution, and possibly more than one optimal solution), also fall into this class, as well as a similar class called <b>NP-hard</b>, which basically means it&#39;s very similar to some NP-complete problem, but has yet to be proven NP-complete by the full definition. Typical proofs to prove an NP-hard problem to be NP-Complete involve reducing an NP-hard problem to a form of an already proven NP-Complete problem.</p>
<p><b>On to GA, already&#8230;</b></p>
<p>So, GA is a handy-dandy little tool for solving lots of problems like these. First, you randomly generate a bunch of &quot;solutions&quot; (which for the sake of my math profs, I&#39;ll now call <b>feasible solutions</b>), and call them your <b>population</b>. Then you&#39;ll rank each of these <b>members</b> of your population.</p>
<p><b>Ranking, Elitism at its Most Useful</b><br />
The ranking system can be very simple, or very complicated. For our example above, the simple version would be to add the costs on the edges in our path from LA to NY. This is known as a single-objective GA. A more complicated version might include shortest travel time, in which case the GA is attempting to minimize ticket price as well as travel time. This is known as a multiple-objective GA (MOGA).</p>
<p>Now that we&#39;ve ranked our population, we need to use this information to our advantage, much like the young Hitlers we all want to be. Now that we&#39;ve assigned each member a value and put them in their proper place, it&#39;s time to start the breeding.</p>
<p><b>Mating, as dirty as your nerdy mind wants it to be</b></p>
<p>There&#39;s a lot of algorithms for mating, but they all essentially do the same thing: take two members of your population (<b>parents</b>), and make two more (<b>children</b>). As in biological sexual mating, the children will share the traits of <b>both</b> parents.</p>
<p>Depending on the type of problem, you can make your mating algorithms simpler or more complex, but there are some industry standards:  simple crossover, which simply takes a random combination of genes from each of the parents; and blended crossover, which takes the two sets of genes from each parent and blends them with a random weight (which works well cause sometimes kids look more like their dad than their mom, which can really unfortunate for little Sally with the hairy back).</p>
<p><b>Matching, dating for bits</b></p>
<p>The key part to dating for a bit is to put your best foot forward. Unfortunately, since its been a long time since ram manufacturers have included the &quot;foot&quot; option (though SanDisk is getting back to it with their new MP3 players), that&#39;s not always as simple as it sounds. So, we take more simplistic, and unfortunate methods. Each of these algorithms has its benefits and drawbacks (both real and theoretical), but I won&#39;t address them here. If you read between the lines, you can probably determine my preferences. I&#39;m not a subtle writer.</p>
<p><b>Random Pairing</b><br />
I really don&#39;t feel the need to go too indepth into this. It&#39;s random. Deal with it.</p>
<p><b>Best-First</b><br />
Again, kinda simplistic. Take the two best and mate them, the third and fourth, the fifth and sixth, etc. Every generation, you end up with a new set super-jocks and down at the bottom your unfortunate group that has epilepsy with a side of polio.</p>
<p><b>Tournament Pairing</b><br />
Create a tournament bracket NCAA March Madness style. Say that each member has a certain percent chance of winning each round in its bracket, based on its rank compared to its opponent. Each member is assigned a random number between 0 and their percentage. Whichever of the members has the larger number moves on to the next round. The better valued members will always have a better chance of winning, but statistically, the lower members still have a shot at being that cinderalla team.</p>
<p><b>Plutonium in the Water</b><br />
Now I don&#39;t actually remember if plutonium is one of those horribly feared elements that&#39;ll cause you to grow a third limb if you look at it crosseyed, but everyone knows what I&#39;m talking about.</p>
<p>Everyone in their family has that red-headed kid that nobody knows where his red-hair came from and suspects the milk man cause he&#39;s always been a little off and never looks mom in the eye, but maybe mom&#39;s a standup lady and that&#39;s just a random <b>mutation</b>. It can happen. Really.</p>
<p>After you&#39;ve finished mating, the idea is to go through and randomly mutate a few genes, just to keep things interesting. There&#39;s actually a lot of reasons for mutation which I will address at a later date, but this will do for now.</p>
<p><b>Lather, rinse, repeat.</b></p>
<p>Now that you&#39;ve done all this, it is highly recommended that you do it again. And again. And again. Thousands of times, actually. Each of these iterations is called a <b>generation</b>, and the more generations (typically), the better your answer will get. This isn&#39;t entirely true, but again, this discussion goes beyond the scope of a first time reader.</p>
<p>Now that everyone has a good idea of what GA is all about, I can continue my fireside chats about my research. Until next time&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=8&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2006/06/19/the-genetic-algorithm-when-bits-do-it-a-lot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
		<item>
		<title>Clustering, a continuation&#8230;</title>
		<link>http://clusterfudge.wordpress.com/2006/06/15/clustering-a-continuation/</link>
		<comments>http://clusterfudge.wordpress.com/2006/06/15/clustering-a-continuation/#comments</comments>
		<pubDate>Thu, 15 Jun 2006 05:53:43 +0000</pubDate>
		<dc:creator>clusterfudge</dc:creator>
				<category><![CDATA[Clustering]]></category>

		<guid isPermaLink="false">https://clusterfudge.wordpress.com/2006/06/15/clustering-a-continuation/</guid>
		<description><![CDATA[So, I left off last time with a brief explanation of what I want to do (clustering-wise), and then continued with why that won&#39;t work like I want. So now, some more concepts. I&#39;m now limited by my limited knowledge of systems administration to a lam/mpi cluster. Not a shabby thing; MPI is a very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=7&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So, I left off last time with a brief explanation of what I want to do (clustering-wise), and then continued with why that won&#39;t work like I want.</p>
<p>So now, some more concepts.</p>
<p>I&#39;m now limited by my limited knowledge of systems administration to a lam/mpi cluster. Not a shabby thing; MPI is a very powerful tool, and is much easier to configure than a mosix cluster.</p>
<p>The plan then? Worker apps!</p>
<p><b>Worker Applications</b></p>
<p>So, you&#39;ve got this root node and these worker nodes. All process are created at runtime and stay in existence throughout the run of whatever it is you&#39;re doing. With GA, to mimic the work I did in mosix clusters, I would usually want to create a thread to compute each chromosome. Unfortunately, this isn&#39;t so hot for beowulf, cause that means creating popSize*numGens threads on startup. So instead, I creat a worker application, and run an instance of it on each worker node. This node will sit in an endless loop, like a server application, waiting for chromosomes to be passed to it, and it will then pass back the cost or value or fitness, whatever you like to call it, of the chromosome it evaluated, signalling that it can now accept a new chromosome.</p>
<p><b>The Problem</b></p>
<p>With mosix-style clustering, forking a process automatically creates a new process with all the chromosome information it needs, and then it needs to pass back a single variable (usually a float). With MPI style clustering, you have to pass all of the genetic material to the worker application using mpi_send() commands, much like with sockets, which means you have to specify the size of the data being transmitted, which in the case of large dynamic arrays for chromosomes means variable sized data transmissions are being sent and received, which makes your sending (and worker application) problem specific. This means that you&#39;re not writing library code (which means that it can be used for any old type of genetic algorithm problem), but instead writing problem specific code that you would have to one-off to make work for another problem.</p>
<p>So, I don&#39;t really like this plan much at all. I&#39;ve also noticed that I&#39;ve started talking alot about the genetic algorithm, so my next post will be a breif runthrough of that.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/clusterfudge.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/clusterfudge.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/clusterfudge.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/clusterfudge.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/clusterfudge.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=clusterfudge.wordpress.com&amp;blog=253428&amp;post=7&amp;subd=clusterfudge&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://clusterfudge.wordpress.com/2006/06/15/clustering-a-continuation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/65c5d7dee039e72a1e1ec4ed2f5a7f6e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">clusterfudge</media:title>
		</media:content>
	</item>
	</channel>
</rss>
