intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Vi Văn Sơn | Ngày: | Loại File: DOC | Số trang:46

141
lượt xem
28
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: TẠI SAO PHẢI DÙNG BỘ XỬ LÝ VECTOR

  1. 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 1
  2. 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. ■ 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 2
  3. đ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 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ộ 3
  4. 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. 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
  5. ■ 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
  6. 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
  7. 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
  8. Đặ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
  9. 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
  10. Trả lời: đây là mã MIPS. ; Nạp vào sự vô hướng L.D F0 d,a ; Nạp vào địa chỉ cuối cùng DADDIU R4, Rx, #512 Vòng lặp : L.D ; Nạp vào X( i ) F2,0 ( Rx ) MUL.D F2 d, F2, F0 ;X×(i) ; Nạp vào Y( i ) L.D F4,0 ( Ry ) Thêm.D F4 d, F4, F2 ;X×(i)+Y(i) ; lưu trữ vào Y ( i ) S.D 0 ( Ry ), F4 ; chỉ mục tăng đến X DADDIU Rx, Rx, #8 ; chỉ mục tăng đến Y DADDIU Ry, Ry, #8 ; tính toán giới hạn DSUBU R20, R4, Rx R20, Vòng lặp ; kiểm tra nếu làm BNEZ Đây là mã VMIPS cho DAXPY. ; Nạp vào sự vô hướng a L.D F0,a ; X véc tơ nạp vào LV V1, Rx ; Nhân véc tơ - vô MULVS.D V2 d, V1, F0 hướng ; Nạp vào véc tơ Y LV V3, Ry ADDV.D V4 d, V2, V3 ; Thêm ; Lưu trữ kết quả SV Ry, V4 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 10
  11. 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 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 11
  12. 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ố 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 : ; Nạp vào Véc tơ X LV V1,Rx ; NhânVéc tơ - vô hướng MULVS.D V2 d, V1, F0 ; Nạp vào Véc tơ Y LV V3, Ry ADDV.D V4 d, V2, V3 ; Thêm ; Lưu trữ kết quả SV Ry, V4 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
  13. 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. 13
  14. 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 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ì: tổng số thời gian đơn vị chức năng Độ sâu ống dẫn = Thời gian chu kỳ đồng hồ 14
  15. 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 15
  16. 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 đồ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. 16
  17. 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. 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 ữ 17
  18. 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 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: ĐỘ DAI VECTOR VÀ CAC ̀ ́ 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ể trung 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ể 18
  19. 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) 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ế con 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à độ dai 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: chung 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 /*tìm để tach ra kích thước dư*/ ́ VL = (n mod MVL) do 1 j = 0,(n / MVL) /*vòng ngoài*/ /* cho độ dài VL chạy*/ do 10 i = low, low + VL - 1 Y(i) = a * X(i) + Y(i) /*thao tác chính*/ 10 continue /*băt đâu vector tiếp theo*/ ́ ̀ low = low + VL 19
  20. /*thiết lập lại độ dài tối đa*/ VL = MVL 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. Tac ́ dung 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ý độ dai 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 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2