Trong bài viết này, chúng ta sẽ cùng nhau khám phá và hiểu rõ hơn về khái niệm về nhân (core) và luồng (thread) trong lĩnh vực khoa học máy tính, và tìm câu trả lời cho những câu hỏi phổ biến trên mạng xã hội và diễn đàn công nghệ.
Core (hay nhân CPU)

Khái niệm về nhân (Core) rất dễ hiểu. Mỗi nhân đại diện cho một đơn vị xử lý trong vi xử lý, có khả năng xử lý độc lập một dãy các chỉ dẫn. Với số lượng nhân càng nhiều trong vi xử lý, mỗi nhân có thể đồng thời thực thi các chỉ dẫn khác nhau.
Với vi xử lý có càng nhiều nhân, khả năng xử lý của bộ vi xử lý đó sẽ tăng lên đáng kể. Tuy nhiên, vẫn còn nhiều câu hỏi khác cần được thảo luận về nhân vi xử lý.
- Một vi xử lý Snapdragon 2.0 GHz với 8 nhân liệu có nghĩa là nó mạnh gấp 8 lần vi xử lý một nhân tương đương? Hay nói cách khác, ta có thể cho rằng 8 * 2.0 = 16.08∗2.0=16.0 GHz?
- Một vi xử lý Intel Core i5 với 2 nhân, 4 luồng nghĩa là sao? Nó liệu có mạnh ngang bằng một vi xử lý 4 nhân thông thường?
Hãy tiếp tục đọc các phần dưới đây, chúng tôi sẽ cùng bạn đi sâu vào vấn đề.
Hyperthreading
Hình ảnh minh họa về Core và Thread của CPU có tiêu đề "Tìm hiểu Core và Thread của CPU" được đính kèm dưới đây:
.
Siêu phân luồng (Hyperthreading) hay Simultaneous Multithreading (SMT) là công nghệ của Intel cho phép mỗi nhân thực của vi xử lý hiện diện như 2 nhân ảo đối với hệ điều hành. Vi xử lý được ghi là có 2 nhân, 4 luồng xử lý hoặc 6 nhân 12 luồng có hỗ trợ SMT. AMD sử dụng thuật ngữ CMT (Cluster-based Multithreading) cho công nghệ tương tự. Trong bài viết này, Hyperthreading sẽ là thuật ngữ được sử dụng chung.
CPU thread và OS thread
"CPU thread là các logical core, hay còn gọi là các nhân của CPU mà hệ điều hành nhìn thấy. Hệ điều hành hiểu những CPU thread này tương đương với những nhân CPU thực sự, và bắt đầu giao cho những nhân này xử lý các tác vụ là các OS thread, điều này dễ gây nhầm lẫn với nhiều người."
Với một vi xử lý có 6 nhân 12 luồng, tức là bạn đang có 12 CPU thread, hay 12 logical core khác nhau. Hệ điều sẽ được phép lên lịch tối đa 12 OS thread riêng biệt vào những core này. Trong cùng một thời điểm, những OS thread đó sẽ được các nhân xử lý (hầu như) song song.
Với vi xử lý trên thì số lượng CPU thread chỉ là 12 mà thôi. Tuy nhiên, số lượng OS thread thì lại được quản lý bởi hệ điều hành và có thể được tạo bao nhiêu tuỳ thích, có thể có lên đến hàng ngàn OS thread khác nhau tuỳ vào các chương trình mà bạn chạy.
Lưu ý nhỏ: khi ai đó chỉ nhắc đến từ thread, thì trong đa phần trường hợp, người ta đang ám chỉ đến OS thread!
Hyperthreading có thực sự giúp gấp đôi số nhân?
Trong thực tế, nếu một vi xử lý được cho là có 2 nhân 4 luồng, liệu hiệu năng có thể tương đương với một vi xử lý 4 nhân 4 luồng không, với giả định rằng các thông số khác đều giống nhau không? Và tại sao người ta vẫn sử dụng hyperthreading? Để trả lời cho câu hỏi này, chúng ta cần hiểu rõ hơn về cách mà công nghệ hyperthreading hoạt động. Một số thông tin mình đã tìm hiểu được như sau:
Mỗi lõi CPU có khả năng thực thi các chỉ dẫn với tốc độ cực kỳ nhanh, đo lường bằng nanosecond. Tuy nhiên, đôi khi CPU có thể bị trì hoãn trong quá trình thực thi do nhiều nguyên nhân khác nhau, như là cache missing. Trong trường hợp này, các lệnh chỉ dẫn phải được nạp lại từ bộ nhớ chính (RAM) vào cache của CPU. Do bộ nhớ RAM chậm hơn so với CPU cache, việc này làm cho CPU phải dành thêm thời gian và tạo ra khoảng thời gian rảnh rỗi. Trong khoảnh khắc này, CPU có thể thực thi thêm hàng trăm chỉ dẫn nhưng không thể do bị trì hoãn.
Các nhân CPU có hỗ trợ hyperthreading có khả năng nhận tập lệnh chỉ dẫn của tới 2 OS thread khác nhau. Mặc dù mỗi nhân thực vẫn chỉ hỗ trợ thực thi tập lệnh từ 1 OS thread tại một thời điểm, nhưng với 2 bộ thanh ghi hoàn toàn độc lập. Khi gặp cache missing khi thực thi lệnh trên một OS thread, nhân CPU này có khả năng chuyển đổi ngay lập tức sang OS thread khác mà không cần context switch, nhờ vào sự nhanh chóng của việc chuyển đổi này từ việc sử dụng 2 bộ thanh ghi riêng biệt.
Việc sử dụng hyperthreading không phải là cách để gấp đôi số nhân (hay hiệu năng) của vi xử lý, mà là để tối ưu hóa thời gian rảnh rỗi của từng nhân CPU, giúp tăng cường throughput của vi xử lý.
Làm sao để so sánh hiệu năng giữa các CPU có/không có hyperthreading?
Ví dụ về một bài toán so sánh giữa vi xử lý AMD Ryzen 3 3300X (4 nhân 8 luồng) và vi xử lý AMD Ryzen 5 3500 (6 nhân 6 luồng) với mức giá tương đương. Người dùng nên lựa chọn vi xử lý nào trong trường hợp này?
Thoạt nhìn qua, bạn có thể thấy Ryzen 3 3300X có hỗ trợ hyperthreading đầy đủ, trong khi Ryzen 5 3500 lại thiếu công nghệ này vì lý do không rõ. Tuy nhiên, không nên kết luận ngay rằng Ryzen 3300X nhanh hơn chỉ vì hỗ trợ hyperthreading. Để so sánh hiệu suất của hai chip này, cần phải xem xét nhiều yếu tố khác như cấu trúc tổng thể của CPU, tần số hoạt động, cache, và các yếu tố khác.
Hyperthreading thực sự cải thiện hiệu năng CPU từ 20% đến 30%, tùy thuộc vào từng trường hợp cụ thể. Ví dụ, nếu 3500 có 6 nhân và tận dụng 100% sức mạnh đa nhân, hiệu năng sẽ tăng gấp 6 lần. Trong khi đó, 3300X với 4 nhân và 8 luồng sẽ chỉ tăng hiệu năng khoảng 5.2 lần, ngay cả khi có hyperthreading. Do đó, 3300X với hyperthreading vẫn kém hiệu năng so với 3500.
OS Scheduling và Context Switch
Hình ảnh về Core và Thread của CPU được hiển thị ở đây.
Đọc cho đến đây, chúng ta đã hiểu rằng vi xử lý với một nhân chỉ có thể chạy được duy nhất một thread trong cùng một thời điểm. Tuy nhiên, không thể phủ nhận rằng máy tính với chip Intel Pentium IV chỉ có một nhân vẫn có thể thực hiện nhiều tác vụ cùng một lúc như nghe nhạc, giải nén file, lướt web, và chăm nông trại. Vậy làm sao mà chỉ với duy nhất một nhân của chip Pentium IV lại có thể đạt được kết quả đa nhiệm như vậy?
Trong series phim bộ The Flash, speedster là những nhân vật có khả năng di chuyển cực kỳ nhanh. Một trong những tình tiết quan trọng của mùa đầu tiên liên quan đến việc một speedster có thể di chuyển đến mức tạo ra “ảo ảnh” và tồn tại đồng thời ở 2 vị trí khác nhau.

