Tải bản đầy đủ (.doc) (44 trang)

TẠI SAO PHẢI DÙNG BỘ XỬ LÝ VECTOR pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (848.06 KB, 44 trang )

1, TẠI SAO PHẢI DÙNG BỘ XỬ LÝ VECTOR ?
Chúng ta đã biết cách để có thể tăng đáng kể hiệu suất của một bộ xử lý
bằng cách thiết lập nhiều lệnh trên một chu kỳ đồng hồ và độ sâu hơn đường
ống dẫn các đơn vị thực hiện để cho phép khai thác lớn hơn của chỉ thị cấp
xử lí song song. Tuy nhiên,bao giờ chúng ta cũng thấy rằng có những khó
khăn lớn trong việc khai thác độ lớn của ILP.
Khi chúng ta tăng cả chiều rộng của vấn đề lệnh và độ độ sâu của ống
dẫn máy tính, chúng ta cũng tăng số lượng các lệnhđộc lập cần thiết để giữ
cho các bộ xử lý hoạt động rộn với công việc hữu ích. Điều này có nghĩa là
sự gia tăng số lượng lệnh thực hiện đồng thời cùng một thời gian. Đối với
một máy tính tự động theo lịch trình, cấu trúc phần cứng, chẳng hạn như cửa
sổ hướng dẫn, sắp xếp lại bộ đệm, và đổi tên thanh ghi tập tin, phải phát
triển để có đủ năng lực để giữ tất cả trong các lệnh trên máy bay, và tệ hơn,
số cổng trên mỗi phần tử của các cấu trúc phải phát triển với vấn đề chiều
rộng . Các logic để theo dõi phụ thuộc giữa tất cả các lệnh trong chuyến bay
bình phương phát triển về số lượng lệnh. Ngay cả một VLIW tĩnh máy dự
kiến, mà thay đổi nhiều khó khăn lên trình tự để biên dịch, thanh ghi yêu cầu
nhiều hơn, các cổng mỗi thanh ghi nhiều hơn, và khóa liên động nguy hiểm
hơn logic (giả định một vấn đề thiết kế hợp phần cứng quản lý các khóa liên
động sau thời gian) để hỗ trợ nhiều hơn trong việc chuyển lệnh, mà tương tự
gây ra mạch tăng hai bậc có kích thước và độ sâu. Sự gia tăng nhanh chóng
trong mạch độ sâu làm khó khăn cho máy tính có thể kiểm soát số lượng
lớn các lệnh chuyển, và do đó giới hạn độ độ sâu thực tế vấn đề độ rộng
đường ống .
Bộ xử lý véc tơ đã được sử dụng thành công từ lâu trước khi lệnh - mức
lệnh máy song song và lấy phương pháp khác để kiểm soát đơn vị chức năng
với nhiều đường ống dẫn độ sâu. Bộ xử lý véc tơ cung cấp thao tác cao cấp
làm việc trên véc tơ - tuyến tính mảng của số. Thao tác véc tơ điển hình có
thể thêm hai phần 64 - phần tử, véc tơ dấu phẩy động để đạt được kết quả
hơn 64 - phần tử véc tơ . Lệnh véc tơ tương đương với toàn bộ vòng lặp, với
mỗi một máy tính lặp đi lặp lại kết quả của 64 phần tử , cập nhật các chỉ số ,


và phân nhánh ở đầu. Lệnh véc tơ có vài thuộc tính quan trọng giải quyết
hầu hết các vấn đề đề cập ở trên :
■ lệnh véc tơ đơn xác định nhiều công việc - nó tương đương với thực
hiện toàn bộ vòng lặp. Mỗi lệnh đại diện cho hàng chục hoặc hàng trăm thao
tác, và vì thế tìm nạp lệnh và giải mã băng thông cần giữ nhiều đơn vị chức
năng là giảm đáng kể thao tác của các đường ống dẫn độ sâu.
1
■ bằng cách sử dụng lệnh véc tơ, trình biên dịch hoặc lập trình viên cho
thấy tính toán mỗi lệnh đến véc tơ không lệ thuộc vào tính toán khác mà
lệnh đến véc tơ giống nhau và phần cứng không cần phải kiểm tra những
kho khăn về dữ liệu trong lệnh véc tơ. Phần tử trong véc tơ có thể tính toán
sử dụng mảng của đơn vị xử lí song song, hoặc rất độ sâu đơn vị chức năng,
hoặc bất kỳ cấu hình trung gian của xử lí song song và đường ống dẫn đơn
vị chức năng.
■ Phần cứng chỉ cần kiểm tra những khó khăn về dữ liệu giữa hai véctơ
lệnh một lần mỗi toán hạng véc tơ, không kiểm tra cho mỗi một phần tử
trong véc tơ. Điều đó có nghĩa là tính phụ thuộc kiểm tra lôgic cần thiết giữa
hai véc tơ lệnh là khoảng như bắt buộc giữa hai lệnh vô hướng, nhưng bây
giờ nhiều thao tác căn bản có thể đang chuyển cho độ độ sâu hơn tương tự
của lôgic điều khiển .
■ lệnh Véc tơ được bộ nhớ truy cập có mẫu truy cập biết đến. Nếu tất cả
các phần tử của véc tơ được liền kề, vậy thì tìm nạp xen kẽ nhiều véc tơ từ
tập hợp các bộ nhớ máy tính làm việc rất tốt . Độ trễ cao của khởi xướng
truy cập bộ nhớ chính đối với truy cập bộ nhớ cache được truyền lại, vì truy
cập đơn được khởi tạo cho toàn bộ véc tơ thay vì đến một từ riêng lẻ. Vì
vậy, chi phí của độ trễ cho bộ nhớ chính là xem toàn bộ véc tơ một lần, thay
vì mỗi lần đối với mỗi từ của véc tơ.
■ Vì toàn bộ vòng lặp được thay bằng lệnh véc tơ được thực hiện là xác
định trước, những hiểm nguy điều khiển thường phát sinh từ nhánh vòng lặp
là không còn nữa.

Vì những lý do này, thao tác véc tơ có thể làm nhanh hơn dãy các thao
tác ống xoắn trên cùng một số các tập dữ liệu, và người thiết kế được thúc
đẩy để bao gồm đơn vị véc tơ nếu lĩnh vực ứng dụng có thể sử dụng chúng
thường xuyên.
Như đã đề cập trên đây, ống dẫn bộ xử lý véc tơ và đặt ngang hàng thao
tác trên các phần tử riêng lẻ của véc tơ. Thao tác bao gồm không những phép
toán số học ( phép nhân,v.v ), mà còn cơ sở dữ liệu bộ nhớ và hiệu quả tính
toán địa chỉ. Ngoài ra, hầu hết bộ xử lý véc tơ cao cấp để nhiều lệnh véc tơ
được tiến hành cùng một lúc, tạo ra tính tương đương giữa thao tác trên véc
tơ khác nhau.
Bộ xử lý véc tơ có hữu ích đặc biệt lớn cho khoa học và kỹ thuật ứng
dụng, bao gồm mô phỏng các vụ đâm xe và dự báo thời tiết, theo đó việc
điển hình có thể lấy hàng tá giờ thời gian siêu máy tính chạy trên thiết lập dữ
liệu nhiều gigabyte. Ứng dụng đa phương tiện cũng có ứng dụng từ xử lý
véc tơ, khi chúng chứa nhiều dữ liệu tính tương đương và dữ liệu luồng với
2
quy trình lớn. Đường ống dẫn bộ xử lý cao tốc sẽ thường dùng bộ nhớ cache
để tránh sự dàng buộc lệnh tham chiếu bộ nhớ phải có độ trễ rất dài. Tuy
nhiên ,một số lớn các chương trình khoa học có thiết lập dữ liệu thao tác rất
lớn là thỉnh thoảng truy cập với địa chỉ thấp, lam cho khả năng truy cập kém
từ hệ thống phân cấp bộ nhớ. Vấn đề này có thể khắc phục bằng cách lưu trữ
tạm vào bộ nhớ cache cấu trúc này nếu nó được xác định mẫu hình truy cập
bộ nhớ và ống dẫn truy cập bộ nhớ hiệu quả. Kiến trúc bộ nhớ cache tiểu
thuyết và trợ giúp trình biên dịch qua tạo khối cô lập và prefetching đang
giảm vấn đề hệ thống phân cấp bộ nhớ này, bù lại chúng tiếp tục nghiêm túc
trong ứng dụng nào đó.
2, KIẾN TRÚC VECTOR CĂN BẢN:
Bộ xử lý véc tơ thường bao gồm đơn vị ống dẫn vô hướng bình thường
cộng đơn vị véc tơ. Tất cả đơn vị chức năng trong đơn vị véc tơ có độ trễ của
vài chu kỳ đồng hồ. Điều này cho phép thời gian chu kỳ đồng hồ ngắn và

