1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Kiến trúc vector Kiến trúc máy tính

12 16 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 518,59 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các tải và lưu trữ vectơ được kết hợp đầy đủ trong quá trình triển khai RV64V giả định của chúng ta để các từ có thể được di chuyển giữa các thanh ghi vectơ và bộ nhớ với băng thông là m

Trang 1

Kiến trúc vector

Kiến trúc vectơ lấy tập hợp các phần tử dữ liệu nằm rải rác trong bộ nhớ, đặt chúng vào các tệp thanh ghi tuần tự lớn, thao tác trên dữ liệu trong các tệp thanh ghi đó, rồi phân tán kết quả trở lại bộ nhớ Một lệnh duy nhất hoạt động trên các vectơ dữ liệu, dẫn đến hàng chục hoạt động thanh ghi trên các phần tử dữ liệu độc lập

Các tệp thanh ghi lớn này hoạt động như bộ đệm được điều khiển bởi trình biên dịch, vừa để che giấu độ trễ của bộ nhớ vừa để tận dụng băng thông bộ nhớ Bởi vì tải và lưu trữ vectơ được phân chia sâu, chương trình chỉ trả độ trễ bộ nhớ dài một lần cho mỗi lần tải vectơ hoặc lưu trữ so với một lần cho mỗi phần tử, do đó phân bổ độ trễ qua 32 phần tử Thật vậy, các chương trình vectơ cố gắng giữ cho bộ nhớ bận rộn

Phần mở rộng RV64V

Các thành phần chính của kiến trúc tập lệnh của RV64V như sau:

-Thanh ghi vectơ—Mỗi thanh ghi vectơ chứa một vectơ duy nhất và RV64V có 32 trong số chúng, mỗi thanh ghi rộng 64 bit Tệp đăng ký vectơ cần cung cấp đủ cổng để cung cấp tất cả các đơn vị chức năng vectơ Các cổng này sẽ cho phép mức độ chồng chéo cao giữa các phép toán vectơ đến các thanh ghi vectơ khác nhau Các cổng đọc và ghi, có tổng số ít nhất 16 cổng đọc và 8 cổng ghi, được kết nối với các đầu vào hoặc đầu ra của đơn vị chức năng bằng một cặp công tắc thanh ngang Một cách để tăng băng thông tệp đăng ký là soạn nó từ nhiều ngân hàng, hoạt động tốt với các vectơ tương đối dài

Trang 2

-Đơn vị chức năng vectơ—Mỗi đơn vị hoàn toàn được định hướng trong quá trình triển khai của chúng tôi và nó có thể bắt đầu hoạt động mới trên mọi chu kỳ đồng hồ Một đơn vị điều khiển là cần thiết để phát hiện các mối nguy, cả mối nguy về cấu trúc đối với các đơn vị chức năng và mối nguy về dữ liệu trên các truy cập thanh ghi.Hình 4.1 cho thấy rằng chúng tôi giả định việc triển khai RV64V có năm đơn vị chức năng Để đơn giản, chúng tôi tập trung vào các đơn vị chức năng dấu phẩy động trong phần này

Đơn vị lưu trữ / tải vectơ—Đơn vị bộ nhớ vectơ tải hoặc lưu trữ một vectơ đến

hoặc từ bộ nhớ Các tải và lưu trữ vectơ được kết hợp đầy đủ trong quá trình triển khai

RV64V giả định của chúng ta để các từ có thể được di chuyển giữa các thanh ghi vectơ và bộ nhớ với băng thông là một từ trên mỗi chu kỳ đồng hồ, sau độ trễ ban đầu Đơn vị này cũng sẽ thường xử lý các tải và lưu trữ vô hướng

-Một tập hợp các thanh ghi vô hướng—Tương tự như vậy, thanh ghi vô hướng có thể cung cấp dữ liệu làm đầu vào cho các đơn vị chức năng vectơ, cũng như tính toán các địa chỉ để chuyển đến đơn vị tải / lưu trữ vectơ Đây là 31 thanh ghi mục đích chung bình thường và 32 thanh ghi dấu phẩy động của RV64G Một đầu vào của các đơn vị hàm vectơ sẽ chốt các giá trị vô hướng khi chúng được đọc ra khỏi tệp thanh ghi vô hướng

Ta có hình 4.2:

Trang 3

