Structure assignments break vectorization
D.C. Witte
jdcwi at lhdsy1.chevron.com
Sat Jan 12 04:48:02 AEST 1991
Can anyone explain to me why references to whole structures (in Cray/ansi C)
inhibit vectorization? From the manual:
struct xyz {int x; int y; int z;};
struct xyz p1[100];
struct xyz p2[100];
. . .
/* this loop does not vectorize, compiler generates SC-1053 message */
for (i= 0; i < 100; ++i)
{
p1[i]= p2[i];
}
. . .
/* this loop does vectorize */
for (i= 0; i < 100; ++i)
{
p1[i].x= p2[i].x;
p1[i].y= p2[i].y;
p1[i].z= p2[i].z;
}
I understand that the compiler treats the former as an embedded short loop;
unrolling permits vectorization. My question is: Why doesn't the compiler
do the unrolling automatically? Seems safe enough to me, unless the RHS is
actually a (inlined) function. Anyone out there know the answer?
--------------------------------------------------------------------------
Dean Witte
Chevron Oil Field Research Co. phone: 213 694 7334
P.O. Box 446 uunet: jdcwi at chevron.com
La Habra, CA 90633
--------------------------------------------------------------------------
More information about the Comp.unix.cray
mailing list