Làm thế nào để CPU đa lõi hoạt động?


5

Tôi biết, tiêu đề câu hỏi mơ hồ, nhưng câu hỏi chính của tôi là, 1 lõi có phải chỉ thực hiện một chương trình không? Liệu "đa nhiệm" ở cấp độ CPU có hoạt động bằng cách chuyển đổi giữa các tác vụ không và nếu có thì tại sao? Tại sao CPU không thể hoạt động trên nhiều tác vụ cùng một lúc? Chúng có hàng tỷ bóng bán dẫn, tại sao một số bóng bán dẫn không thể hoạt động trên một vấn đề trong khi những cái khác hoạt động trên một vấn đề khác? nó là một hạn chế phần cứng, hay chỉ là một hạn chế hệ điều hành?


2
Đáng chú ý: CPU Intel làm có khái niệm "nhiệm vụ", nhưng hệ điều hành bỏ qua chúng và thực hiện nhiệm vụ chuyển đổi bằng tay.
Mehrdad

Câu trả lời:


2

Một bóng bán dẫn không thể "làm việc trên một vấn đề". Đó là một khối xây dựng cơ bản của CPU, vô dụng, nhưng được yêu cầu để xây dựng các cổng logic (sau đó có thể tính toán các hoạt động đơn giản như bổ sung, v.v ...). Có rất nhiều phần cứng trong một lõi, không chỉ là một bóng bán dẫn.

Cũng có nhiều thứ trong CPU hơn là chỉ "làm công cụ". Có trình quản lý bộ nhớ ảo, trình quản lý bộ đệm phần cứng, các giao diện khác nhau để kết nối CPU với bo mạch chủ và với bộ nhớ hệ thống, v.v ... CPU đa lõi thường chia sẻ rất nhiều phần cứng bên trong CPU thực tế.

"Chương trình" là một khái niệm phần mềm - CPU không biết nó là gì. Tất cả các CPU làm là thực hiện các hoạt động được gửi bởi hệ điều hành. Theo nghĩa này, một CPU lõi đơn chỉ có thể thực hiện một hoạt động logic tại một thời điểm. Nhưng bạn vẫn có thể thực hiện nhiều công việc cùng một lúc ngay cả trên bộ xử lý lõi đơn vì hệ điều hành chuyển đổi chương trình hiện đang chạy với tốc độ rất nhanh. CPU đa lõi cho phép bạn chạy nhiều tác vụ cùng một lúc, có thể được hệ điều hành khai thác bằng cách cho phép bạn chạy nhiều chương trình cùng lúc một cách thoải mái hoặc có một chương trình tận dụng nhiều lõi để chạy nhanh hơn.

Về mặt kỹ thuật, một "chương trình" là một quá trình được chia thành một hoặc nhiều luồng, mỗi luồng độc lập trong thực thi, chúng đều có ngăn xếp riêng, bối cảnh CPU (thanh ghi, v.v.) và các thứ khác, mặc dù chúng vẫn có thể giao tiếp Rõ ràng giữa nhau trong quá trình, rõ ràng.


Xin lỗi vì đã phản hồi quá muộn, nhưng điều đó có nghĩa là về mặt lý thuyết có thể cho phép hai hoặc nhiều chương trình sử dụng một phần bóng bán dẫn có sẵn trên CPU không?
MarcusJ

@MarcusJ: Họ làm. Đó là những gì nhiều lõi dành cho.
David Schwartz

2

Chu trình cổ điển mà CPU tuân theo là:

Hướng dẫn tìm nạp -> Giải mã nó -> Thực thi nó

Lý do là hầu hết các vấn đề mà mọi người trong lịch sử muốn giải quyết với máy tính đều liên quan đến một số bước, từng bước một và theo thứ tự, trong đó kết quả của một số bước đó có thể ảnh hưởng đến các bước sau. Với những vấn đề như vậy, nhảy xung quanh và tấn công nó từ giữa bằng cách sử dụng nhiều "công nhân" không hoạt động tốt như vậy. Vì vậy, mô hình này đã phục vụ tốt các loại chương trình, mà thực sự vẫn còn rất phổ biến. (Đó là, cho đến khi kết xuất đồ họa 3D trở nên phổ biến ...)

Mô hình trên đã được tối ưu hóa và sửa đổi qua nhiều năm, tất nhiên. Và công việc đã được tiến triển trong việc đảm bảo ít CPU hơn khi không hoạt động. Ngay cả khi 68000 bạn đã có "pipelining", trong đó nhiều hướng dẫn thực sự là "trong chuyến bay" trong các phần khác nhau của CPU (và đây là lý do tại sao dự đoán nhánh được phát triển, bởi vì nếu bạn có nhiều hướng dẫn, thì phải vứt bỏ kết quả vì một chi nhánh, bạn mất hiệu suất). Hôm nay bạn có những thứ bổ sung ngăn CPU ngừng hoạt động hoặc chờ đợi một cái gì đó, như:

  • bộ đệm (đôi khi ngăn CPU phải chờ bộ nhớ chậm)
  • thực hiện ngoài đơn hàng (sắp xếp lại các hướng dẫn đã tìm nạp vào một đơn hàng thực thi hiệu quả hơn)
  • đăng ký đổi tên (cho phép thực hiện theo thứ tự hoạt động tốt hơn, bằng cách đưa ra hướng dẫn bản sao sổ đăng ký của riêng họ trong khi các hướng dẫn khác hoàn thành công việc của họ)