Hình 4.2 liệt kê các hướng dẫn vectơ RV64V mà ta sử dụng trong phần này Mô tả trong Hình 4.2 giả sử rằng các toán hạng đầu vào là tất cả các thanh ghi vectơ, nhưng cũng có các phiên bản của các lệnh này trong đó toán hạng có thể là một thanh ghi vô hướng-Mặc dù các kiến trúc vectơ truyền thống không hỗ trợ hiệu quả các kiểu dữ liệu hẹp, các vectơ tự nhiên thích ứng với các kích thước dữ liệu khác nhau Do đó, nếu một thanh ghi vectơ có 32 phần

tử 64 bit, thì các phần tử 128-16 bit và thậm chí cả các phần tử 256-8 bit đều là các khung nhìn hợp lệ như nhau Sự đa dạng về phần cứng như vậy là lý do tại sao một kiến trúc vector

có thể trở thành các ứng dụng đa phương tiện hữu ích cũng như cho các ứng dụng khoa học -Lưu ý rằng các hướng dẫn RV64V trong Hình 4.2 qua kiểu dữ liệu và kích thước

Trang 4

-Một cải tiến của RV64V là liên kết kiểu dữ liệu và kích thước dữ liệuvới mỗi thanh ghi vectơ, chứ không phải là cách tiếp cận thông thường của hướng dẫn cung cấp thông tin đó

Do đó, trước khi thực hiện các lệnh vectơ, một chương trình cấu hình các thanh ghi vectơ đang được sử dụng để chỉ định kiểu dữ liệu và độ rộng của chúng Hình 4.3 liệt kê các tùy

chọn cho RV64V

Hình 4.3 Kích thước dữ liệu được hỗ trợ cho RV64V giả sử nó cũng có phần mở rộng dấu phẩy động chính xác đơn và kép RVS và RVD Thêm RVV vào thiết kế RISC-V như vậy có nghĩa là đơn vị vô hướng cũng phải thêm RVH, là phần mở rộng lệnh vô hướng để hỗ trợ dấu chấm động IEEE 754 nửa chính xác (16-bit) Bởi vì RV32V sẽ không có các phép toán vô hướng từ kép, nó có thể loại bỏ các số nguyên 64-bit khỏi đơn vị vectơ Nếu triển khai

RISC-V không bao gồm RRISC-VS hoặc RRISC-VD, nó có thể bỏ qua các hướng dẫn dấu phẩy động vectơ Lợi ích của việc nhập thanh ghi động:

- Nhập động cũng cho phép các chương trình vô hiệu hóa các thanh ghi vectơ không sử dụng Do đó, các thanh ghi vectơ được kích hoạt được cấp phát tất cả bộ nhớ vectơ dưới dạng các vectơ dài

- Một phàn nàn về kiến trúc vectơ là trạng thái lớn hơn của chúng có nghĩa là thời gian chuyển đổi ngữ cảnh chậm hơn Việc triển khai RV64V của chúng tôi làm tăng hệ số trạng thái 3: từ 2-32-8¼512 byte đến 2-32-1024¼1536 byte Một tác dụng phụ thú vị của việc nhập thanh ghi động là chương trình có thể định cấu hình các thanh ghi vectơ nhưVô hiệu hóa khi chúng không được sử dụng, vì vậy không cần phải lưu và khôi phục chúng trên một công tắc ngữ cảnh

- Lợi ích thứ ba của việc nhập thanh ghi động là các chuyển đổi giữa các toán hạng kích thước khác nhau có thể được ngầm hiểu tùy thuộc vào cấu hình của các thanh ghi chứ không phải là các hướng dẫn chuyển đổi rõ ràng bổ sung

Các hoạt động của bộ xử lý vector

Chúng ta có thể hiểu rõ nhất về bộ xử lý vectơ bằng cách xem xét vòng lặp vectơ cho RV64V Xét bài toán vector điển hình:

Y = a - X + Y

X và Y là các vectơ, ban đầu nằm trong bộ nhớ, và là một vector vô hướng Vòng lặp

SAXPY hoặc DAXPY tạo thành vòng lặp bên trong của điểm chuẩn Linpack Linpack là một

Trang 5

tập hợp các quy trình đại số tuyến tính và điểm chuẩn Linpack bao gồm các quy trình để thực hiện loại bỏ Gaussian

Ví dụ: Hiển thị mã cho RV64G và RV64V cho vòng lặp DAXPY Đối với ví dụ này, giả sử

rằng X và Y có 32 phần tử và địa chỉ bắt đầu của X và Y đang ở x5 và x6, tương ứng

Bài giải:

Đây là mã RISC-V:

