Sự khác biệt giữa superscalar và bộ xử lý vector là gì?


7

Cả hai đều có thể xử lý nhiều hướng dẫn cùng một lúc, nhưng tôi cho rằng có một sự khác biệt cơ bản giải thích tại sao có hai tên và chúng ta vẫn chưa chuyển sang sử dụng các siêu từ luôn?

Ngoài ra, nếu tôi hiểu chính xác, cả hai lệnh vô hướng và vectơ đều có trong CPU hiện đại, vì vậy tôi cho rằng hai lệnh đó không loại trừ lẫn nhau (các lệnh vô hướng như Mov hoặc add sẽ được thực thi superscalar-ly và ví dụ: sản phẩm chấm sẽ được tính toán -ly trong một số loại ma thuật đen đặc biệt)?


2
Xem xét downvote và closevote, một lời giải thích sẽ được hoan nghênh. Dường như với tôi câu hỏi đó là cụ thể và đủ rõ ràng, và câu hỏi thực sự mà tôi gặp phải liên quan đến phần mềm hoặc phần cứng, theo hướng dẫn.
Lu-ca

Câu trả lời:


3

Một bộ xử lý siêu thanh có khả năng thực hiện song song nhiều lệnh trong một chương trình. Nó thực hiện điều này bằng cách phân tích luồng lệnh để xác định các lệnh nào không phụ thuộc vào nhau và có nhiều đơn vị thực thi trong bộ xử lý để thực hiện công việc đồng thời (ví dụ: nhiều ALU ). Hỗ trợ trình biên dịch thường không bắt buộc để tối ưu hóa mã cho bộ xử lý siêu khối vì chức năng thường được thực hiện hoàn toàn trong phần cứng. 1

Một bộ xử lý vector chứa các hướng dẫn được thiết kế đặc biệt để hoạt động trên toàn bộ các nhóm nhiều giá trị dữ liệu cùng một lúc (được gọi là mảng hoặc vectơ ). Hầu hết các bộ xử lý hiệu suất cao hiện đại đều chứa một số dạng khả năng xử lý vector; ví dụ; lệnh SSE ADDPS có sẵn trong hầu hết các bộ xử lý x86 tính tổng của hai vectơ mỗi vectơ chứa bốn giá trị chính xác đơn. Trình biên dịch, nhà phát triển và hỗ trợ hệ điều hành thường được yêu cầu sử dụng các hướng dẫn vectơ và không phải mọi bộ xử lý, ngay cả trong các thế hệ hiện tại, đều hỗ trợ các hướng dẫn vectơ tiên tiến nhất (ví dụ: bộ xử lý Intel Celeron và Pentium, ngay cả với Kaby Lake , không hỗ trợ AVX ).

Thông tin kỹ thuật khác về cách các bộ xử lý ngày nay đạt được hiệu suất cao có sẵn trong câu trả lời này .


1 Cách tiếp cận thiết kế thay thế và khá bất thường là có nhiều đơn vị thực thi nhưng để trình biên dịch xác định hướng dẫn nào sẽ phát hành cho mỗi đơn vị thực hiện cho mỗi chu kỳ đồng hồ. Đây được gọi là từ hướng dẫn rất dài và thường chỉ được tìm thấy trên các bộ xử lý chuyên dụng.


0

Vì không ai đưa ra câu trả lời, tôi nghĩ rằng tôi đã tìm ra nó trong lúc đó.

Bộ xử lý vô hướng chỉ là một bộ xử lý thông thường, thực hiện các lệnh vô hướng đang làm việc trên một số tại một thời điểm. Không có gì đặc biệt.

Mặt khác, bộ xử lý vector sử dụng các lệnh vector được cho là hoạt động trên nhiều số cùng một lúc. Có các thanh ghi đặc biệt, rộng hơn, dành cho mục đích này (ví dụ: 128 bit xmm * của SSE, trong đó nhiều giá trị có thể được đóng gói, ví dụ, 4 số nguyên 32 bit; AVX-512 giới thiệu các thanh ghi 512 bit là I rộng nhất có thể tìm thấy). Ops vector được thực hiện bởi các đơn vị đặc biệt trong bộ xử lý được thực hiện cho mục đích đó. Một ví dụ điển hình của bộ xử lý vector sẽ là GPU - nó chỉ thực hiện các phép tính vector.

Superscalar là thuật ngữ được sử dụng để biểu thị tối ưu hóa cụ thể cho phép các lệnh vô hướng được thực thi song song, trên các đơn vị thực thi "thông thường" khác nhau (ví dụ: nhiều ALU). Nó chia các hướng dẫn thành nhiều "luồng" (tôi vừa thực hiện thuật ngữ này), sau đó được thực thi cùng một lúc.

Vì vậy, làm thế nào họ khác với các đối tác vector của họ? Hướng dẫn vô hướng không có nghĩa là được thực hiện theo cách đó . Có nhiều mối nguy hiểm có thể xảy ra và ngăn chặn việc thực hiện hoàn toàn song song, chẳng hạn như dữ liệu hoặc phụ thuộc thủ tục. Trong trường hợp đó, việc thực thi lệnh đó sẽ phải chờ các phụ thuộc của nó được thỏa mãn, tạm dừng việc thực hiện "luồng" đó. CPU phải chăm sóc tất cả các phụ thuộc để tránh hỏng dữ liệu, do đó phải đặc biệt cẩn thận trong khi tối ưu hóa việc thực hiện theo cách này.

Nó cũng không giới thiệu bất kỳ hướng dẫn mới nào - mọi thứ trông giống như hoạt động của CPU vô hướng bình thường. Mặt khác, CPU vector có các hướng dẫn đặc biệt cho các hoạt động của vector. Sự khác biệt chính là đối với ops vector, lập trình viên (hay, đúng hơn là trình biên dịch) phải chăm sóc dữ liệu và vì không có sự can thiệp nào với các thanh ghi khác nhau cùng một lúc (hãy nhớ rằng, tất cả các giá trị được đóng gói vào các thanh ghi rộng), nhiều mối nguy hiểm khác nhau được tránh Mặt khác, các CPU siêu phẳng làm hết sức mình để tìm ra các hướng dẫn độc lập với nhau và thực hiện chúng cùng một lúc.


Lưu ý làm thế nào tôi không bao giờ nói bất kỳ loại nào là loại trừ lẫn nhau? Họ không. Các đơn vị vectơ sẽ thực hiện các hướng dẫn vectơ và CPU sẽ cố gắng tìm ra cách tốt nhất để song song hóa các vô hướng. Trên thực tế, tất cả các CPU hiện đại đều hỗ trợ cả các hướng dẫn vectơ (SSE *, 3DNow!, AVX, ...) và các vô hướng (x86) sẽ được thực hiện theo cách "siêu phẳng".


Giải thích tuyệt vời. Sau khi hiểu đầy đủ về lời giải thích của bạn, câu hỏi của tôi là nếu quy trình hỗ trợ các hướng dẫn siêu khối, làm thế nào tôi có thể đảm bảo chương trình C của mình sử dụng các hướng dẫn siêu khối nếu tôi thực hiện một số phép nhân ma trận chẳng hạn. Là một cái gì đó được thực hiện bởi Compiler nếu hướng dẫn superscalar được hỗ trợ?
Whoami
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.