Hi everyone,<br><br>&nbsp; I&#39;ll echo the sentiments expressed by Tan and a few others that the culprit here, at least for Gaetano&#39;s code, is probably the memory bandwidth.&nbsp; The FDTD applications I&#39;ve seen tend to be bandwidth-hungry, and the current Intel quad cores are not very good at this, especially those with the 1333 Mhz FSB such as the E5345.&nbsp; Some of the newer models support the 1600 Mhz FSB speeds and tend to deliver better results.... for example, using the SPEC fp_rate benchmarks (and specifically that of GemsFDTD) as a really rough approximation to parallel performance, an E5450 at 3.0 Ghz scores 29.0 vs. 36.7 for the E5472 processor.&nbsp; Same chip, but faster memory, resulting in 26.5% faster performance overall.&nbsp; [Note, I used the Supermicro results for this, but you can find similar results for any of them, I imagine.]<br>
<br>&nbsp; This isn&#39;t limited to FDTD codes, either... CFD-like applications are notoriously bandwidth hungry, and using SPEC scores again, WRF gives us 51.9 vs. 70.2 for the same configurations above.&nbsp; Again, these are the same processors, same compilers, and same tests done by guys who definitely like to eek the utmost performance from their rig, and this shows that simply adding faster memory improves things measurably... 35% in this case.&nbsp; Since fp_rate isn&#39;t really the same as parallel performance, though, let&#39;s switch to some first-hand measurements - I was recently running some WRF models on a system here using the E5440 (2.83 Ghz) processors, and here are the results:<br>
<br>&nbsp; Running on 128 cores as 16 nodes x 8 cores per node:&nbsp;&nbsp; 22.8 seconds / step<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 128 cores as 32 nodes x 4 cores per node:&nbsp; 11.9 seconds / step<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 128 cores as 64 nodes x 2 cores per node:&nbsp; 10.4 seconds / step<br>
<br>&nbsp; ... As you can see, the &#39;best&#39; performance comes from using only 2 cores per node!&nbsp; In fact, I was able to run on 16 nodes and 4 cores per node, for a total of 64 cores, and it was only 2% slower than running on 128 cores (as 16 x 8).&nbsp;&nbsp; I didn&#39;t fiddle with task placement since MPI and the OS are <i>generally</i> pretty smart about such things, and the data points towards memory bandwidth being a key issue anyways.&nbsp; Hopefully having some of these &#39;hard numbers&#39; can ease your burden so you don&#39;t go crazy trying to find a reason in MPICH, the OS, etc.&nbsp; ;)<br>
<br>&nbsp; Put another way, if you&#39;re concerned that your quad-core box isn&#39;t working properly via MPI, you can write up a code (or download a code) that does something that is not limited by bandwidth - generating random numbers, for example - and run it, and you <i>should</i> see a fully linear speedup (within the constraints of Amdahl&#39;s Law).&nbsp; So the only recommendations I&#39;d make are:<br>
<br>&nbsp; 1) Use an up-to-date MPI implementation (such as MPICH2 1.0.7) and OS since they&#39;ll probably be &#39;smarter&#39; about task placement than older versions<br>&nbsp; 2) Try using the Intel compilers if you haven&#39;t done so already since they tend to be superior to gfortran (and many times gcc as well)<br>
&nbsp; 3) If you&#39;re buying hardware soon, look at the (more expensive) 1600 Mhz FSB boards / chips from Intel.<br><br>&nbsp; Hope that&#39;s useful!&nbsp; <br><br>&nbsp; Cheers,<br>&nbsp; - Brian<br><br><br>Brian Dobbins<br>Yale Engineering HPC<br>