<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">I am playing with Haskell and Clean in a machines with four processors.&nbsp; I started with a program that does something stupid that takes time. Let us assum that the program is in file para.hs. I compile it thus:<br><br>ghc pfib.hs -threaded --make<br><br>I can run it in 2 of my four cores. Here is how I did it:<br><br>pfib.exe +RTS -N2<br><br>I used something to monitor core activity, and discovered that two of the cores were working like crazy.&nbsp; The two core changed from execution to execution. The rule seems to be the following:<br><br>First run: Core 1 and core 2<br>Second run: Core 2 and core 3<br>Third run: Core 3 and core 4<br>Forth run: Core 4 and core 1<br><br>And so on. As soon as execution stops, activity drops to zero in the busy cores.&nbsp; Now, let us increase the number of cores to 4:<br><br>pfib +RTS -N4<br><br>Now, I see activity in
 all four cores. So, Haskell seem to be working as anounced. Problem is... if I create 2 or 4 processes in Clean (using ObjectIO), I get exactly the same pattern, i.e.,&nbsp; Clean programs are distributed between the cores. If I use 2 processes, they are distributed between 2 cores, if I use 4 processes, the problem activates four cores, etc.&nbsp; Is Clean parallel too, or I am missing something?<br><br>I am curious. Does parallel processes or threads work only with Xeon cpus, or do they work with any quadricore cpu? I mean, if I use a a Pentium 4 or something else, do I get the same result as in Xeon? <br><br>import Control.Parallel<br>import System (getArgs)<br>import IO<br><br>fib :: Int -&gt; Int<br>fib n | n &lt;= 1 = 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = par n1 (seq n2 (n1 + n2 + 1))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where
 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n1 = fib (n-1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n2 = fib (n-2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>main= do<br>&nbsp; a &lt;- getArgs<br>&nbsp; print $ fib (read (head a))<br><br><br><br><br><br></td></tr></table><br>
      <hr size=1>
Looking for the perfect gift?<a href="http://www.flickr.com/gift/"><b> Give the gift of Flickr!</b></a>