Fld f0,a # Load scalar a

addi x28,x5,#256 # Last address to load

Loop: fld f1,0(x5) # Load X[i]

fmul.d f1,f1,f0 # a x X[i]

fld f2,0(x6) # Load Y[i]

fadd.d f2,f2,f1 # a x X[i] + Y[i]

fsd f2,0(x6) # Store into Y[i]

addi x5,x5,#8 # Increment index to X

addi x6,x6,#8 # Increment index to Y

bne x28,x5,Loop # Check if done

Đây là mã RV64V cho DAXPY:

vsetdcfg 4*FP64 # Enable 4 DP FP vregs

fld f0,a # Load scalar a

vld v0,x5 # Load vector X

vmul v1,v0,f0 # Vector-scalar mult

vld v2,x6 # Load vector Y

vadd v3,v1,v2 # Vector-vector add

vst v3,x6 # Store the sum

vdisable # Disable vector regs

Trang 6

Lưu ý rằng trình hợp dịch xác định phiên bản của các hoạt động vectơ sẽ tạo ra Bởi vì phép nhân có một toán hạng vô hướng, nó tạo ravmul.vs, trong khi phần bổ sung thì không, vì vậy

nó tạo ra vadd.vv

Lệnh ban đầu cấu hình bốn thanh ghi vectơ đầu tiên để chứa dữ liệu dấu phẩy động 64-bit Lệnh cuối cùng vô hiệu hóa tất cả các thanh ghi vectơ Nếu một chuyển đổi ngữ cảnh xảy ra sau lệnh cuối cùng, không có trạng thái bổ sung nào để lưu

Điểm khác biệt ấn tượng nhất giữa mã lệnh và mã hiệu lệnh là bộ xử lý vectơ làm giảm đáng

kể băng thông lệnh động, chỉ thực hiện 8 lệnh so với 258 lệnh cho RV64G Việc giảm này xảy ra do các hoạt động vectơ hoạt động trên 32 phần tử và các lệnh trên đầu tạo thành gần một nửa vòng lặp trên RV64G không có trong mã RV64V Khi trình biên dịch tạo ra các lệnh vectơ cho một trình tự như vậy và mã kết quả dành phần lớn thời gian của nó để chạy ở chế

độ vectơ, mã được cho là vectơ hóa hoặc vectơ Các vòng lặp có thể được vectơ hóa khi chúng không có sự phụ thuộc giữa các lần lặp của một vòng lặp, được gọi là phụ thuộc vòng lặp Một sự khác biệt quan trọng khác giữa RV64G và RV64V là tần suất của các khóa đường ống để thực hiện đơn giản RV64G Trong mã RV64G đơn giản, mọi fadd.d phải đợi fmul.d, và mọi thứ fsd phải đợi cho fadd.d Trên bộ xử lý vectơ, mỗi lệnh vectơ sẽ chỉ dừng lại đối với phần tử đầu tiên trong mỗi vectơ, và sau đó các phần tử tiếp theo sẽ trôi chảy một cách nhẹ nhàng trong đường ống Do đó, các đường ống chỉ được yêu cầu một lần cho mỗi vectơ hướng dẫn,thay vì một lần cho mỗi vectơ yếu tố Các kiến trúc sư vector gọi chuyển tiếp các hoạt động phụ thuộc yếu tố chuỗi, trong đó các hoạt động phụ thuộc được "xâu chuỗi" với nhau

Thời gian thực hiện vector

Thời gian thực hiện của một chuỗi các phép toán vectơ chủ yếu phụ thuộc vào ba yếu tố: + độ dài của các vectơ toán hạng

+ nguy cơ cấu trúc giữa các phép toán

+ sự phụ thuộc vào dữ liệu

Tất cả các máy tính vectơ hiện đại đều có đơn vị hàm vectơ với nhiều đường ống song song (hoặc làn đường) có thể tạo ra hai hoặc nhiều kết quả cho mỗi chu kỳ đồng hồ, nhưng chúng cũng có thể có một số đơn vị chức năng không được phân chia hoàn toàn Để đơn giản, việc triển khai RV64V của chúng tôi có một làn với tốc độ khởi tạo là một phần tử trên mỗi chu

kỳ đồng hồ cho các hoạt động riêng lẻ Do đó, thời gian thực hiện trong các chu kỳ đồng hồ cho một lệnh vectơ đơn lẻ là xấp xỉ độ dài vectơ Để đơn giản hóa việc thảo luận về thực thi