tương thích với thao tác véc tơ liên tục lâu dài có thể độ sâu đường ống dẫn
không có tạo ra những sai lầm. Hầu hết mọi bộ xử lý véc tơ để véc tơ được
xử lý số dấu phẩy động như số nguyên, hay như dữ liệu logic. Ở đây chúng
ta sẽ chú trọng vào việc trôi nổi điểm. Đơn vị vô hướng là về cơ bản chẳng
khác gì so với cải thiện đường ống dẫn CPU, và thương mại máy véc tơ có
bao gồm cả hai đơn vị vô hướng (NEC SX / 5 ) và đơn vị vô hướng VLIW
( Fujitsu VPP5000 ).
2.1, Có hai chính kiểu kiến trúc cho bộ xử lý véc tơ :- bộ xử lý thanh
ghi véc tơ và bộ xử lý bộ nhớ - bộ nhớ véc tơ .
Ở bộ xử lý thanh ghi véc tơ , tất cả thao tác véc tơ ngoại trừ nạp vào và
lưu trữ là một trong số thanh ghi véc tơ. Kiến trúc này là đối tác là hàm véc
tơ của nạp vào - lưu trữ kiến trúc. Tất cả máy tính véc tơ từ cuối những năm
1980 sử dụng kiến trúc thanh ghi véc tơ , bao gồm bộ xử lý Nghiên cứu
Cray ( Cray - 1, Cray - 2, X - MP, Y - MP, C90, T90, và SV1 ), siêu máy
tính Nhật Bản ( NEC SX / 2 qua SX / 5, Fujitsu VP200 qua VPP5000, và
Hitachi S820 và S - 8300 ), và siêu máy tính váy ngắn ( Convex C - 1 qua C
- 4 thể hiện ). Ở bộ nhớ - bộ nhớ véc tơ bộ xử lý, tất cả thao tác véc tơ là bộ
nhớ đến bộ nhớ. Máy tính véc tơ đầu tiên đều loại này, khi đã máy tính véc
tơ của CDC. Chúng ta bắt đầu bằng véc tơ - thanh ghi bộ xử lý bao gồm
thành phần chính được chỉ ra ở hình G.1. bộ xử lý Này, rất lỏng lẻo dựa trên
Cray - 1, là nền tảng cho thảo luận khắp hầu hết phụ lục này. Chúng ta sẽ gọi
nó VMIPS ; phần vô hướng của nó là MIPS, và véc tơ của nó phần là véc tơ
logic mở rộng MIPS. Phần còn lại phần này kiểm tra cách kiến trúc cơ bản
của VMIPS liên quan đến bộ xử lý khác.
3
2.2, Thành phần chính của kiến trúc tập lệnh của VMIPS gồm những
thành phần sau đây:
■ thanh ghi Véc tơ - Mỗi véctơ thanh ghi là ngăn nhớ có độ dài cố định
giữ véc tơ đơn. VMIPS có 8 thanh ghi véc tơ, và mỗi thanh ghi véc tơ giữ 64
phần tử. Mỗi thanh ghi véc tơ phải có Ít nhất hai đọc cổng và một cổng ghi

trong VMIPS. Điều này sẽ cho phép bằng cấp cao của chồng lấp những thao
tác véc tơ để thanh ghi véc tơ khác nhau. ( Chúng ta không coi vấn đề về
ngắn tuổi véc tơ - thanh ghi cổng. Ở máy thực điều này sẽ dẫn đến nguy cơ
cấu trúc. ) Đọc và ghi cổng, tổng số ít nhất 16 cổng đọc và 8 cổng ghi, được
kết nối đến đơn vị chức năng đầu vào và đầu ra bằng cặp thanh giằng. ( Mô
tả về véc tơ - thanh ghi tập tin thiết kế đã được đơn giản hóa ở đây. Máy
thực sử dụng mẫu truy cập thường xuyên trong lệnh véc tơ để giảm chi phí
của véc tơ - thanh ghi tập tin hệ mạch [ Asanovic 1998 ]. Chẳng hạn như,
Cray - 1 quản lý để triển khai thanh ghi tập tin chỉ với cổng đơn mỗi thanh
ghi. )
■ đơn vị chức năng Véc tơ - Mỗi đơn vị hoàn toàn pipelined và có thể bắt
đầu thao tác mới trên mỗi chu kỳ đồng hồ. Thiết bị điều khiển cần có để phát
hiện những sai lầm, cả hai từ tranh chấp cho đơn vị chức năng ( những hiểm
nguy cấu trúc ) và từ tranh chấp cho truy cập thanh ghi ( những hiểm nguy
dữ liệu ). VMIPS có năm đơn vị chức năng, như đã nêu trong Hình vẽ G.1.
để dễ hiễu, chúng ta sẽ dành riêng tập trung vào đơn vị chức năng dấu phẩy
động. Tùy vào bộ xử lý véc tơ, thao tác vô hướng hoặc sử dụng đơn vị chức
năng véc tơ hoặc sử dụng thiết lập dành riêng. Chúng ta giả định đơn vị chức
năng được chia sẻ, nhưng lại, để dễ hiễu, chúng ta bỏ qua mâu thuẫn tiềm
ẩn.
4
■ Véc tơ nạp vào - lưu trữ đơn vị - đây là bộ nhớ véc tơ nạp vào hoặc lưu
trữ véc tơ kia hoặc từ bộ nhớ. VMIPS véc tơ nạp vào và lưu trữ được đầy đủ
pipelined, sao cho từ có thể di chuyển giữa thanh ghi véc tơ và bộ nhớ
Hình vẽ G.1 cấu trúc cơ bản của véc tơ - thanh ghi kiến trúc, VMIPS. Bộ
xử lý này có kiến trúc vô hướng cũng giống như MIPS. Cũng có tám phần
64 - phần tử véc tơ thanh ghi, và tất cả đơn vị chức năng là đơn vị chức năng
véc tơ. Lệnh véc tơ đặc biệt là định nghĩa cả hai cho số học và cho truy cập
bộ nhớ. Chúng ta cho thấy đơn vị véc tơ cho logic và phép toán với số
nguyên. Này được bao gồm sao cho VMIPS trông giống như bộ xử lý đồi

