Làm thế nào một bộ xử lý có thể thực thi nhiều IPS hơn tần số của nó? [bản sao]


14

Đây là thứ mà tôi dường như không thể quấn lấy đầu. Chỉ cần mỗi bộ xử lý hiện đại có thể thực hiện nhiều lệnh mỗi giây hơn tần số của nó.

Tôi có thể hiểu tại sao bộ xử lý lớp thấp hơn có thể thực thi ít IPS hơn tần số của nó. Chẳng hạn, ATmega328 thực thi khoảng 16 MIPS ở 16 MHZ (hoặc ít nhất đó là những gì tôi đã nói) và Z80 thực thi 0,5 MIPS ở 4 MHz. Nhưng sau đó, Pentium 4 Extreme có thể thực thi hơn 9 GIPS với tốc độ chỉ 3,2 GHz. Đó là khoảng ba hướng dẫn cho mỗi chu kỳ đồng hồ!

Làm thế nào điều này được thực hiện và tại sao điều này không được thực hiện trong các bộ xử lý nhỏ hơn, chẳng hạn như bộ vi điều khiển AVR ?

Tôi tìm thấy tất cả thông tin của mình, ngoại trừ ATmega328, từ đây .


3
Hãy xem Wikipedia để biết các từ buzz như đường ống, kiến ​​trúc siêu vô hướng, thực thi không theo thứ tự, đa luồng đồng thời, đa lõi, mở rộng véc tơ (SSE, ..., AVX), bộ nhớ đệm, v.v. Tất cả trong tất cả các giá trị CPI có thể thấp hơn 1.0.
Paebbels

7
Ý bạn là 9 GIPS cho Pentium 4, không phải MIPS, phải không?
Calimo

5
Tự quảng cáo: Làm thế nào CPU có thể cung cấp nhiều hơn một lệnh trong mỗi chu kỳ? đã được hỏi trên Sàn giao dịch ngăn xếp kỹ thuật điện (câu trả lời của tôi đã được chấp nhận và có lẽ được đánh giá quá cao).
Paul A. Clayton

Tôi đã luôn tự hỏi, liệu tôi có nên bỏ phiếu một cái gì đó nếu nó đã cao như tôi nghĩ không? Hoặc luôn luôn nâng cao nếu tôi nghĩ rằng nỗ lực và chất lượng của một bài đăng xứng đáng nhận được phần thưởng?
Peter Cordes

@PeterCordes Có những triết lý bầu cử khác nhau. Một số tuyên bố "hữu ích" là tiêu chí duy nhất, những người khác coi công đức tương đối (cho câu trả lời). Tôi có xu hướng xem xét số phiếu tuyệt đối ("tốt", "tốt", "tuyệt vời" phù hợp như vậy nên được xem xét) cũng như số phiếu tương đối (giúp trả lời xếp hạng). Đáng ngạc nhiên là Meta.SE dường như không có nhiều về chủ đề này và " Tôi nên bình chọn như thế nào? " Thậm chí không có câu trả lời!
Paul A. Clayton

Câu trả lời:


23

Điều này là do sự kết hợp các tính năng của bộ xử lý hiện đại.

Điều đầu tiên góp phần vào IPS cao là thực tế là các bộ xử lý hiện đại có nhiều đơn vị thực thi có thể hoạt động độc lập. Trong hình ảnh bên dưới (mượn từ Wikipedia: Intel Core Microarch architecture ) bạn có thể thấy ở phía dưới có tám đơn vị thực thi (hiển thị màu vàng) có thể thực hiện đồng thời các lệnh. Không phải tất cả các đơn vị đó đều có thể bảo mật các loại hướng dẫn giống nhau, nhưng ít nhất 5 trong số chúng có thể thực hiện thao tác ALU và có ba đơn vị có khả năng SSE.

nhập mô tả hình ảnh ở đây

Kết hợp với một đường dẫn lệnh dài có thể xếp chồng các lệnh một cách hiệu quả sẵn sàng để các đơn vị đó thực hiện các lệnh ( ngoài trật tự , nếu cần thiết) có nghĩa là một bộ xử lý hiện đại có thể có một số lượng lớn các lệnh ngay lập tức tại bất kỳ thời điểm nào.

Mỗi hướng dẫn có thể mất một vài chu kỳ xung nhịp để thực thi, nhưng nếu bạn có thể song song hóa hiệu quả thực thi của chúng thì bạn có thể tăng cho IPS một cách hiệu quả với chi phí phức tạp của bộ xử lý và đầu ra nhiệt.

Giữ cho các đường ống lớn này có đầy đủ các hướng dẫn cũng cần một bộ đệm lớn có thể được điền sẵn các hướng dẫn và dữ liệu. Điều này góp phần vào kích thước của khuôn và cũng là lượng nhiệt mà bộ xử lý tạo ra.

Lý do điều này không được thực hiện trên các bộ xử lý nhỏ hơn là vì nó làm tăng đáng kể lượng logic điều khiển cần thiết xung quanh các lõi xử lý, cũng như lượng không gian cần thiết và cả nhiệt lượng được tạo ra. Nếu bạn muốn có một bộ xử lý nhỏ, công suất thấp, độ phản hồi cao thì bạn muốn có một đường ống ngắn mà không có quá nhiều thứ "phụ" xung quanh các lõi chức năng thực tế. Vì vậy, thông thường họ giảm thiểu bộ đệm, hạn chế chỉ một trong mỗi loại đơn vị được yêu cầu để xử lý các hướng dẫn và giảm độ phức tạp của mỗi phần.