Trang 7

vectơ và hiệu suất vectơ, ta sử dụng khái niệm hộ tống, là tập hợp các lệnh vectơ có khả năng thực thi cùng nhau

Từng cách tối ưu hóa kiến trúc vectơ và Phụ lục G đi sâu hơn.

Một ưu điểm quan trọng của tập lệnh vectơ là nó cho phép phần mềm chuyển một lượng lớn công việc song song sang phần cứng chỉ bằng một lệnh ngắn duy nhất Một lệnh vectơ có thể bao gồm điểm số của các hoạt động độc lập nhưng được mã hóa theo cùng một số bit như một lệnh vô hướng thông thường Ngữ nghĩa song song của một lệnh vectơ cho phép một triển khai thực hiện các hoạt động phần tử này bằng cách sử dụng một đơn vị chức năng có liên kết sâu, như trong triển khai RV64V mà chúng tôi đã nghiên cứu cho đến nay; một mảng các đơn vị chức năng song song; hoặc sự kết hợp của các đơn vị chức năng song song và pipelined.Hình 4.4 minh họa cách cải thiện hiệu suất vectơ bằng cách sử dụng các đường ống dẫn song song để thực hiện lệnh thêm vectơ

Mỗi làn chứa một phần của tệp đăng ký vectơ và một đường dẫn thực thi từ mỗi đơn vị chức năng vectơ Mỗi đơn vị chức năng vectơ thực hiện các lệnh vectơ với tỷ lệ một nhóm phần tử trên mỗi chu kỳ bằng cách sử dụng nhiều đường ống, một trên mỗi làn đường Làn đầu tiên chứa phần tử đầu tiên (phần tử 0) cho tất cả các thanh ghi vectơ, và do đó, phần tử đầu tiên

Trang 8

trong bất kỳ lệnh vectơ nào sẽ có toán hạng nguồn và đích của nó nằm trong làn đầu tiên Việc phân bổ này cho phép đường ống số học cục bộ đến làn đường hoàn thành hoạt động

mà không cần giao tiếp với các làn đường khác

Thêm nhiều làn đường là một kỹ thuật phổ biến để cải thiện hiệu suất vectơ vì nó yêu cầu tăng độ phức tạp điều khiển một chút và không yêu cầu thay đổi mã máy hiện có Nó cũng cho phép các nhà thiết kế đánh đổi diện tích khuôn, tốc độ xung nhịp, điện áp và năng lượng

mà không phải hy sinh hiệu suất cao nhất Nếu tốc độ đồng hồ của một bộ xử lý vectơ giảm một nửa, số làn đường tăng gấp đôi sẽ giữ nguyên hiệu suất cao nhất

Thanh ghi độ dài vectơ: Xử lý các vòng lặp không bằng 32

Một bộ xử lý thanh ghi vectơ có độ dài vectơ tự nhiên được xác định bởi độ dài vectơ lớn nhất(mvl)

Xét mã sau:

for (i=0;i<n;i++)

Y[i]=a*X[i] +Y[i];

Kích thước của tất cả các phép toán vectơ phụ thuộc vào n, thậm chí có thể không được biết cho đến thời gian chạy Giá trị của n cũng có thể là một tham số của một thủ tục có chứa vòng lặp trước đó và do đó có thể thay đổi trong quá trình thực thi

Giải pháp cho những vấn đề này là thêm một Thanh ghi độ dài vectơ (vl) Các vl kiểm soát độ dài của bất kỳ hoạt động vectơ nào, bao gồm tải hoặc lưu trữ vectơ Điều này giải quyết vấn

Trang 9

đề của chúng ta miễn là độ dài thực nhỏ hơn hoặc bằng độ dài vectơ lớn nhất (mvl) Tham số này có nghĩa là độ dài của thanh ghi vectơ có thể phát triển trong các thế hệ máy tính sau này

mà không cần thay đổi tập lệnh

Mã RV64V cho vector DAXPY cho bất kỳ giá trị nào của n

vsetdcfg 2 DP FP # Enable 2 64b Fl.Pt registers

fld f0,a # Load scalar a

loop: setvl t0,a0 # vl = t0 = min(mvl,n)

vld v0,x5 # Load vector X

slli t1,t0,3 # t1 = vl * 8 (in bytes)

add x5,x5,t1 # Increment pointer to X by vl*8

vmul v0,v0,f0 # Vector-scalar mult

vld v1,x6 # Load vector Y