nhỏ vec chuẩn, thường bao gồm đơn vị này. Tuy nhiên, chúng ta sẽ không
được thảo luận đơn vị này ngoại trừ trong bài tập. Véc tơ và vô hướng thanh
ghi có số đáng kể của đọc và viết cổng để cho phép thao tác véc tơ đồng
thời nhiều.
5
Cổng này được kết nối đến đầu vào và đầu ra của đơn vị véc tơ chức
năng bằng tập hợp các thanh giằng ( được chỉ ra trong tuyến xám dày ). Ở
Phần G.4 chúng ta thêm chuỗi, sẽ đòi hỏi khả năng liên kết bổ sung với nhau
. với băng thông của 1 chữ mỗi chu kỳ đồng hồ, đằng sau độ trễ ban đầu.
Đơn vị này bình thường cũng xử lý vô hướng nạp vào và lưu trữ.
■ tập hợp các thanh ghi vô hướng - thanh ghi Vô hướng cũng có thể cung
cấp dữ liệu khi đầu vào đến đơn vị véc tơ chức năng , cũng như tính toán xử
lý để chuyển đến véc tơ nạp vào - lưu trữ đơn vị. Đây là 32 thanh ghi đa
năng bình thường và 32 thanh ghi dấu phẩy động của MIPS. Giá trị vô
hướng được đọc ra tập thanh ghi vô hướng, sau đó chốt một đầu vào véc tơ
đơn vị chức năng .
Hình vẽ G.2 cho thấy đặc điểm của một số bộ xử lý véc tơ điển hình, bao
gồm kích thước và số lượng thanh ghi, số và kiểu đơn vị chức năng, và số
đơn vị nạp vào - lưu trữ. Cột cuối cùng trong Hình vẽ G.2 cho thấy số của
đường chạy trong máy, là số của đường ống dẫn song song được dùng để
thực hiện thao tác trong mỗi lệnh véc tơ. đường chạy được mô tả sau này
trong Phần G.4 ; ở đây chúng ta giả định VMIPS mỗi véc tơ đơn vị chức
năng chỉ có ống dẫn đơn ( một đường).
Ở VMIPS, thao tác véc tơ sử dụng tên tương tự khi thao tác MIPS,
nhưng với mẫu từ " V " nối. Vì vậy, ADDV. D là thêm của hai độ chính xác
gấp đôi véc tơ. Lệnh véc tơ lấy như đầu vào của chúng hoặc cặp thanh ghi
véc tơ ( ADDV. D ) hoặc thanh ghi véc tơ và thanh ghi vô hướng, chỉ định
bởi nối " Ngược lại " ( ADDVS. D ). Ở người sau thùng máy, giá trị trong
thanh ghi vô hướng được dùng làm đầu vào với mọi thao tác - ADDVS thao
tác. D sẽ thêm nội dung của thanh ghi vô hướng cho mỗi phần tử trong thanh

ghi véc tơ. Giá trị vô hướng được chép trên đến đơn vị chức năng đồi nhỏ
vec ở thời gian vấn đề. Hầu hết mọi thao tác véc tơ có thanh ghi đích véc tơ,
mặc dù vài ( số đếm dân số ) tạo ra giá trị vô hướng, được lưu trữ đến thanh
ghi vô hướng. Tên LV và SV chỉ véc tơ nạp vào và véc tơ lưu trữ, và chúng
nạp vào hoặc lưu trữ toàn bộ véc tơ của dữ liệu độ chính xác gấp đôi. Một
toán hạng là thanh ghi véc tơ để được nạp vào hoặc lưu trữ; toán hạng kia, là
MIPS thanh ghi đa năng, là địa chỉ bắt đầu của véc tơ trong bộ nhớ.
Hình vẽ G.3 danh sách lệnh véc tơ VMIPS. Ngoài thanh ghi véc tơ, chúng
ta cần bổ sung hai thanh ghi đa năng : Độ dài véc tơ và Mặt nạ thanh ghi véc
tơ.
6
2.3, Công việc của Bộ xử lý Véc tơ như thế nào: Ví dụ?
Bộ xử lý véc tơ tốt nhất được hiểu theo nhìn vòng lặp véc tơ trên
VMIPS.
chúng ta hãy lấy vấn đề véc tơ điển hình, sẽ được dùng khắp phụ lục này :
Y = a × X + Y
X và Y là véc tơ, ban đầu thường trú trong bộ nhớ, và là sự vô hướng.
Đây là cái gọi là SAXPY hoặc DAXPY vòng lặp tạo thành vòng lặp bên
trong của điểm chuẩn Linpack. ( SAXPY đứng thế cho đơn - độ chính xác X
× cộng Y ; DAXPY cho độ chính xác gấp đôi a × X cộng Y. ) Linpack là tập
hợp các thường trình đại số tuyến tính, và thường trình để thực hiện loại trừ
là Gaussian những gì được coi là
7
Đặc điểm G.2 hình vẽ của vài véc tơ - thanh ghi kiến trúc. Nếu máy là bộ
đa xử lý, mục phù hợp với đặc điểm của một bộ xử lý. Một số máy có tốc độ
đồng hồ khác nhau trong véc tơ và vô hướng đơn vị ; tốc độ đồng hồ được
chỉ ra dành cho đơn vị véc tơ. Thanh ghi véc tơ của máy Fujitsu là config
cho tới - urable : kích thước và số đếm của 8 K mục 64 bit có thể là thay đổi
ngược lại nhau ( chẳng hạn như, trên VP200, từ 8 thanh ghi mỗi 1 K phần tử
dài tới 256 thanh ghi mỗi phần tử dài 32 ). Máy NEC có tám cứu hoả - đất

véc tơ thanh ghi được nối với đơn vị số học cộng 32-64 nền véc tơ thanh ghi
kết nối giữa hệ thống bộ nhớ và thanh ghi véc tơ nền trước. Đơn vị lẫn nhau
trên bộ xử lý Cray được dùng để thực hiện phép chia ( và căn bậc hai trên
Cray - 2 ). Thêm đường ống dẫn thực hiện thêm và bớt. Nhân / chia - thêm
đơn vị trên Hitachi S810 / 820 thực hiện FP nhân hoặc chia tiếp theo là thêm
hoặc bớt ( trong khi nhân - thêm đơn vị thực hiện nhân đi theo với thêm
hoặc bớt ). Lưu ý rằng hầu hết bộ xử lý dùng véc tơ FP nhân và chia đơn vị
làm số nguyên véc tơ nhân và chia, và một số bộ xử lý dùng đơn vị cùng làm
FP sự vô hướng và FP véc tơ thao tác. Mỗi nạp vào véc tơ - lưu trữ đơn vị
đại diện cho khả năng làm độc lập, chồng lấp chuyển giao hoặc từ thanh ghi
véc tơ. Số của làn xe chạy là số của đường ống dẫn song song trong mỗi một
đơn vị chức năng khi mô tả trong Phần G.4. ví dụ như, NEC SX / 5 có thể
hoàn chỉnh 16 nhân mỗi chu kỳ trong đơn vị chức năng nhân. C Phồng lên -
1 có thể chia hẻm 64 bit đơn của nó thành hai làn xe chạy 32 bit để gia tăng
hiệu năng cho ứng dụng đòi hỏi chỉ độ chính xác giảm. Cray SV1 có thể
nhóm bốn CPUs với hai làn xe chạy mỗi để hành động cùng nhau khi CPU
lớn hơn đơn với tám làn xe chạy, Cray gọi Multi - Luồng Bộ xử lý ( MSP ).
8
Kiểm chuẩn Linpack. Thường trình DAXPY, triển khai vòng lặp trước,
đặc trưng cho một phần nhỏ mã nguồn của kiểm chuẩn Linpack, nhưng nó
giải thích hầu hết thời gian thực hiện cho kiểm chuẩn.
Bây giờ, giả sử rằng số phần tử, hoặc độ dài của thanh ghi véc tơ ( 64 )
trùng với độ dài của thao tác véc tơ mà chúng ta quan tâm đến. Hình vẽ G.3
lệnh véc tơ VMIPS. Thao tác FP độ chính xác gấp đôi chỉ có được chỉ ra.
Ngoài thanh ghi véc tơ, có hai thanh ghi đặc biệt, VLR và VM
Thanh ghi đặc biệt này là giả định để sống ở MIPS bộ đồng xử lý 1 dấu
cách cùng với thanh ghi FPU. Thao tác với bước véc tơ được trình bày trong
Phần 3, và sử dụng tạo chỉ mục và chỉ mục nạp vào - lưu trữ thao tác được
trình bày trong Phần 4.
Ví dụ: Cho thấy mã cho MIPS và VMIPS cho vòng lặp DAXPY. Cho

