Hướng dẫn sử dụng trên mỗi chu kỳ là gì?


23

Tôi đã tìm hiểu thêm một chút về cách thức hoạt động của bộ xử lý, nhưng tôi chưa thể tìm thấy câu trả lời thẳng về hướng dẫn trên mỗi chu kỳ.

Chẳng hạn, tôi có ấn tượng rằng một CPU bốn lõi có thể thực hiện bốn lệnh trong mỗi chu kỳ, do đó, CPU bốn lõi chạy ở tốc độ 2Ghz sẽ thực hiện 8 tỷ hoạt động mỗi giây. Đây có phải là trường hợp?

Tôi chắc chắn rằng nó quá đơn giản hóa mọi thứ, nhưng nếu có một hướng dẫn hoặc thứ gì khác mà tôi có thể sử dụng để tự mình thẳng thắn, tôi chắc chắn cởi mở với các ý tưởng.


Không, đó không phải là trường hợp. CPU x86 hiện đại có thể duy trì ba hướng dẫn cho mỗi lõi trong mỗi chu kỳ trong điều kiện lý tưởng trong khi một số hướng dẫn có thể yêu cầu hàng chục chu kỳ.
David Schwartz

Câu trả lời:


22

Các từ khóa bạn có thể nên tìm kiếm là CISC , RISCkiến trúc siêu khối .

CISC

Trong kiến ​​trúc CISC (x86, 68000, VAX), một lệnh rất mạnh, nhưng phải mất nhiều chu kỳ để xử lý. Trong các kiến ​​trúc cũ, số lượng chu kỳ đã được cố định, ngày nay số chu kỳ trên mỗi lệnh thường phụ thuộc vào các yếu tố khác nhau (nhấn / bỏ bộ đệm, dự đoán nhánh, v.v.). Có bảng để tra cứu những thứ đó. Thông thường cũng có những điều kiện để thực sự đo lường bao nhiêu chu kỳ một hướng dẫn nhất định trong các trường hợp nhất định (xem bộ đếm hiệu suất ).

Nếu bạn quan tâm đến các chi tiết cho Intel, Hướng dẫn tham khảo tối ưu hóa Intel 64 và IA-32 là một cuốn sách rất đáng đọc.

RISC

Kiến trúc RISC (ARM, PowerPC, SPARC) thường có nghĩa là một lệnh rất đơn giản chỉ mất một vài (thường chỉ một) chu kỳ.

Siêu âm

Nhưng bất kể CISC hay RISC đều có kiến ​​trúc siêu khối. CPU không xử lý hết lệnh này đến lệnh khác nhưng hoạt động đồng thời trên nhiều lệnh, rất giống với dây chuyền lắp ráp.

Hậu quả là: Nếu bạn chỉ cần tra cứu các chu kỳ cho mọi hướng dẫn của chương trình và sau đó thêm tất cả chúng, bạn sẽ kết thúc với một con số cao. Giả sử bạn có CPU RISC lõi đơn. Thời gian để xử lý một lệnh đơn có thể không bao giờ nhỏ hơn thời gian của một chu kỳ, nhưng thông lượng tổng thể cũng có thể là một số lệnh trong mỗi chu kỳ.


9
Đối với tôi, sự tương tự "dây chuyền lắp ráp" cho thấy chỉ là đường ống đơn giản, không phải là một kiến ​​trúc siêu khối. Superscalar liên quan đến việc sao chép các phần của phần cứng CPU (ví dụ: giai đoạn của đường ống là một nút cổ chai) để cải thiện thông lượng.
sblair

2
Tôi đang thêm cho ngắn gọn: RISC = tập lệnh giảm; CISC = tập lệnh phức tạp. Giải thích tốt, Ludwig đã chỉ ra tỷ lệ hit / miss cache và (cuối cùng) chỉ ra TLB. Giải thích kiến ​​trúc vi xử lý là không dễ dàng, đặc biệt là nhồi nhét tất cả vào một bài (khá nhỏ gọn)! :)
osij2is

1
Từ những gì tôi nghe được, CPU ngày nay dành rất nhiều thời gian chờ đợi để làm việc để hiển thị từ bộ nhớ chính. Ít nhất đó là câu trả lời tôi nhận được khi tôi hỏi tại sao không có nhiều lõi thực thi hơn trong CPU.
Surfasb

32

Cách tôi thích nghĩ về nó là với một sự tương tự giặt ủi. Hướng dẫn CPU giống như vô số đồ giặt. Bạn cần sử dụng cả máy giặt và máy sấy cho mỗi lần tải. Hãy nói rằng mỗi mất 30 phút để chạy. Đó là chu kỳ đồng hồ. Các CPU cũ sẽ chạy máy giặt, sau đó chạy máy sấy, mất 60 phút (2 chu kỳ) để hoàn thành mỗi lần giặt, mỗi lần.

Đường ống: Một đường ống là khi bạn sử dụng cả hai cùng một lúc - bạn rửa một tải, sau đó trong khi nó khô, bạn rửa tải tiếp theo. Tải đầu tiên mất 2 chu kỳ để kết thúc, nhưng tải thứ hai kết thúc sau 1 chu kỳ nữa. Vì vậy, hầu hết các tải chỉ cần 1 chu kỳ, ngoại trừ tải đầu tiên.

Superscalar: Mang tất cả đồ giặt đến tiệm giặt. Nhận 2 vòng đệm và tải cả hai. Khi hoàn thành, tìm 2 máy sấy và sử dụng cả hai. Bây giờ bạn có thể rửa và làm khô 2 tải trong 60 phút. Đó là 2 tải trong 2 chu kỳ. Mỗi lần tải vẫn mất 2 chu kỳ, nhưng bạn có thể thực hiện thêm chúng ngay bây giờ. Thời gian trung bình bây giờ là 1 tải mỗi chu kỳ.

Superscalar with Pipelining: Rửa 2 lần tải đầu tiên, sau đó trong khi chúng đang khô, tải lên các vòng đệm với 2 lần tải tiếp theo. Bây giờ, 2 lần tải đầu tiên vẫn mất 2 chu kỳ, và sau đó 2 lần tiếp theo kết thúc sau 1 chu kỳ nữa. Vì vậy, hầu hết thời gian, bạn hoàn thành 2 lần tải trong mỗi chu kỳ.

Nhiều lõi: Cung cấp một nửa số đồ giặt của bạn cho mẹ bạn, người cũng có 2 máy giặt và 2 máy sấy. Với cả hai bạn làm việc cùng nhau, bạn có thể hoàn thành gấp đôi. Điều này tương tự như superscalar, nhưng hơi khác nhau. Thay vì bạn phải tự di chuyển tất cả đồ giặt đến và từ mỗi máy, cô ấy có thể làm điều đó cùng lúc với bạn.

Điều này thật tuyệt, chúng ta có thể giặt gấp tám lần so với trước đây trong cùng một khoảng thời gian, mà không phải tạo ra máy móc nhanh hơn. (Nhân đôi tốc độ đồng hồ: Máy giặt chỉ cần 15 phút để chạy.)

Bây giờ, hãy nói về cách mọi thứ đi sai:

Bong bóng đường ống: Bạn có một vết bẩn không thoát ra được trong quá trình giặt, vì vậy bạn quyết định rửa lại. Bây giờ máy sấy chỉ ngồi đó, chờ đợi để làm gì đó.

Miss Cache: Chiếc xe tải chở đồ bẩn bị kẹt trong giao thông. Bây giờ bạn có 2 máy giặt và 2 máy sấy, nhưng bạn không hoàn thành công việc vì phải chờ.

Tùy thuộc vào tần suất xảy ra sự cố, chúng tôi sẽ không thể luôn hoàn thành 4 lần tải mỗi chu kỳ, do đó, số lượng công việc thực tế có thể thay đổi.

