Sự ra đời của các bộ vi xử lý đa lõi cấp dành cho người tiêu dùng tiết kiệm đặt ra câu hỏi cho nhiều người dùng: làm thế nào để bạn tính toán hiệu quả tốc độ thực của một hệ thống đa lõi? Hệ thống 3Ghz 4 lõi có thực sự là 12Ghz? Đọc tiếp khi chúng tôi điều tra.
Phiên Hỏi & Đáp hôm nay đến với chúng tôi với sự hỗ trợ của SuperUser — một phân nhánh của Stack Exchange, một nhóm các trang web Hỏi & Đáp do cộng đồng thúc đẩy.
Câu hỏi
Người đọc SuperUser NReilingh đã tò mò làm thế nào để tốc độ bộ xử lý cho một hệ thống đa lõi thực sự được tính toán:
Chẳng hạn, có đúng không khi nói rằng một bộ xử lý có bốn lõi, mỗi lõi chạy ở 3GHz trên thực tế là một bộ xử lý chạy ở 12GHz?
Tôi đã từng vướng vào một cuộc tranh cãi “Mac so với PC” (nhân tiện KHÔNG phải là trọng tâm của chủ đề này… hồi cấp hai) với một người quen khẳng định rằng máy Mac chỉ được quảng cáo là máy 1Ghz vì chúng là máy kép. -processor G4s từng chạy ở 500MHz.
Vào thời điểm đó, tôi biết điều này là hogwash vì những lý do tôi nghĩ là rõ ràng đối với hầu hết mọi người, nhưng tôi vừa thấy một nhận xét trên trang web này về ảnh hưởng của "6 lõi x 0,2GHz = 1,2Ghz" và điều đó khiến tôi phải suy nghĩ lại về việc liệu có một câu trả lời thực sự cho điều này.
Vì vậy, đây là một câu hỏi ít nhiều mang tính triết học / kỹ thuật sâu về ngữ nghĩa của việc tính toán tốc độ đồng hồ. Tôi thấy có hai khả năng:
- Trên thực tế, mỗi lõi thực hiện phép tính x mỗi giây, do đó tổng số phép tính là x (lõi).
- Tốc độ xung nhịp thay vì đếm số chu kỳ mà bộ xử lý trải qua trong không gian một giây, vì vậy, miễn là tất cả các lõi đang chạy ở cùng một tốc độ, tốc độ của mỗi chu kỳ đồng hồ sẽ không đổi cho dù có bao nhiêu lõi. . Nói cách khác, Hz = (core1Hz + core2Hz +…) / lõi.
Vậy đâu là cách thích hợp để biểu thị tổng tốc độ xung nhịp và quan trọng hơn là liệu có thể sử dụng danh pháp tốc độ lõi đơn trên hệ thống đa lõi không?
Câu trả lời
Cộng tác viên SuperUser Mokubai giúp làm sáng tỏ mọi thứ. Anh ấy viết:
Lý do chính khiến bộ vi xử lý lõi tứ 3GHz không bao giờ nhanh bằng lõi đơn 12GHz là do tác vụ chạy trên bộ xử lý đó hoạt động như thế nào, tức là đơn luồng hoặc đa luồng. Luật của Amdahl rất quan trọng khi xem xét các loại tác vụ bạn đang chạy.
Nếu bạn có một nhiệm vụ vốn là tuyến tính và phải được thực hiện chính xác từng bước, chẳng hạn như (một chương trình hoàn toàn đơn giản)
10: a = a + 120: Cứ 10Sau đó, nhiệm vụ phụ thuộc nhiều vào kết quả của lần vượt qua trước đó và không thể chạy nhiều bản sao của chính nó mà không làm hỏng giá trị của
'a'vì mỗi bản sao sẽ nhận được giá trị của'a'vào những thời điểm khác nhau và viết lại nó theo cách khác. Điều này hạn chế tác vụ ở một luồng duy nhất và do đó tác vụ chỉ có thể chạy trên một lõi tại bất kỳ thời điểm nào, nếu nó chạy trên nhiều lõi thì lỗi đồng bộ hóa sẽ xảy ra. Điều này giới hạn nó ở 1/2 sức mạnh cpu của hệ thống lõi kép hoặc 1/4 trong hệ thống lõi tứ.Bây giờ hãy thực hiện một nhiệm vụ chẳng hạn như:
10: a = a + 120: b = b + 130: c = c + 140: d = d + 150: Cứ 10Tất cả các dòng này là độc lập và có thể được chia thành 4 chương trình riêng biệt như chương trình đầu tiên và chạy cùng lúc, mỗi dòng có thể sử dụng hiệu quả toàn bộ sức mạnh của một trong các lõi mà không gặp bất kỳ vấn đề đồng bộ hóa nào, đây là nơi Luật của Amdahl đi vào nó.
Vì vậy, nếu bạn có một ứng dụng đơn luồng thực hiện các phép tính bạo lực, bộ xử lý 12GHz đơn lẻ sẽ thắng, nếu bạn bằng cách nào đó có thể chia tác vụ thành các phần riêng biệt và đa luồng thì 4 lõi có thể đạt đến gần, nhưng không hoàn toàn đạt được, cùng hiệu suất, theo Định luật Amdahl.
Điều chính mà một hệ thống nhiều CPU mang lại cho bạn là khả năng đáp ứng. Trên một máy lõi đơn đang làm việc chăm chỉ, hệ thống có thể có vẻ chậm chạp vì hầu hết thời gian có thể được sử dụng bởi một tác vụ và các tác vụ khác chỉ chạy trong khoảng thời gian ngắn giữa tác vụ lớn hơn, dẫn đến hệ thống có vẻ chậm chạp hoặc hoạt động . Trên hệ thống đa lõi, tác vụ nặng sẽ nhận một lõi và tất cả các tác vụ khác chơi trên các lõi khác, thực hiện công việc của chúng một cách nhanh chóng và hiệu quả.
Lập luận “6 lõi x 0,2GHz = 1,2Ghz” là rác rưởi trong mọi tình huống ngoại trừ trường hợp các tác vụ hoàn toàn song song và độc lập. Có một số tác vụ có tính song song cao, nhưng chúng vẫn yêu cầu một số hình thức đồng bộ hóa. Phanh tay là một bộ chuyển mã video rất tốt trong việc sử dụng tất cả các CPU có sẵn nhưng nó yêu cầu một quy trình cốt lõi để giữ cho các luồng khác chứa đầy dữ liệu và thu thập dữ liệu mà chúng được thực hiện với.
- Trên thực tế, mỗi lõi thực hiện phép tính x mỗi giây, do đó tổng số phép tính là x (lõi).
Mỗi lõi có khả năng thực hiện phép tính x mỗi giây, giả sử khối lượng công việc là phù hợp song song, trên một chương trình tuyến tính, tất cả những gì bạn có là 1 lõi.
- Tốc độ xung nhịp thay vì đếm số chu kỳ mà bộ xử lý trải qua trong không gian một giây, vì vậy, miễn là tất cả các lõi đang chạy ở cùng một tốc độ, tốc độ của mỗi chu kỳ đồng hồ sẽ không đổi cho dù có bao nhiêu lõi. . Nói cách khác, Hz = (core1Hz + core2Hz +…) / lõi.
Tôi nghĩ thật là sai lầm khi nghĩ rằng 4 x 3GHz = 12GHz, đã cho phép toán học hoạt động, nhưng bạn đang so sánh quả táo với quả cam và tổng là không đúng, GHz không thể đơn giản được cộng với nhau cho mọi tình huống. Tôi sẽ thay đổi nó thành 4 x 3GHz = 4 x 3GHz.
Có điều gì đó để thêm vào lời giải thích? Tắt âm thanh trong các bình luận. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange am hiểu công nghệ khác? Kiểm tra toàn bộ chuỗi thảo luận tại đây .