rằng địa chỉ bắt đầu của X, Y ở Rx và Ry, tương ứng.
9
Trả lời: đây là mã MIPS.
L.D F0 d,a ; Nạp vào sự vô hướng
DADDIU R4, Rx, #512 ; Nạp vào địa chỉ cuối cùng
Vòng lặp : L.D F2,0 ( Rx ) ; Nạp vào X( i )
MUL.D F2 d, F2, F0 ; X × ( i )
L.D F4,0 ( Ry ) ; Nạp vào Y( i )
Thêm.D F4 d, F4, F2 ; X × ( i ) + Y ( i )
S.D 0 ( Ry ), F4 ; lưu trữ vào Y ( i )
DADDIU Rx, Rx, #8 ; chỉ mục tăng đến X
DADDIU Ry, Ry, #8 ; chỉ mục tăng đến Y
DSUBU R20, R4, Rx ; tính toán giới hạn
BNEZ R20, Vòng lặp ; kiểm tra nếu làm
Đây là mã VMIPS cho DAXPY.
L.D F0,a ; Nạp vào sự vô hướng a
LV V1, Rx ; X véc tơ nạp vào
MULVS.D V2 d, V1, F0 ; Nhân véc tơ - vô hướng
LV V3, Ry ; Nạp vào véc tơ Y
ADDV.D V4 d, V2, V3 ; Thêm
SV Ry, V4 ; Lưu trữ kết quả
Có một số so sánh thú vị giữa hai đoạn mã trong ví dụ này. Ấn tượng
nhất là bộ xử lý véc tơ giảm đáng kể băng thông lệnh động, chỉ thực hiện 6
lệnh so với gần 600 lệnh cho MIPS. Tất cả sự giảm này xảy ra vì thao tác
véc tơ làm việc trên 64 phần tử và vì chi phí cho lệnh là nửa vòng lặp trên
MIPS không có trong mã VMIPS.
Sự khác biệt quan trọng khác là tần số của khoá liên động đường
ống.Trong các mã MIPS đơn giản mỗi ADD.D phải chờ MUL. D, và mỗi S.
D phải chờ Thêm. D. Trên bộ xử lý véc tơ, mỗi lệnh véc tơ sẽ chỉ ngắt cho
10

phần tử đầu tiên trong mỗi véc tơ, rồi các luồng phần tử tiếp theo sẽ giảm. Vì
vậy, việc ngắt đường ống dẫn được yêu cầu một lần cho mỗi thao tác véc tơ,
thay vì một lần cho mỗi phần tử véc tơ. Trong ví dụ này, tần số ngắt đường
ống dẫn trên MIPS sẽ cao gấp 64 lần so với nó trên VMIPS. Ngắt đường ống
dẫn có thể bị loại trên MIPS bằng cách sử dụng dây chuyền phần mềm hoặc
mở vòng lặp .Tuy nhiên, sự khác biệt lớn trong băng thông lệnh không được
giảm.
2.3, Thời gian thực hiện véc tơ:
Thời gian thực hiện của dãy các thao tác véc tơ chủ yếu tùy theo ba phần
tử : độ dài của véc tơ toán hạng, những sai lầm giữa các thao tác cấu trúc, và
sự phụ thuộc dữ liệu. Căn cứ vào độ dài véc tơ và tốc độ khởi động, là tốc độ
từ đó véc tơ đơn vị nạp vào toán hạng mới và tạo ra kết quả mới, chúng ta
có thể tính toán thời gian cho lệnh véc tơ đơn. Tất cả siêu máy tính hiện đại
có đơn vị chức năng véc tơ với nhiều đường ống dẫn song song (hoặc làn xe
chạy ) có thể tạo ra hai hay nhiều kết quả mỗi chu kỳ đồng hồ, nhưng có thể
còn có một số đơn vị chức năng không là đầy đủ pipelined. Để dễ hiễu, thực
hiện VMIPS của chúng ta có một hẻm với tốc độ khởi động của một phần tử
mỗi chu kỳ đồng hồ cho tác vụ riêng lẻ. Vì vậy, thời gian thực hiện duy nhất
cho lệnh véc tơ là khoảng độ dài véc tơ.
Để đơn giản hóa thảo luận của thực hiện véc tơ và thời gian của nó,
chúng ta sẽ sử dụng ký pháp của đoạn, là tập hợp các lệnh véc tơ điều đó có
thể tiềm ẩn bắt đầu thực hiện với nhau trong một dấu chấm đồng hồ. ( Dù
khái niệm này của đoạn được dùng trong trình biên dịch véc tơ, thuật ngữ
chuẩn không tồn tại. Vì thế, chúng ta tạo ra đoạn thuật ngữ. ) Lệnh trong
đoạn phải không chứa bất kỳ cấu trúc hoặc dữ liệu những hiểm nguy ( cho
dù chúng ta sẽ thư giãn sau này này ) ; nếu những hiểm nguy như vậy có
mặt, lệnh trong voy không nên đã tiềm năng sẽ cần được đăng nhiều kỳ và
khởi xướng trong đoạn khác nhau. Đặt lệnh véc tơ vào đoạn là tương tựvới
đặt thao tác vô hướng vào lệnh VLIW. Để giữ đơn giản phân tích, chúng ta
cho rằng đọan lệnh phải hoàn chỉnh thực hiện trước khi bất cứ một lệnh nào

khác ( sự vô hướng hoặc véc tơ ) có thể bắt đầu thực hiện.
Kèm theo ký pháp của đoạn là tiêu chuẩn đo lường thời gian, được gọi là
chime, có thể được dùng để đánh giá của trình tự thao tác véc tơ bao gồm
đoạn. Chime là đơn vị thời gian lấy để thực hiện một đoạn. Chime là việc đo
xấp xỉ của thời gian thực hiện cho trình tự véc tơ ; việc đo chime không lệ
thuộc vào độ dài véc tơ. Vì vậy, trình tự véc tơ bao gồm thực hiện m đoạn
trong m chime , và cho độ dài véc tơ của n, đây là chu kỳ đồng hồ xấp xỉ n ×
m. Phép tính xấp xỉ chime bỏ qua một số bộ xử lý cụ thể hơn - đầu, một số
11
trong đó phụ thuộc độ dài véc tơ. Vì thế, đo thời gian trong chime là phép
tính xấp xỉ tốt hơn cho véc tơ dài. Chúng ta sẽ sử dụng mea chime -
surement, thay vì chu kỳ đồng hồ mỗi kết quả, để rõ cho thấy chi phí nào đó
đang bị bỏ qua.
Nếu chúng ta biết số của đoạn trong trình tự véc tơ, chúng ta biết thời
gian thực hiện trong chime. Một nguồn của chi phí bỏ qua trong đo lường
chime là hạn chế nào trên khởi xướng lệnh nhiều véc tơ trong chu kỳ đồng
hồ. Nếu chỉ một véc tơ lệnh mới có thể được khởi tạo trong chu kỳ đồng hồ (
thực tế trong hầu hết bộ xử lý véc tơ ), số đếm chime sẽ đánh giá thấp thời
gian thực hiện thực tế của đoạn. Bởi vì độ dài véc tơ là thường rất lớn hơn số
của lệnh trong đoạn, chúng ta sẽ chỉ cần cho rằng thực hiện đoạn trong một
chime.
Ví dụ cho thấy trình tự mã sau sắp xếp chung thành một đoạn, giả định
bản sao duy nhất của mỗi véc tơ đơn vị chức năng :
LV V1,Rx ; Nạp vào Véc tơ X
MULVS.D V2 d, V1, F0 ; NhânVéc tơ - vô hướng
LV V3, Ry ; Nạp vào Véc tơ Y
ADDV.D V4 d, V2, V3 ; Thêm
SV Ry, V4 ; Lưu trữ kết quả
Cần bao nhiêu chime cho trình tự véc tơ ? có bao nhiêu Chu kỳ mỗi
vòng FLOP?

