[Beowulf] bizarre scaling behavior on a Nehalem

Christian Bell christian at myri.com
Wed Aug 12 08:36:35 PDT 2009


On Aug 12, 2009, at 11:14 AM, Bill Broadley wrote:

> * For the compilers that tend to be better at stream (open64 and  
> pathscale),
>  you lose the performance if you just replace double a[],b[],c[] with
>  double *a,*b,*c. Patch[1] available.  I don't have a work around for
>  this, suggestions welcome.  Is it really necessary for dynamic arrays
>  to be substantially slower than static?

Yes -- when pointers, the compiler assumes (by default) that the  
pointers can alias each other, which can prevent aggressive  
optimizations that are otherwise possible with arrays.  C99 has  
introduced the 'restrict' keyword to allow programmers to assert that  
pointers of the same type cannot alias each other.  However, restrict  
is just a hint and some compilers may or may not take advantage of it.

You can also consult your compiler's documentation to see if there are  
other compiler-specific hints (asserting no loop-carried dependencies,  
loop fusion/fission).  I remember stacking half a dozen pragmas over a  
3-line loop on a Cray C compiler years ago to ensure that accesses  
where suitably optimized (or in this case, vectorized).


	. . christian



More information about the Beowulf mailing list