Vì vậy, mỗi bộ xử lý hoặc lõi chứa một số hệ thống con hoạt động cùng nhau để diễn giải và thực hiện một luồng lệnh. Trong một nghĩa nào đó, các bộ phận của CPU hiện đại thực sự đang làm việc trên một cái gì đó và các bộ phận khác đang làm việc trên một cái gì đó khác, cùng một lúc.

Nhưng, trong khi chúng có thể được thực hiện rất hiệu quả bằng cách sử dụng các kỹ thuật trên, cuối cùng tất cả chúng đều hoạt động cùng nhau trên cùng một luồng hướng dẫn. Vì vậy, họ không thể hoàn toàn độc lập với nhau. Nếu bạn muốn thực thi hai luồng lệnh cùng một lúc, bạn cần hai CPU hoặc lõi.

Một hệ điều hành đa nhiệm hiện đại đang nảy giữa các luồng lệnh khác nhau được lưu trữ (tức là các chương trình) trong bộ nhớ. Những gì HĐH làm là cắt chương trình khi nó chiếm quá nhiều thời gian (hầu hết các CPU được thiết kế cho môi trường đa nhiệm đều có bộ đếm thời gian gây ra IRQ sau một khoảng thời gian nhất định hoặc cơ chế tương tự như vậy) hoặc chuyển sang một tác vụ khác nếu quá trình đang chờ trên một số loại I / O hoặc đầu vào. Nó không bao giờ thực hiện hai lệnh cùng một lúc trên một CPU.

Tôi nghĩ một cái gì đó giống như ý tưởng mà bạn đang nói đến đã được thử với kiến trúc Itanium và đó là kiến trúc VLIW . Đọc bài viết trên Wikipedia, nó giải thích mọi thứ tốt hơn và sâu hơn một chút so với tôi đang cố gắng ở đây.


1

Trên thực tế, phần "chuyển đổi nhiệm vụ" được thực hiện bởi một hệ điều hành. Bộ xử lý là một phần cứng tương đối "ngu ngốc" chỉ "bẻ số". Từ quan điểm kỹ thuật, bộ xử lý không thể hoạt động trên nhiều tác vụ, bởi vì tất cả các tác vụ được viết với giả định rằng chúng có toàn quyền kiểm soát bộ xử lý tại thời điểm thực thi. Đây là một phần di sản vì yêu cầu tương thích ngược.

Với bộ xử lý đa lõi có sẵn nhiều "bộ xử lý đầy đủ", do đó, nhiều chương trình có thể có "bộ xử lý đầy đủ" vào lúc này, do đó chúng có thể được thực thi đồng thời.


Vâng, tôi biết rằng họ thực sự chỉ là những con số khổng lồ, và mọi thứ cần phải là toán học, đó là bộ xử lý hay HĐH có khả năng tương thích ngược "bộ xử lý đầy đủ"? Cảm ơn câu trả lời btw.
MarcusJ

Cả bộ xử lý và HĐH đều phải đối phó với khả năng tương thích ngược, nhưng bộ xử lý bị hạn chế hơn nhiều theo nghĩa đó, vì nó phải tương thích với bất kỳ HĐH hoặc chương trình nào chạy trên nó (Windows, Linux, v.v.)
Petr Abdulin

1

HĐH chỉ có thể chạy MỘT luồng của một tiến trình trên MỘT lõi tại thời điểm CÙNG, nhưng một khi bạn biết rằng một tiến trình được HĐH chia thành nhiều luồng trước khi chúng có thể chạy trên Core và bất kỳ HĐH hiện đại nào cũng thường chạy khoảng 100 hoặc nhiều quá trình hơn, bạn sẽ có thể tưởng tượng việc chuyển đổi diễn ra nhanh như thế nào, nếu Core có tốc độ 1 GHz, nó sẽ làm mới khoảng một tỷ lần mỗi giây để giải phóng "không gian" cho các luồng sắp tới thực thi.

Gần đây, trong bộ xử lý Intel, bạn có thể đã nghe nói về công nghệ Đa luồng của họ, điều này làm cho MỘT lõi trở thành ABLE để chạy các luồng TWO vào thời điểm CÙNG chính xác, về mặt lý thuyết tăng gấp đôi hiệu suất Core.


Nó sẽ không chuyển chủ đề nhiều hơn khoảng 100 lần một giây (chuyển đổi khá tốn kém). Và công nghệ siêu phân luồng mang lại hiệu suất khoảng 5 đến 20% cho luồng thứ hai cho một bộ xử lý (hoặc ít nhất đó là các phép đo tôi thấy khi nó xuất hiện hoặc muộn hơn một chút).
vonbrand

Có, việc làm mới được thực hiện bởi Tần số đồng hồ có nghĩa là giải phóng bộ xử lý khỏi các hướng dẫn hiện đang thực thi, nó sẽ không còn gì để làm nếu nó chuyển đổi các luồng một tỷ lần mỗi giây. Tôi chắc chắn rằng nó sẽ không vượt quá mức tăng hiệu suất 20% và đó chính xác là lý do tại sao tôi nói "về mặt lý thuyết" nhưng trong sử dụng thực tế, người dùng bình thường sẽ hiếm khi thấy bất kỳ sự khác biệt nào.
Achraf Almouloudi
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.