6.1 向量处理的基本概念
6.1.1 什么是向量处理
下面我们通过一个简单的例子来说明向量处理与标量处理的差别。先考察一个用FORTRAN语言编写的程序:
DO 100 I=1, N
A(I)=B(I)+C(I)
100 B(I)=2�常粒ǎ桑�1)
对上述这个程序循环,在一般的机器上可用以下的指令序列来实现:
INITIALIZE I=1
10 READ B(I)
READ C(I)
ADD B(I)+C(I)
STORE A(I)←B(I)+C(I)
READ A(I+1)
MULTIPLY 2*A(I+1)
STOREB(I)←2*A(I+1)
INCREMENTI←I+1
IF I≤N GOTO 10
STOP
这里常量2和数组A、B和C中的每一个元素都称为标量。这一指令序列称为"标量指令序列",它的执行过程为"标量处理"过程。一般来说,一条标量指令只能处理一个或一对操作数。
上面的程序循环,在向量计算机中通过向量化编译程序得到下面三条向量指令组成的一个向量指令序列:
A(1∶N)=B(1∶N)+C(1∶N)
TEMP(1∶N)=A(2∶N+1)
B(1∶N)=2 * TEMP(1∶N)
第一条指令分别取出数组B和数组C的N个元素,并分别相加,然后将N个和存入数组A。第二条指令将取出的数组A的N个元素存入暂存区TEMP的N个单元。第三条指令使暂存区TEMP的N个元素分别乘2,并将N个乘积存入数组B。我们把这N个互相独立的数叫做"向量",对这样一组数的运算叫做"向量处理"。可以看到,一条向量指令可以处理N个或N对操作数。因此,向量指令的处理效率要比标量指令的处理效率高得多。