( phép toán dấu phẩy động ) cần thiết bỏ qua vấn đề chi phí lệnh véc tơ?
Trả lời: đoạn đầu tiên được thay thế bởi lệnh LV đầu tiên.
MULVS. D phụ thuộc LV đầu tiên, vì thế nó không thể ở đoạn giống
nhau. Lệnh LV giây có thể ở đoạn giống như MULVS. D. ADDV. D phụ
thuộc LV giây, vì vậy phải đi đến trong đoạn thứ ba, và sau cùng là SV tùy
theo ADDV. D, vì vậy phải vào đoạn đi theo. Điều này dẫn đến bố trí sau
của lệnh véc tơ vào đoạn :
12
1. LV
2. MULVS.D LV
3. ADDV.D
4. SV
Trình tự đòi hỏi bốn đoạn và do đó lấy bốn chime. Trình tự khi lấy tổng
số bốn chime và có hai phép toán dấu phẩy động mỗi kết quả, số chu kỳ của
mỗi FLOP là 2 ( bỏ qua vấn đề chi phí bất kỳ lệnh véc tơ ). Lưu ý rằng mặc
dù chúng ta cho phép MULVS. D và LV cả hai để exe - chung thành một
đoạn 2, hầu hết máy véc tơ sẽ lấy 2 đồng hồ đạp xe đến khởi động lệnh.
Phép tính xấp xỉ chime là khá chính xác cho véc tơ dài. Chẳng hạn như,
cho 64 - phần tử véc tơ, thời gian trong chime là bốn, cho nên trình tự sẽ lấy
256 chu kỳ đồng hồ. Chi phí cấp phát đoạn 2 trong hai đồng hồ riêng biệt là
nhỏ.
Một nguồn chi phí khác đáng kể hơn nhiều so với vấn đề hạn chế . Nguồn
quan trọng nhất của chi phí bỏ qua bằng mô hình chime là thời gian thành
lập véc tơ. Thời gian khởi động thời gian đến từ độ trễ dây chuyền của thao
tác véc tơ và chủ yếu xác định bởi ống dẫn độ sâu biết bao vì đã đơn vị chức
năng sử dụng. Thời gian khởi động thời gian gia tăng thời gian hiệu quả để
thực hiện đoạn để hơn một chime. Vì giả định của chúng ta hộ tống không
chồng lấp đúng lúc, thời gian khởi động độ trễ thời gian thực hiện của đoạn
tiếp theo. Dĩ nhiên lệnh trong đoạn liên tiếp có hoặc tranh chấp cấu trúc cho
một số đơn vị chức năng hoặc được dữ liệu phụ thuộc, cho nên giả định của

chồng lấp không hợp lý. Thời gian thực tế để hoàn chỉnh đoạn được xác định
bằng tổng độ dài véc tơ và thời gian khởi động thời gian. Nếu độ dài véc tơ
là vô tận, chi phí thành lập này sẽ được phân bổ, nhưng độ dài véc tơ hạn
chế làm bị lộ, khi ví dụ cho thấy sau.
Ví dụ: giả định chi phí thời gian khởi động cho đơn vị chức năng được
chỉ ra ở hình G.4. Cho thấy thời gian mỗi đoạn có thể bắt đầu và tổng số chu
kỳ cần. Làm sao thời gian so với phép tính xấp xỉ chime cho véc tơ của độ
dài 64?
Trả lời: Hình G.5 cung cấp trả lời một đoạn, giả dụ như độ dài véc tơ
được n.
Một câu hỏi hóc búa là khi chúng ta giả định trình tự véc tơ đã làm xong,
dù thời gian khởi động thời gian của SV có thể nhìn thấy rõ hay không.
Chúng ta cho rằng lệnh đi theo không thể đặt vừa trong đoạn cùng, và chúng
ta đã giả định đoạn không chồng lấp. Do đó tổng thời gian được cho trước
13
vào lúc cho đến lệnh véc tơ cuối cùng trong hoàn chỉnh đoạn cuối cùng. Đây
là approxi - mation, và thời gian khởi động thời gian của lệnh véc tơ cuối
cùng có thể là xem trong trình tự nào đó và không phải ở nơi khác. Để dễ
hiễu, chúng ta luôn bao gồm nó.
Thời gian mỗi kết quả cho véc tơ của độ dài 64 là 4 + ( 42 / 64 ) = 4.65
đồng hồ chu kỳ, trong khi phép tính xấp xỉ chime sẽ là 4. Thời gian thực
hiện với khởi động chi phí là 1.16 lần cao.
Hình vẽ G.5 Bắt đầu thời gian và đầu tiên - và cuối cùng - thời gian kết
quả cho đoạn 1 qua 4.
Độ dài véc tơ n. Để dễ hiễu, chúng ta sẽ dùng phép tính xấp xỉ chime làm
thời gian thực hiện, kết hợp khởi động thời gian chỉ khi chúng ta muốn thiết
lập hiệu suất nhiều hơn hoặc để minh họa ưu thế của một số cải thiện hiệu
suất. Các bước véc tơ, tình huống tiêu biểu, chi phí khởi động không phải là
lớn.
Thời gian khởi động để được một lệnh từ độ sâu đường ống dẫn cho đơn

vị chức năng triển khai lệnh. Nếu tốc độ khởi động để được lưu trữ 1 chu kỳ
đồng hồ cho mỗi kết quả, vậy thì:

Độ sâu ống dẫn
=
tổng số thời gian đơn vị chức năng
Thời gian chu kỳ đồng hồ
14
Chẳng hạn như, nếu thao tác lấy 10 chu kỳ đồng hồ , nó phải mất 10
đường ống dẫn để đạt được tốc độ khởi động mỗi một chu kỳ đồng hồ.
Chiều sâu ống dẫn, sau đó, là xác định bởi độ độ sâu của thao tác và thời
gian chu kỳ đồng hồ của bộ xử lý. Độ sâu đường ống dẫn của đơn vị chức
năng thay đổi nhiều từ 2 đến 20 giai đoạn không phải là hiếm, mặc dù hầu
hết sử dụng đơn vị độ sâu đường ống dẫn của 4-8 chu kỳ đồng hồ.
Đối với VMIPS, chúng ta sẽ sử dụng chiều độ sâu ống dẫn khi Cray - 1,
mặc dù độ trễ trong nhiều bộ xử lý hiện đại hơn có thể để tăng, đặc biệt cho
nạp vào.
Tất cả đơn vị chức năng được đường ống dẫn đầy đủ . Như đã nêu trong
Hình vẽ G.6, độ sâu ống dẫn được 6 chu kỳ đồng hồ thêm cho dấu phẩy
động và nhân 7 chu kỳ đồng hồ cho dấu phẩy động . Trên VMIPS, khi trên
hầu hết bộ xử lý véc tơ, thao tác véc tơ độc lập sử dụng đơn vị chức năng
khác nhau có thể cấp phát trong đoạn giống nhau.
2.4, Nạp - Lưu trữ véc tơ Đơn vị và hệ thống bộ nhớ Véc tơ
Các hoạt động của véc tơ đơn vị nạp vào - lưu trữ là độ sâu hơn so với
đơn vị chức năng số học. Thời gian khởi động cho nạp vào là thời gian để có
được từ đầu tiên từ bộ nhớ vào thanh ghi. Nếu phần còn lại véc tơ có thể
được cung cấp liên tục không có ngắt, vậy thì tốc độ khởi động véc tơ bằng
tốc độ mà từ mới là tìm nạp hoặc lưu trữ. Không giống đơn vị chức năng
đơn giản, tốc độ khởi động có thể không nhất thiết là 1 chu kỳ đồng hồ vì
ngắt ngăn nhớ có thể giảm thông lượng thực tế.