vadd v1,v0,v1 # Vector-vector add

sub a0,a0,t0 # n -= vl (t0)

vst v1,x6 # Store the sum into Y

add x6,x6,t1 # Increment pointer to Y by vl*8

bnez a0,loop # Repeat if n != 0

vdisable # Disable vector regs

Xử lý câu lệnh IF trong vòng lặp vectơ

Xét vòng lặp :

For(i= 0; i<64; i++)

If(X[i] != 0)

X[i] = X[i] – Y[i];

Vòng lặp này thường không thể được vectơ hóa vì thực thi có điều kiện của phần thân; tuy nhiên, nếu vòng lặp bên trong có thể được chạy cho các lần lặp mà X [i]6¼0, thì phép trừ có thể được vector hóa Phần mở rộng phổ biến cho khả năng này là điều khiển vector-mặt nạ Trong RV64V, các thanh ghi vị từ giữ mặt nạ và về cơ bản cung cấp việc thực thi có điều kiện đối với mỗi hoạt động phần tử trong một lệnh vectơ Các thanh ghi này sử dụng một vectơ Boolean để điều khiển việc thực thi một lệnh vectơ, cũng giống như các lệnh được thực thi có

Trang 10

điều kiện sử dụng một điều kiện Boolean để xác định xem có thực thi một lệnh vô hướng hay không Khi đăng ký vị từ p0 được thiết lập, tất cả các lệnh vectơ sau chỉ hoạt động trên các phần tử vectơ có mục nhập tương ứng trong thanh ghi vị từ là 1 Các mục nhập trong thanh ghi vectơ đích tương ứng với số 0 trong thanh ghi mặt nạ không bị ảnh hưởng bởi hoạt động vectơ Giống như thanh ghi vectơ, thanh ghi vị từ được cấu hình và có thể bị vô hiệu hóa Việc kích hoạt thanh ghi vị từ sẽ khởi tạo nó trong tất cả 1 s, có nghĩa là các lệnh vectơ tiếp theo hoạt động trên tất cả các phần tử vectơ

Hình 4.6: thanh ghi

Ngân hàng bộ nhớ: Cung cấp băng thông cho các đơn vị lưu trữ / tải vectơ

Hành vi của đơn vị vectơ tải / lưu trữ phức tạp hơn đáng kể so với các đơn vị chức năng số học Thời gian khởi động tải là thời gian để đưa từ đầu tiên từ bộ nhớ vào thanh ghi Nếu phần còn lại của vectơ có thể được cung cấp mà không bị đình trệ, thì tốc độ khởi tạo vectơ bằng tốc độ mà các từ mới được tìm nạp hoặc lưu trữ Không giống như các đơn vị chức năng đơn giản hơn, tốc độ khởi tạo có thể không nhất thiết phải là 1 chu kỳ đồng hồ vì các gian hàng của ngân hàng bộ nhớ có thể làm giảm thông lượng hiệu quả

Hầu hết các bộ xử lý vectơ sử dụng các ngân hàng bộ nhớ, cho phép một số truy cập độc lập thay vì xen kẽ bộ nhớ đơn giản vì ba lý do:

1 Nhiều máy tính vectơ hỗ trợ nhiều lần tải hoặc lưu trữ trên mỗi chu kỳ đồng hồ, và thời gian chu kỳ của ngân hàng bộ nhớ thường lớn hơn nhiều lần so với thời gian chu kỳ của bộ xử

lý Để hỗ trợ truy cập đồng thời từ nhiều tải hoặc nhiều cửa hàng, hệ thống bộ nhớ cần có nhiều ngân hàng và cần có khả năng kiểm soát địa chỉ tới các ngân hàng một cách độc lập

2 Hầu hết các bộ xử lý vectơ đều hỗ trợ khả năng tải hoặc lưu trữ các từ dữ liệu không theo trình tự Trong những trường hợp như vậy, cần có địa chỉ ngân hàng độc lập, thay vì xen kẽ

3 Hầu hết các máy tính vectơ hỗ trợ nhiều bộ xử lý chia sẻ cùng một hệ thống bộ nhớ, vì vậy mỗi bộ xử lý sẽ tạo ra dòng địa chỉ riêng biệt của riêng nó

Stride: Xử lý mảng đa chiều trong kiến trúc vectơ

Xét ma trận nhân trong C:

for (i = 0; i < 100; i=i+1)

for (j = 0; j < 100; j=j+1) {

Ngày đăng: 14/12/2021, 15:35

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w