Họ có thể tạo ra một bộ xử lý nhỏ phức tạp như bộ xử lý lớn hơn và đạt được hiệu suất tương tự, nhưng sau đó các yêu cầu về công suất và làm mát sẽ tăng theo cấp số nhân.


Tôi không bao giờ biết rằng có các đơn vị thực hiện chuyên ngành, và nhiều hơn một trong số họ. Tuy nhiên, sẽ rất tốt nếu có một Arduino siêu thanh. Tôi sẽ không quan tâm đến các yêu cầu năng lượng và làm mát nếu nó có nghĩa là thông lượng nhiều hơn. Cảm ơn câu trả lời.
Jaca

1
Nếu bạn muốn một bộ xử lý siêu thanh, sử dụng một bộ xử lý. Nhưng Arduinos chiếm một vị trí thích hợp cho những người quan tâm đến các yêu cầu về năng lượng và làm mát (và chi phí và độ phức tạp) của các bộ xử lý siêu thanh.
David Schwartz

4

Không khó để tưởng tượng. Một chu kỳ là tất cả những gì cần thiết để chuyển đổi hàng ngàn bóng bán dẫn. Miễn là các hướng dẫn được xếp song song, một chu kỳ có thể đủ để thực hiện tất cả chúng.

Tốt hơn là cố gắng tự giải thích nó, đây là một điểm khởi đầu tốt .


3

Để có được một chút cơ bản hơn câu trả lời của Mokubai:

CPU Superscalar phân tích luồng hướng dẫn cho các phụ thuộc dữ liệu (và khác) giữa các hướng dẫn. Các hướng dẫn không phụ thuộc vào nhau có thể chạy song song.

CPU máy tính để bàn x86 điển hình lấy 16 hoặc 32B hướng dẫn mỗi chu kỳ xung nhịp. Các thiết kế của Intel kể từ Core2 có thể phát hành tối đa 4 hướng dẫn mỗi chu kỳ. (Hoặc 5, nếu có một nhánh so sánh có thể hợp nhất vĩ mô).

Xem câu trả lời hay của Mobukai để biết các liên kết và chi tiết về cách CPU trong thực tế thực hiện nhiệm vụ trích xuất song song mức độ hướng dẫn như khi chúng chạy từ mã mà chúng chạy.

Đồng thời xem http://www.realworldtech.com/sandy-bridge/ và các bài viết tương tự cho các kiến ​​trúc CPU khác để được giải thích sâu hơn về những gì dưới mui xe.


-2

Các câu trả lời trước cho thấy cách một người nhận được nhiều hướng dẫn được thực hiện theo định nghĩa "hướng dẫn" của bộ xử lý và một hình ảnh thực sự là ý định của người hỏi.

Nhưng một nguồn khác của nó có thể là mỗi "lệnh" thực sự là một lượng dữ liệu nhất định được xử lý như một đầu vào lệnh của bộ xử lý. Nếu nguồn của anh ta chỉ đếm những gì bộ xử lý coi là hướng dẫn, thì những điều sau đây không thêm gì. Nhưng nếu nguồn của anh ta đếm tất cả những gì con người sẽ gọi là "lệnh", thì: Thêm vào đó, không phải mọi lệnh đều dài như mọi lệnh khác (một có thể là 12 byte, một lệnh khác có thể là 56 byte, v.v.). Vì vậy, nếu nó tải 64 byte vật liệu mỗi chu kỳ là "một lệnh" (hoặc càng nhiều hướng dẫn đầy đủ càng tốt trước khi đạt 64 byte) và một có sáu hướng dẫn trong 64 byte đó, thì sáu hướng dẫn (như bạn và tôi có thể coi chúng là ) sẽ được hoàn thành trong chu kỳ đó.

Vì nhiều hướng dẫn rất cơ bản (định nghĩa "hợp lý" của chúng tôi) là phần còn lại từ những ngày đầu với độ dài lệnh 8 byte và theo định nghĩa, các hướng dẫn rất cơ bản có lẽ được sử dụng không tương xứng, nên điều này sẽ đi xa hơn để thực hiện nhiều "hướng dẫn" hơn hơn tần số dường như sẽ cho phép.


Điều đó hơi gần với cách thức hoạt động của CPU, nhưng việc tìm nạp nhiều máy trong mỗi chu kỳ chỉ là một phần trong cách hoạt động của CPU siêu khối. (và độ dài trung bình nội bộ giống như 4 byte, đối với x86.) Các đường ống sâu có nghĩa là các lệnh được tìm nạp bây giờ có thể không hoàn thành việc thực hiện trong 15 chu kỳ (hoặc lâu hơn nữa, nếu bị giữ bởi lỗi bộ nhớ cache, nhưng các lệnh không phụ thuộc có thể tiếp tục thực hiện.) Giải thích của bạn không mô tả một thiết kế đường ống nào cả. Cũng không rõ ràng về những gì bạn nghĩ rằng sự khác biệt là giữa 8bit 8086 add al, blvà 80386 add eax, ebx.
Peter Cordes

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.