Hình vẽ G.6 Mức khởi động trên VMIPS. Đây là mức thời gian khởi động
trong chu kỳ đồng hồ cho thao tác véc tơ VMIPS.
Thường, mức khởi động cho nạp vào - lưu trữ đơn vị đều cao hơn những
đơn vị chức năng số học - chu kỳ đồng hồ hơn 100 trên một số bộ xử lý.
FVMIPS chúng ta sẽ giả định thời gian khởi động là 12 chu kỳ đồng hồ,
tương tự như Cr 1. Figure G.6 tóm tắt thời gian khởi động mức cho VMIPS
thao tác véc tơ.Để duy trì tốc độ khởi động của 1 từ tìm nạp hoặc lưu trữ mỗi
15
đồng hồ, hệ thống bộ nhớ phải có khả năng tạo ra hoặc chấp nhận dữ liệu
nhiều này. Điều này thường được thực hiện bằng cách tạo ra ngăn nhớ nhiều
bộ nhớ.
Hầu hết mọi bộ xử lý véc tơ sử dụng ngăn nhớ thay vì đơn giản hơn là
sự chèn.
Gồm ba lí do chính sau :
1. Nhiều véc tơ máy tính hỗ trợ nhiều việc nạp vào hoặc lưu trữ ở mỗi
đồng hồ, và thời gian chu kỳ bộ nhớ máy tính thường lớn hơn vài lần thời
gian cy CPU. Để hỗ trợ nhiều truy cập đồng thời, nhu cầu hệ thống bộ nhớ
có nhiều ngăn nhớ và có thể điều khiển đến địa chỉ ngăn nhớ .
2. Như chúng ta sẽ thấy trong phần kế tiếp, nhiều bộ xử lý véc tơ hỗ trợ để
nạp vào hoặc lưu dữ liệu từ là không tuần tự. Trong trường hợp này, không
phụ thuộc địa chỉ ngăn nhớ, thay vì là chèn, bắt buộc.
3. Nhiều véc tơ máy tính hỗ trợ nhiều bộ xử lý chia sẻ chung hệ thống
ory, và mỗi bộ xử lý sẽ tạo ra luồng không phụ thuộc rất riêng của mình về
địa chỉ.
Trong tổ hợp, tính năng này dẫn đến nhiều bộ nhớ máy tính độc lập, khi
được chỉ ra bởi ví dụ sau.
Ví dụ: Cray T90 có chu kỳ đồng hồ CPU của 2.167 ns và cấu hình lớn
nhất của nó (Cray T932) có 32 bộ xử lý mỗi có khả năng tạo ra bốn nạp vào
và hai lưu trữ mỗi chu kỳ đồng hồ CPU. Chu kỳ đồng hồ CPU là 2.167 ns,
trong khi thời gian chu kỳ của SRAMs được dùng trong hệ thống bộ nhớ là

15 ns. Tính số tối thiểu của bộ nhớ máy tính phải để tất cả CPUs lao vào độ
rộng dải tần bộ nhớ đầy đủ.
Trả lời: số bộ nhớ tham chiếu mỗi chu kỳ tối đa là 192 ( 32 CPUs thời
gian 6 tham chiếu mỗi CPU ). Mỗi ngăn nhớ SRAM đang hoạt động cho
15 / 2.167 = 6.92 chu kỳ đồng hồ, chúng ta làm tròn tới 7 chu kỳ đồng hồ
CPU. Vì vậy chúng ta đòi hỏi tối thiểu 192 × 7 = 1344 bộ nhớ máy tính!
Cray T932 thực sự có 1024 ngăn nhớ, và vì thế mô hình sớm không thể
duy trì băng thông đầy đủ cho tất cả CPU cùng một lúc. Nâng cấp bộ nhớ
tiếp theo thay 15 ns không đồng bộ SRAM bằng đường ống dẫn đồng bộ
SRAM hơn chia đôi thời gian chu kỳ bộ nhớ, do đó cung cấp đủ băng thông.
Chúng ta thấy rằng tốc độ truy cập mong muốn và thời gian truy cập ngăn
nhớ xác định ngăn nhớ có bao nhiêu cần có để truy cập bộ nhớ không có
ngắt.
16
Ví dụ: tiếp cho thấy làm sao những thời điểm thực hiện trong bộ xử lý
véc tơ. Ví dụ như chúng ta muốn tìm nạp véc tơ của 64 phần tử khởi điểm ở
byte địa chỉ 136, và truy cập bộ nhớ lấy 6 đồng hồ. Có bao nhiêu ngăn nhớ
chúng ta phải hỗ trợ một tìm nạp mỗi chu kỳ đồng hồ? địa chỉ truy cập ngăn
nhớ là gì? Khi nào phần tử khác nhau đến CPU?
Trả lời: Sáu đồng hồ mỗi truy cập đòi hỏi ít nhất sáu ngăn nhớ, nhưng vì
chúng ta muốn số của ngăn nhớ là luỹ thừa hai, chúng ta chọn có tám ngăn
nhớ. Hình vẽ G.7 cho thấy thời gian cho một vài thiết lập đầu tiên của truy
cập cho tám - hệ thống ngăn nhớ với 6 - chu kỳ đồng hồ truy cập độ trễ.
Hình vẽ G.7 địa chỉ bộ nhớ ( trong byte ) bằng số ngăn nhớ và khe thời
gian từ đó truy cập bắt đầu. Mỗi bộ nhớ máy tính mạch gài địa chỉ phần tử
lúc khởi sự của truy cập và sau đó được hoạt động cho 6 đồng hồ chu kỳ
trước khi quay về giá trị đến CPU. Lưu ý rằng CPU không thể giữ cả tám
ngăn nhớ hoạt động luôn luôn vì nó chỉ giới hạn đến cung cấp một ddress
mới và nhận một mục dữ liệu mỗi chu kỳ.
Thời gian của bộ nhớ máy tính thật sự thường chia cắt thành hai thành

phần khác nhau, độ trễ truy cập và thời gian chu kỳ ngăn nhớ ( hoặc thời
17
gian hoạt động ngăn nhớ ). Độ trễ truy cập là lúc từ khi địa chỉ đến ngăn nhớ
cho đến báo cáo của ngăn nhớ giá trị dữ liệu, trong khi thời gian hoạt động
là lúc ngăn nhớ chiếm đóng với một yêu cầu. Độ trễ truy cập thêm vào thời
gian khởi động chi phí của tìm nạp từ bộ nhớ véc tơ ( tổng số độ trễ bộ nhớ
cũng bao gồm thời gian để duyệt mạng kết nối ống dẫn chuyển giao dữ liệu
và địa chỉ giữa CPU và bộ nhớ máy tính ). Thời gian hoạt động ngăn nhớ chi
phối băng thông hiệu quả của hệ thống bộ nhớ vì bộ xử lý không thể cấp
phát một giây yêu cầu đến ngăn nhớ cùng cho đến thời gian hoạt động ngăn
nhớ đã qua.
Cho ngăn nhớ không ống dẫn SRAM đơn giản khi được dùng trong ví
dụ trước đây, độ trễ truy cập và thời gian hoạt động là khoảng giống nhau.
Cho ngăn nhớ ống dẫn SRAM, tuy nhiên, độ trễ truy cập là lớn hơn thời gian
hoạt động vì mỗi truy cập phần tử chỉ chiếm đóng một giai đoạn trong ống
dẫn bộ nhớ máy tính. Cho ngăn nhớ SRAM, độ trễ truy cập thường thấp hơn
thời gian hoạt động vì SRAM cần giờ làm thêm để phục hồi giá trị đọc đằng
sau thao tác phiên đọc có xoá. Cho hệ thống bộ nhớ hỗ trợ truy cập véc tơ
đồng thời nhiều hoặc cho phép truy cập không tuần tự trong véc tơ nạp vào
hoặc lưu trữ, số của bộ nhớ máy tính nên lớn hơn tối thiểu mặt khác, tranh
chấp ngăn nhớ sẽ tồn tại.
3, HAI HƯỚNG NGHIÊN CỨU: ĐỘ DÀI VECTOR VÀ CÁC
BƯỚC VECTOR
Phần này đề cập tới hai vấn đề phát sinh trong các chương trình
thực tế: bạn sẽ làm gì khi độ dài vectơ trong một chương trình không
hẳn là 64?. Làm thế nào để bạn xử lý với các phần tử không nằm kề
nhau trong các vector trong bộ nhớ? Trước tiên, chúng ta hãy xem
xét vấn đề độ dài vector.
3.1 Điều khiển độ dài vector
Bộ vi xử lý thanh ghi vector có độ dài tự nhiên xác định bằng số

các phần tử trong từng thanh ghi vector. Độ dài đó là 64 cho VMIPS,
khó có thể trùng với độ dài vector thực tế trong chương trình. Hơn
nữa, trong một chương trình thực tế độ dài của một vector cụ thể
thường không rõ thao tác khi biên dịch. Trên Thực tế, một đoạn mã
có thể đòi hỏi độ dài vector khác nhau. Ví dụ, xem xét mã này:
do 10 i = 1,n
10 Y(i) = a * X(i) + Y(i)
18
Kích thước của tất cả các thao tác vector phụ thuộc vào n, mà nó
có thể không được biết cho đến khi chạy. Giá trị của n cũng có thể là
một tham số cho một thủ tục có chứa vòng lặp ở trên và do đó có thể
thay đổi trong quá trình thực hiện.
Giải pháp cho những vấn đề này là tạo ra độ dài thanh ghi
vector(VLR). VLR điều khiển độ dài của thao tác vector bất kỳ, bao
gồm một vector nạp hoặc lưu trữ. Tuy nhiên, các giá trị trong VLR
không thể lớn hơn độ dài của thanh ghi vector. Điều này giải quyết
vấn đề của chúng ta chừng nào độ dài thực tế còn nhỏ hơn hoặc
bằng độ dài vector tối đa (MVL) được xác định bởi bộ xử lý.
Điều gì sẽ xảy ra nếu không biết giá trị của n vào thời điểm biên
dịch, và do đó nó có thể lớn hơn MVL? Để giải quyết vấn đề thứ hai
ở đây là độ dài vector dài hơn độ dài tối đa, một kỹ thuật được sử
dụng gọi là phân mảnh. phân mảnh là thế hệ của mã sao cho mỗi
thao tác vector được thực hiện cho một kích thước nhỏ hơn hoặc
bằng MVL. Chúng ta có thể phân mảnh cùng một kiểu trong vòng
lặp: chúng ta sẽ tạo ra một vòng lặp để xử lý số lần lặp bất kỳ đó là
một bội số của MVL và vòng lặp khác để xử lý những lần lặp bất kỳ
còn lại, nó phải nhỏ hơn MVL. Trong thực tế, các trình biên dịch
thường tạo ra một vòng lặp phân mảnh đơn được biểu diễn bằng
tham số để xử lý cả hai phần bằng cách thay đổi độ dài.
Phiên bản phân mảnh của các vòng lặp DAXPY viết bằng ngôn

ngữ FORTRAN - ngôn ngữ chủ yếu được dùng cho các ứng dụng
khoa học, được thể hiện với chú thích kiểu C:
low = 1
VL = (n mod MVL) /*tìm để tách ra kích thước dư*/
do 1 j = 0,(n / MVL) /*vòng ngoài*/
do 10 i = low, low + VL - 1 /* cho độ dài VL chạy*/
Y(i) = a * X(i) + Y(i) /*thao tác chính*/
10 continue
low = low + VL /*bắt đầu vector tiếp theo*/
VL = MVL /*thiết lập lại độ dài tối đa*/
1 continue
Thuật ngữ n/ MVL thể hiện cho việc chia ngắn số nguyên ( những
gì mà FORTRAN làm) và được sử dụng trong suốt phần này. Tác
19
dụng của vòng này là để ngăn chặn các vector vào phân đoạn, sau
đó được xử lý bằng các vòng trong. Độ dài của phân đoạn đầu tiên là
(n mod MVL), và tất cả các phân đoạn tiếp theo là độ dài của MVL.
Điều này được minh họa trong hình G.8.
Hình G.8 Vectơ xử lý độ dài bất kỳ với phân mảnh. Tất cả các khối
nhưng đầu tiên là độ dài của MVL, sử dụng toàn bộ nguồn của bộ vi
xử lý vector. Trong hình này, biến m được sử dụng cho biểu thức (n
mod MVL).
Các vòng lặp trong của mã trước đó có thể thay đổi được độ dài
VL, đó là bằng hoặc (MVL mod n) hoặc MVL. Thanh ghi VLR phải
được thiết lập hai lần một tại mỗi nơi biến VL trong mã được gán.
Với nhiều thao tác thực thi vector song song, phần cứng cần phải
sao chép các giá trị của VLR đến đơn vị vector thiết thực khi có sự
đưa ra các thao tác vector, trong trường hợp VLR được thay đổi cho
thao tác vector tiếp theo.
Một số vector ISA đã được phát triển cho phép triển khai thực hiện

đầy đủ để thanh ghi vector có độ dài tối đa khác nhau. Ví dụ như,
phần mở rộng vector IBM cho hàng loạt các máy tính lớn IBM 370 hỗ
trợ một MVL của bất kỳ chỗ nào giữa 8 và 512 phần tử. "đếm số
lượng vector nạp và cập nhật" lệnh (VLVCU) được cung cấp để điều
khiển các vòng lặp phân mảnh. Lệnh VLVCU có một thanh ghi toán
hạng vô hướng đơn xác định độ dài vector mong muốn. Các thanh
ghi độ dài vector được xác lập đến mức tối thiểu của độ dài theo
mong muốn và độ dài vector tối đa có sẵn, và giá trị này cũng được
trừ ra khỏi thanh ghi vô hướng, thiết lập mã điều kiện có thể cho biết
nếu vòng lặp nên được kết thúc. Bằng cách này, mã của đối tượng
có thể được di chuyển không bị thay đổi giữa hai thao tác khác nhau
trong khi sử dụng độ dài thanh ghi vector có sẵn trong mỗi vòng lặp
phân mảnh.
20
Ngoài chi phí khởi động, chúng ta cần tài khoản cho tổng các chi
phí của việc thực hiện vòng lặp phân mảnh. Chi phí phân mảnh phát
sinh từ việc cần phục hồi lại trình tự vector và thiết lập các VLR, có
hiệu quả thêm vào cùng thời gian khởi động vector , giả định rằng
một đoạn trùng lặp với các lệnh khác.
Nếu chi phí cho một đoạn là 10 chu kỳ, sau đó các chi phí hiệu quả
cho 64 phần tử tăng 10 chu kỳ, hoặc 0,15 chu kỳ mỗi phần tử. Có hai
phần tử quan trọng góp phần tạo nên thời gian chạy của vòng lặp
phân mảnh bao gồm một dãy các đoạn:
1, Số lượng các đoạn trong vòng lặp quyết định số lượng các
chime. Chúng tôi sử dụng Tchime ký hiệu cho thời gian thực hiện
trong các chime.
2, Các chi phí cho mỗi phân mảnh của chuỗi đoạn. Điều này bao
gồm chi phí trình biên dịch thực hiện mã vô hướng cho phân
mảnh mỗi khối, Tloop, cộng với chi phí khởi động vector cho mỗi
đoạn, Tstart.

Ở đó cũng có thể là một chi phí cố định liên quan đến việc thiết lập
trình tự thời gian các vector đầu tiên. Trong các bộ xử lý vector gần
đây, chi phí này đã trở nên tương đối ít.
Thành phần có thể sử dụng trạng thái thời gian chạy cho một
trình tự thao tác vectơ trên một vector độ dài n, mà chúng ta gọi
làTn:
Các
giá trị của Tstart, Tloop, và Tchime được biên dịch và xử lý phụ thuộc.
Sự phân phối các thanh ghi và sự lập trình của các lệnh ảnh hưởng
đến cả những gì diễn ra trong đoạn và chi phí khởi động của mỗi
đoạn.
Để đơn giản, chúng ta sẽ sử dụng một giá trị bất biến cho Tloop trên
VMIPS. Dựa trên sự đa dạng việc thực hiện phép đo vector Cray-1,
giá trị được chọn là 15 cho Tloop. Thoạt nhìn, bạn có thể nghĩ rằng giá
trị này quá nhỏ. Các chi phí trong mỗi vòng lặp đòi hỏi thiết lập các
vector bắt đầu từ địa chỉ và các bước, tăng dần bộ đếm, và thực hiện
một nhánh vòng lặp. Trên thực tế, những lệnh vô hướng này có thể
hoàn toàn hoặc một phần trùng lặp với các lệnh vector, giảm tối thiểu
chi phí thời gian cho các hàm này. Giá trị của Tloop dĩ nhiên phụ
21
thuộc vào cấu trúc vòng lặp, nhưng sự phụ thuộc là nhỏ so với mối
quan hệ giữa các mã vector và các giá trị của Tchime và Tstart.
Ví dụ 1:
Thời gian thực hiện trên VMIPS cho các thao tác vector A = B × s
như thế nào, biết rằng s là vô hướng và độ dài của vector A và B là
200?
Trả lời:
Giả sử địa chỉ của A và B ban đầu ở trong Ra và Rb, s ở Fs, và gọi
lại cho MIPS (và VMIPS) R0 luôn luôn là 0. Từ (200 mod 64) = 8, lần
lặp đầu tiên vòng lặp phân mảnh sẽ thực hiện đối với độ dài vector