Dự đoán chi nhánh: Chà, bạn bắt đầu giặt quần áo sạch trong trường hợp bạn vấy bẩn chúng sau đó để chúng sạch sẽ ... được rồi, đây là lúc sự tương tự bị phá vỡ ...


Tương tự tốt đẹp. Tôi sẽ đánh cắp nó.
dmckee

6
Và siêu phân luồng cũng giống như có một vài người giặt giũ cùng một tiệm giặt.
Ronald Pottol

1
Dự đoán chi nhánh: bạn bắt đầu giặt quần áo mà bạn nghĩ rằng bạn sẽ cần trong tuần tới
Akash

2
Siêu phân luồng: bạn bắt đầu chấp nhận giặt đồ của người khác và quảng cáo số lượng máy giặt bạn có (1). Chẳng mấy chốc, bạn nhận ra rằng máy giặt của bạn có chỗ cho nhiều hơn chiếc quần bạn đang giặt, không phải là một chiếc quần khác, mà là một cái gì đó nhỏ hơn. Vì vậy, bạn nhồi trong một số vớ, quá. Bây giờ bạn quảng cáo 2 máy giặt và hy vọng rằng mọi người sẽ bỏ đồ giặt đủ đa dạng để bạn luôn "lấp đầy lỗ hổng" với những món đồ nhỏ hơn. Ngay khi anh chàng ony này đi kèm với 10 chiếc quần jean bẩn và 1 đôi vớ làm rơi đồ của anh ta, nó vẫn chậm như mọi khi.
Florenz Kley

@Akash Bạn giặt quần áo thậm chí chưa có vết bẩn, chỉ trong trường hợp?
Kevin Panko

3

Không chính xác. Chu trình bạn đang đề cập đến là chu kỳ đồng hồ và vì hầu hết các đường ống xử lý hiện đại, phải mất vài chu kỳ xung nhịp cho 1 lệnh để thực thi. (Đây là một điều tốt vì nó cho phép các hướng dẫn khác bắt đầu thực hiện ngay cả trước khi lệnh thứ 1 kết thúc.) Giả sử trường hợp lý tưởng nhất, có thể là khoảng 8 tỷ IPC, nhưng tất cả mọi thứ xảy ra như phụ thuộc, bong bóng trong đường ống , các chi nhánh, vv để nó không luôn luôn hoạt động.

Xin lỗi, nó quá phức tạp cho một câu trả lời thẳng. Jon Stokes làm tốt công việc giải thích nó với bài viết này .


2

Những ngày mà người ta có thể tra cứu (hoặc thậm chí ghi nhớ) thời gian chu kỳ cho mỗi hướng dẫn và biết cần bao nhiêu đồng hồ cho một đoạn mã nhất định để hoàn thành đã qua quá lâu đối với các chip cao cấp (nhưng vẫn còn với chúng tôi vi điều khiển). Một lõi CPU hiện đại, có mục đích chung có thể có nhiều bản sao của một số đơn vị thực thi khác nhau trong nhiều đường ống, truy cập bộ nhớ cache nhiều tầng với logic riêng, cộng với dự đoán nhánh và khả năng thực thi đầu cơ. Có nhiều lõi trên một khuôn duy nhất kéo theo logic thống nhất bộ đệm và các phức tạp khác.

Vì vậy, câu trả lời ngắn gọn là: nhiều lõi hơn có nghĩa là có nhiều năng lực hơn để hoàn thành công việc, nhưng không phải là một cách tốt đẹp, có thể dự đoán được .


1

Ludwig đã giải thích sự khác biệt giữa CISC và RISC, nhưng quên đề cập rằng trong khi các hướng dẫn RISC đơn giản và nhanh chóng, chúng chỉ thực hiện một cách riêng lẻ và do đó bạn phải kết hợp nhiều thứ lại với nhau để thực hiện điều tương tự như một lệnh trong bộ xử lý CISC. Do đó, một số hướng dẫn RISC sẽ nhanh hơn, một số khác thì không.


0

Chu kỳ là một khái niệm cốt lõi. Mỗi lõi làm có chu kỳ riêng song song.

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.