Tại sao tất cả lõi trong CPU luôn có cùng một tốc độ?

Trên phần hỏi đáp của trang SuperUser, người đọc Jamie đã đăng một câu hỏi khi cô muốn biết vì sao các lõi của CPU lại có cùng một tốc độ.

Khi mua máy tính mới, bạn sẽ xác định mình sẽ dùng vi xử lý nào dựa trên khối lượng công việc cần thiết. Nếu chơi game thì sẽ cần lõi đơn, nhưng với các phần mềm chỉnh sửa video thì có thể cần đa lõi. Trên thị trường, tất cả các CPU dường như đều có cùng một tốc độ, khác biệt chính là đa lõi và đa luồng.

Ví dụ như:

  • Intel Core i5-7600K, tần số ép xung cơ bản (base frequency) 3.80 GHz, 4 lõi, 4 luồng.
  • Intel Core i7-7700K, base frequency 4.20 GHz, 4 lõi, 8 luồng.
  • AMD Ryzen 5 1600X, base frequency 3.60 GHz, 6 lõi, 12 luồng.
  • AMD Ryzen 7 1800X, base frequency 3.60 GHz, 8 lõi, 16 luồng.

Tại sao lại cho đây là nhiều lõi hơn trong khi tất cả các lõi đều có tốc độ xung nhịp (clock speed) như nhau? Tại sao không có tốc độ xung nhịp khác? Ví dụ như 2 lõi lớn và nhiều lõi nhỏ.

Thay vì 4 lõi 4.0 GHz (ví dụ như 4x4 GHz, tối đa 16GHz) sao không phải là 2 lõi chạy 4.0 GHz và 4 lõi chạy 2.0 GHz (ví dụ như 2x4.0 Ghz + 4x2.0 GHz, tối đa 16 GHz)? Lựa chọn thứ hai có phải là tương đương như wordload đơn luồng, nhưng có tiềm năng tốt hơn wordload đa luồng không?

Tôi đặt câu hỏi chung chung như vậy chứ không nói cụ thể tới các CPU được nhắc tới ở trên hay workload cụ thể nào.

Tại sao các lõi trong CPU lại có cùng một tốc độ?
Tại sao các lõi trong CPU lại có cùng một tốc độ?

Người dùng bwDraco trên SuperUser đã có câu trả lời:

Đây được gọi là đa xử lý không đồng nhất (HMP) và được chấp thuận rộng rãi trên các thiết bị di động. Với thiết bị dùng nhân ARM sử dụng big.LITTLE, vi xử lý chứa lõi với khả năng hoạt động và mức tiêu thụ điện khác nhau, ví dụ như một số lõi chạy nhanh và tốn nhiều điện (kiến trúc nhanh hơn và/hoặc tốc độ xung nhịp cao hơn) trong khi lõi khác kém hiệu quả hơn và chậm hơn (kiến trúc thấp hơn và/hoặc tốc độ xung nhịp chậm hơn). Điều này rất hữu ích vì mức tiêu thụ điện có xu hướng tăng bất hợp lý khi bạn tăng mức sử dụng và vượt qua một điểm nhất định. Vấn đề ở đây là làm sao vẫn đáp ứng được nhu cầu khi bạn cần, còn khi không thì có được thời lượng sử dụng lâu nhất.

Trên desktop, mức tiêu thụ điện không phải là vấn đề lớn nên điều này là không cần thiết. Hầu hết các ứng dụng đều muốn mỗi lõi có khả năng làm việc tương tự nhau, lên kế hoạch xử lý cho hệ thống HMP phức tạp hơn cho hệ thống đối xứng (SMP). (Về mặt kỹ thuật, Windows hỗ trợ HMP nhưng chủ yếu cho thiết bị di động sử dụng big.LITTLE).

Hầu hết vi xử lý của desktop và laptop không giới hạn về nhiệt và điện, tới điểm mà một số lõi cần chạy nhanh hơn các lõi khác, thậm chí là rất nhanh. Chúng ta về cơ bản đã bế tắc trong việc tạo ra lõi đơn nhanh nhất, nên việc thay thế một số lõi bằng lõi chậm hơn sẽ không cho phép những lõi còn lại chạy nhanh hơn.

Trong khi có một số vi xử lý desktop có một hoặc 2 lõi có thể chạy nhanh hơn các lõi khác, khả năng này giờ chỉ giới hạn trên những vi xử lý Intel high-end (Turbo Boost Max Technoloty 3.0) và chỉ có được thêm một chút hiệu suất với các lõi chạy nhanh hơn.

Dù có thể thiết kế vi xử lý x86 truyền thống với lõi nhanh, to hơn và lõi nhỏ, chậm hơn để tối ưu hóa workload nặng, điều này sẽ khiến việc thiết kế vi xử lý phức tạp hơn và ứng dụng khó có thể hỗ trợ.

Hãy xem thử hai 2 Kaby Lake nhanh (thế hệ thứ 7) và 8 lõi Goldmont (Atom) chậm. Bạn sẽ có tổng cộng 10 lõi, workload nặng tối ưu hóa cho vi xử lý này có thể mang lại hiệu quả cao hơn vi xử lý 4 lõi Kaby Lake thông thường. Nhưng những lõi khác nhau sẽ có mức hiệu quả khác nhau, lõi chậm thậm chí còn không hỗ trợ một số Instructions mà lõi nhanh có hỗ trợ, như AVX (ARM tránh vấn đề này bằng cách yêu cầu cả lõi “big” và “LITTLE” hỗ trợ cùng Instructions như nhau).

Các ứng dụng đa luồng của Windows giả định rằng mỗi lõi có cùng hoặc gần cùng mức hiệu suất, có thể thực thi cùng một Instructions, nên sự bất đối xứng này sẽ dẫn tới hiệu suất ít lý tưởng hơn, có lẽ thậm chí còn gây crash nếu không hỗ trợ Instructions. Dù Intel có thể điều chỉnh Instructions lõi chậm, nhưng cũng không giải quyết được vấn đề với việc hỗ trợ phần mềm cho các vi xử lý không đồng nhất khác.

Một cách tiếp cận khác khi thiết kế ứng dụng, gần với việc bạn đang nghĩ tới trong câu hỏi của mình, có thể sử dụng GPU để tăng tốc cho các phần song song trong ứng dụng. Điều này có thể làm thông qua API như OpenCL và CUDA. Với giải pháp một chip, AMD khuyến khích phần cứng hỗ trợ GPU Accleration trong APU, kết hợp CPU truyền thống và GPU tích hợp hiệu suất cao trên cùng một con chip, giống HSA (Heterogeneous System Architecture), dù không được thu hút lắm ngoài một số ứng dụng chuyên biệt.

Thứ Hai, 02/10/2017 10:35
3,73 👨 2.105