của 8 phần tử, và lần lặp sau sẽ thực hiện đối với độ dài vector của
64 phần tử. Địa chỉ byte của phân đoạn kế tiếp của mỗi vector bằng
tám lần so với độ dài vector. Vì độ dài vectơ hoặc là 8 hoặc là 64
nên chúng ta tăng thanh ghi địa chỉ bằng 8 × 8 = 64 vào sau phân
đoạn đầu tiên và 8 × 64 = 512 cho các phân đoạn sau đó. Tổng số
byte trong vector là 8 × 200 = 1600, và thử nghiệm của chúng ta
được hoàn thành bằng cách so sánh địa chỉ của đoạn vector kế tiếp
với địa chỉ ban đầu cộng với 1600. Đây là mã thực tế:
DADDUI R2,R0,#1600 ; tổng số byte # trong vector
DADDU R2,R2,Ra ; Địa chỉ cuối của vector A
DADDUI R1,R0,#8 ; Nạp vào độ dài phân đoạn thứ nhất
MTC1 VLR,R1 ; Độ dài vector nạp vào VLR
DADDUI R1,R0,#64 ; Độ dài theo byte của phân đoạn một
DADDUI R3,R0,#64 ; Độ dài vector các phân đoạn khác
Loop: LV V1,Rb ; Nạp B vào
MULVS.D V2,V1,Fs ; vector * vô hướng
SV Ra,V2 ; lưu A
DADDU Ra,Ra,R1 ; địa chỉ phân đoạn kế tiếp của A
DADDU Ra,Rb,R1 ; địa chỉ phân đoạn kế tiếp của B
DADDUI R1,R0,#512 ; nạp byte vào khoảng trống đoạn tiếp
MTC1 VLR,R3 ; thiết lập độ dài đến 64 phần tử
DSUBU R4,R2,Ra ; vào cuối A
BNEZ R4,Loop ; nếu không, quay lại
22
Ba lệnh vector trong vòng lặp là phụ thuộc và phải đi vào ba phân
đoạn, do đó
T
chime = 3. Chúng ta hãy sử dụng công thức cơ bản:
Giá trị của T
start

là tổng của:

12 chu kỳ đồng hồ khởi động vector nạp

7-chu kỳ đồng hồ khởi động cho nhân

12-chu kỳ đồng hồ khởi động để lưu trữ
Như vậy, giá trị của Tstart được cho trước
Vậy, giá trị chung trở thành
Thời gian thực hiện mỗi phần tử với tất cả các chi phí khởi động
sau đó được 784/200= 3,9, so với xấp xỉ chime của ba. Chúng ta sẽ
có nhiều hy vọng, cho phép trùng lặp của các đoạn riêng biệt.
Hình G.9 cho thấy mức chi phí và hiệu quả cho mỗi phần tử cho
ví dụ trước (A = B × s) với độ dài vector khác nhau. Mô hình đếm
chime sẽ dẫn đến 3 chu kỳ đồng hồ cho mỗi phần tử, trong khi hai
nguồn chi phí thêm 0,9 chu kỳ đồng hồ giới hạn cho mỗi phần tử.
Các phần tiếp theo giới thiệu nâng cao làm giảm thời gian này.
Chúng ta sẽ xem cách để giảm số lượng các phân đoạn và do đó số
lượng các chime sử dụng kỹ thuật gọi là chuỗi. Các chi phí vòng lặp
có thể được giảm thêm sự trùng lặp thực hiện các vector và lệnh vô
hướng, cho phép chi phí vòng lặp vô hướng trong một lần lặp lại sẽ
được thực hiện trong khi vector lệnh ở việc trước đã hoàn tất. Cuối
cùng, chi phí khởi động vector cũng có thể được loại bỏ, bằng cách
sử dụng kỹ thuật cho phép trùng lặp của lệnh vector trong phân đoạn
riêng biệt.
23
3.2 Các bước vector
Vấn đề thứ hai trong phần này là vị trí trong bộ nhớ của các phần tử liền
kề trong vector có thể không phải là tuần tự. Hãy xem xét đoạn mã nhân ma
trận đơn giản :

do 10 i = 1,100
do 10 j = 1,100
A(i,j) = 0.0
do 10 k = 1,100
10 A(i,j) = A(i,j)+B(i,k)*C(k,j)
Theo lệnh có nhãn 10 chúng ta có thể thực hiện phép nhân mỗi
hàng của B với mỗi cột của C và phân mảnh bên trong vòng lặp với k
là biến chỉ số.
24
Hình G.9 Tổng thời gian thực hiện mỗi phần tử và tổng chi phí thời gian
cho mỗi phần tử đối với độ dài vector ví dụ 1 cho ở trên. Đối với vectơ ngắn
tổng thời gian khởi động là hơn một nửa tổng số thời gian, trong khi đối với
vectơ dài giảm đến khoảng một phần ba tổng số thời gian. Những bước nhảy
đột ngột xảy ra khi độ dài vector vượt bội số của 64, buộc phải thêm sự lặp
đi lặp lại của các mã và phân mảnh thực hiện tập lệnh vector. Thao tác này
tăng Tn bằng Tloop + Tstart.
Để làm như vậy, chúng ta phải xem xét các phần tử lền kề trong B và
phần tử liền kề trong C được xử lý. Khi mảng được cấp phát bộ nhớ, nó
được tuyến tính hóa và phải sắp xếp trật tự trong cả hàng chính hoặc cột
chính. Sự tuyến tính hóa này có nghĩa là hoặc phần tử trong hàng hoặc phần
tử trong cột không liền kề trong bộ nhớ. Chẳng hạn, nếu vòng lặp trước được
viết trong FORTRAN, trật tự cấp phát cột chính,phần tử B được truy cập
bằng lần lặp lại trong vòng lặp bên trong được tách riêng bằng kích thước
hàng nhân với 8 (số byte cho mỗi mục) cho tổng số là 800 byte. Chúng ta
thấy rằng tách có thể được sử dụng để cải thiện bộ nhớ cache –dựa vào hệ
thống. Đối với các bộ vi xử lý vector mà không có bộ nhớ cache, chúng ta
cần một kỹ thuật để tìm nạp phần tử của vectơ không liền kề trong bộ nhớ.
Khoảng cách các phần tử riêng biệt đó được tập hợp vào thanh ghi đơn
được gọi là bước. Trong ví dụ này, dùng sắp xếp cột chính cho ma trận có
nghĩa là ma trận C có bước của 1, hoặc 1 từ gấp đôi (8 byte), tách các phần

tử liên tiếp, và ma trận B có bước của 100, hoặc 100 từ gấp đôi (800 byte).
Mỗi một lần vectơ được nạp vào thanh ghi vector như thể có phần tử liền kề
hợp lý. Vì vậy một bộ xử lý thanh ghi vector có thể xử lý các bước lớn hơn
một, gọi là bước đơn vị không , chỉ sử dụng thao tác vector nạp và lưu trữ
với khả năng của bước. Đây là khả năng truy cập không tuần tự bộ nhớ và
để phục hồi bộ nhớ vào cấu trúc dày đặc là một trong những ưu thế chủ yếu
của bộ xử lý vector trên một vi xử lý dựa vào bộ nhớ Cache. Các bộ nhớ
Cache vốn đã xử lý dữ liệu với đơn vị bước, do đó, trong khi tăng kích thước
25

×