Vi xử lý của máy tính được coi là rất nhanh so với nhận thức thông thường của con người. Mặc dù chỉ có thể thực thi một tác vụ tại một thời điểm, nhờ cơ chế lên lịch của hệ điều hành, CPU có thể xử lý đồng thời nhiều thread khác nhau. Quá trình này diễn ra đủ nhanh đến mức tạo ra ảo giác rằng các tác vụ đang được chạy song song. Điều này cho phép hệ điều hành đạt được tính đa nhiệm mặc dù chỉ sử dụng một nhân CPU.
Cơ chế được sử dụng để hệ điều hành chuyển đổi giữa các thread được gọi là "Context Switch". Khi thực hiện Context Switch, hệ điều hành tạm dừng thực thi một thread, lưu trạng thái của CPU và các thanh ghi vào RAM, sau đó khôi phục các trạng thái và bắt đầu thực thi thread tiếp theo trong hàng đợi. Cơ chế này tương tự như hyperthreading, nhưng được thực hiện ở cấp độ hệ điều hành và chậm hơn nhiều do thực hiện thao tác đọc/ghi trạng thái các thanh ghi thông qua bộ nhớ RAM.
Để máy tính có thể đa nhiệm hiệu quả, không cần thiết phải sử dụng vi xử lý có nhiều nhân, mà chỉ cần một nhân đủ nhanh là đủ để thực hiện công việc.
CPU càng nhiều nhân thực (physical core) thì càng mạnh?
Một chiếc điện thoại được trang bị con chip SoC Snapdragon 625 với xung nhịp 2.0 GHz và 8 nhân. Tuy nhiên, không phải trong mọi trường hợp mà chúng ta có thể áp dụng phép tính 2.0 * 8 = 16.0 GHz.
Trong một số trường hợp, câu trả lời là không.
Trong lĩnh vực máy tính, có nhiều bài toán được hỗ trợ xử lý đa luồng bằng cách chia công việc lớn thành các công việc nhỏ chạy qua nhiều OS thread khác nhau. Ví dụ, từ việc nhân 2 ma trận đến dựng video, các chương trình có khả năng giúp tăng hiệu suất xử lý. Tuy nhiên, có những bài toán đặc biệt mà cần phải thực hiện trên một nhân duy nhất, như tính số Fibonacci thứ n hay giải mã mã hóa AES CBC. Trong những trường hợp như vậy, việc xử lý đa luồng có thể không thực hiện được hoặc không hết sức hiệu quả do tính phụ thuộc giữa các công việc.
Tuy nhiên, trong trường hợp thiết bị của bạn cần chạy nhiều ứng dụng cùng một lúc, có nhiều nhân CPU vẫn mang lại lợi thế lớn. Mỗi chương trình sẽ được chạy trên một hoặc nhiều luồng OS thread riêng biệt, từ đó tối ưu hóa sức mạnh của đa nhân CPU.
Kết bài
Dưới đây là những kiến thức mà tôi đã nghiên cứu được. Tuy nhiên, có thể có thông tin chưa hoàn chỉnh hoặc không chính xác, mong được sự góp ý từ các bạn qua phần bình luận ở cuối bài viết ^^
Một vài nguồn tham khảo: