[comp.arch] VAX 9000 Vector Reduction

hamrick@convex.COM (Ed Hamrick) (12/02/89)

I was recently reviewing the DEC VAX 9000 Architecture, and have
a question about how vector reduction operations are implemented.

On page 6-4 of the VAX Vector Processing Handbook, it states:

"VAX FORTRAN vectorizes statements in loops that use scalars as
temporary storage for summation, dot product summation, MIN, MAX,
IMIN, and IMAX operations, even when the functions are not
explicitly used.  For example:

	     IF (S1 .GT. A(I)) S1 = A(I)    ! MAX

	     S2 = S2 + A(I) * B(I)          ! SUM

To do this, the compiler expands the scalar result into a temporary
vector of buckets for processing and later collapses the buckets
through the appropriate operation (such as IMIN)."

However, there are no vector sum reduction instructions (or MIN/MAX)
in this handbook.  The questions I have are:

1) Does anyone know of any sum/min/max vector instructions on the 9000?

2) Are there any clever ways of using other VAX 9000 instructions to do
   sum/min/max operations at vector speeds?

3) Is there any way to do dot products on the VAX 9000 at vector speeds?

4) Is there a clever way to do matrix multiplication exclusively with
   vector instructions, without a sum reduction instruction?  How many
   extra memory load/stores are required?

Regards,
Ed Hamrick