Diễn giải kỹ thuật: Luồng xử lý là gì?
- OFREZH EDITOR
- 23 thg 6
- 13 phút đọc
Ban đầu, nó chỉ là một. Nhiều năm trôi qua trước khi nó trở thành hai, rồi bốn. Bây giờ bạn có thể có 8, 12, 16 hoặc nhiều hơn. Máy tính cá nhân hiện đại có CPU có thể xử lý nhiều luồng, tất cả cùng một lúc, nhờ vào sự phát triển trong thiết kế và sản xuất chip.

Nhưng chính xác thì luồng là gì và tại sao CPU có thể xử lý nhiều luồng lại quan trọng đến vậy? Trong bài viết này, chúng tôi sẽ trả lời những câu hỏi này và nhiều câu hỏi khác.
Một mũi khâu đúng lúc: Một sợi chỉ là gì?
Chúng ta có thể bắt đầu đi sâu vào thế giới luồng xử lý bằng cách đi thẳng vào vấn đề và trả lời câu hỏi mở đầu: Luồng là gì?
Nói một cách đơn giản nhất, luồng xử lý là chuỗi lệnh ngắn nhất cần thiết để thực hiện một tác vụ tính toán. Nó có thể là một danh sách rất ngắn, nhưng cũng có thể rất dài. Điều ảnh hưởng đến điều này là quy trình, luồng nào là một phần của (như minh họa bên dưới)...

Vậy là giờ chúng ta có một câu hỏi mới để trả lời (tức là quy trình là gì?) nhưng may mắn thay, câu hỏi đó cũng dễ giải quyết. Nếu bạn đang chạy Windows trên máy tính, hãy nhấn phím Windows và X , rồi chọn Trình quản lý tác vụ từ danh sách xuất hiện.
Theo mặc định, nó sẽ mở ra trên tab Processes và bạn sẽ thấy một danh sách dài các tiến trình hiện đang chạy trên máy của bạn. Một số trong số này sẽ là các chương trình riêng lẻ, tự chạy mà không cần tương tác từ người dùng.
Những cái khác sẽ là một ứng dụng mà bạn có thể trực tiếp điều khiển và một số trong số đó có thể tạo ra các quy trình nền bổ sung – các tác vụ hoạt động ẩn, theo lệnh của chương trình chính.

Nếu bạn chuyển sang tab Hiệu suất trong Trình quản lý tác vụ, rồi chọn phần CPU, bạn có thể xem có bao nhiêu tiến trình đang hoạt động cùng với tổng số luồng đang hoạt động.
Số Handles đề cập đến số lượng File Handles đang bay xung quanh. Mỗi khi một tiến trình muốn truy cập một tệp, có thể là trong RAM hoặc ổ lưu trữ, một file handle sẽ được tạo. Mỗi file handle là duy nhất đối với tiến trình đã tạo ra nó, vì vậy một tệp thực sự có thể có nhiều handle.
Quay lại với luồng, Trình quản lý tác vụ không cho bạn biết nhiều về chúng – ví dụ, số luồng liên kết với mỗi quy trình không được hiển thị. May mắn thay, Microsoft có một chương trình khác có tên là Process Explorer để giúp chúng ta.

Ở đây chúng ta có thể thấy tổng quan chi tiết hơn về nhiều quy trình khác nhau và luồng của chúng.
Lưu ý cách một số chương trình tạo ra tương đối ít chuỗi lệnh (ví dụ: Corsair iCUE plugin host chỉ có một), trong khi những chương trình khác chạy tới hàng trăm, chẳng hạn như quy trình Hệ thống. Có một chút thông tin giải thích chi tiết hơn về vấn đề này, nhưng chúng ta sẽ quay lại xem xét vấn đề này sau.
Bây giờ, nói một cách nghiêm túc, thì thực ra hệ điều hành tạo ra phần lớn các luồng này – bản thân tiến trình thường chỉ có một luồng, để bắt đầu tất cả. Sau đó, hệ điều hành sẽ thực hiện nhiệm vụ tạo và quản lý tất cả chúng một mình. Nhưng phần mềm đó thực sự không thể xử lý các lệnh trong chính các luồng; phần cứng là cần thiết cho công việc đó.
Nhập threaderizer, hay còn gọi là CPU
Điểm đến cuối cùng, đối với bất kỳ luồng nào, là bộ xử lý trung tâm (CPU). Vâng, không phải lúc nào cũng vậy, nhưng chúng ta sẽ nói đến điều đó sau. Con chip này lấy danh sách các lệnh, dịch chúng thành "ngôn ngữ" mà nó hiểu, sau đó thực hiện các tác vụ được giao.
Sâu bên trong bộ xử lý, phần cứng chuyên dụng lưu trữ các luồng để phân tích chúng, sau đó sắp xếp danh sách lệnh theo cách phù hợp nhất với những gì bộ xử lý đang thực hiện tại thời điểm đó.

Ngay cả những CPU như Pentium ban đầu của Intel, như được hiển thị ở trên, các lệnh luồng có thể được sắp xếp lại một chút để tối đa hóa hiệu suất. CPU ngày nay chứa các công cụ quản lý luồng cực kỳ phức tạp, không chỉ vì số lượng lớn mà chúng phải xử lý mà còn để tính toán tương lai.
Dự đoán nhánh đã có từ lâu và là một phần thiết yếu trong kho vũ khí của CPU. Nếu một luồng chứa một chuỗi các lệnh ' If...then...else ', mạch dự đoán sẽ ước tính kết quả có khả năng xảy ra nhất.
Câu trả lời từ dự đoán này sau đó khiến CPU lục lọi trong kho lệnh của mình và thực thi những lệnh mà quyết định logic yêu cầu.
Nếu dự đoán đúng, thì sẽ tiết kiệm được một lượng thời gian đáng kể so với việc phải chờ toàn bộ luồng được xử lý. Nếu không, thì điều đó không tốt lắm – đây là lý do tại sao các nhà thiết kế CPU làm việc chăm chỉ trên các bộ dự đoán nhánh của họ!

Ngay cả các máy chủ trong những năm 90 cũng chỉ quản lý được một luồng cho mỗi CPU. Tín dụng: The CPU Shack
Bộ xử lý trung tâm từ những năm 1990, dù ở dạng máy tính để bàn hay máy chủ, đều chỉ có một lõi, do đó chỉ có thể hoạt động trên một luồng tại một thời điểm, mặc dù chúng có thể thực hiện nhiều lệnh cùng lúc (được gọi là siêu vô hướng ).
Máy chủ và máy trạm cao cấp phải xử lý một số lượng lớn luồng và máy của thời đại Pentium thường có hai CPU để hỗ trợ khối lượng công việc. Tuy nhiên, ý tưởng về một bộ xử lý có thể xử lý nhiều luồng cùng một lúc đã có từ lâu.
Trong nhiều thập kỷ, nhiều dự án đã ra đời rồi biến mất, khám phá khả năng bộ xử lý hoạt động trên nhiều luồng cùng một lúc, nhưng các triển khai này vẫn chỉ thực hiện các lệnh từ một luồng tại một thời điểm.
Ý tưởng về một CPU xử lý nhiều hơn một lệnh luồng trong lõi của nó, hay còn gọi là đa luồng đồng thời (SMT), sẽ phải đợi cho đến khi khả năng của phần cứng bắt kịp.

Kiến trúc Northwood của Intel đã đưa SMT đến với công chúng. Tín dụng: Fritzchens Fritz
Điều này đã đạt được vào năm 2002, khi Intel tung ra phiên bản mới của bộ xử lý Pentium 4. Đây là CPU máy tính để bàn đầu tiên có khả năng SMT hoàn toàn, với tính năng này được gọi là công nghệ Intel Hyper-Threading .
Một củ khoai tây, hai củ khoai tây...
Vậy chính xác thì một lõi đơn trong CPU hoạt động trên hai luồng cùng một lúc như thế nào?
Hãy coi CPU như một nhà máy phức tạp, có nhiều giai đoạn – thu thập rồi sắp xếp nguyên liệu thô (tức là dữ liệu), sau đó sắp xếp các lệnh (luồng) bằng cách chia nhỏ chúng thành nhiều tác vụ nhỏ hơn.
Giống như dây chuyền sản xuất ô tô khối lượng lớn sẽ xử lý nhiều bộ phận khác nhau, một hoặc hai bộ phận tại một thời điểm, CPU cần thực hiện nhiều tác vụ khác nhau theo trình tự nhất định để hoàn thành một tập hợp hướng dẫn nhất định.

Còn được gọi là đường ống , các giai đoạn khác nhau không phải lúc nào cũng bận rộn; một số phải đợi một thời gian cho đến khi các bước trước đó hoàn tất.
Đây là lúc SMT phát huy tác dụng. Phần cứng chuyên theo dõi trạng thái của mọi bộ phận trong đường ống được sử dụng để xác định xem một luồng khác có thể sử dụng các giai đoạn nhàn rỗi hay không, mà không làm chậm luồng hiện đang được xử lý.
Thực tế là CPU máy tính để bàn trở thành đa luồng từ lâu trước khi chúng trở thành đa lõi cho thấy SMT dễ triển khai hơn nhiều. Trong trường hợp kiến trúc Northwood của Intel, ít hơn 5% tổng số die tham gia vào việc quản lý hai luồng.
Các lõi CPU có khả năng SMT được tổ chức theo cách mà đối với hệ điều hành, chúng xuất hiện như các lõi logic riêng biệt . Về mặt vật lý, chúng chia sẻ nhiều tài nguyên giống nhau, nhưng chúng hoạt động độc lập.
CPU máy tính để bàn chỉ xử lý tối đa hai luồng trên mỗi lõi CPU vì đường truyền của chúng tương đối ngắn và đơn giản, và phân tích của các nhà thiết kế cho thấy rằng hai là giới hạn tối ưu.

CPU Power10 của IBM – lên đến 15 lõi, SMT 8 chiều
Ở đầu đối diện của quang phổ, bộ xử lý máy chủ lớn, chẳng hạn như chip Xeon Phi cũ của Intel hoặc bộ xử lý POWER mới nhất của IBM xử lý 4 và 8 luồng trên mỗi lõi. Đó là vì lõi của chúng chứa nhiều đường ống, với các tài nguyên được chia sẻ.
Những cách tiếp cận khác nhau trong thiết kế CPU xuất hiện do khối lượng công việc mà các con chip phải xử lý rất khác nhau.
Bộ xử lý trung tâm không phải là chip duy nhất trong máy tính phải xử lý nhiều luồng. Có một chip, với vai trò rất cụ thể, xử lý hàng nghìn luồng, tất cả cùng một lúc.
Tất cả các chủ đề của bạn đều thuộc về chúng tôi
Khi nói đến việc khoe khoang về số lượng quá mức, GPU hoàn toàn đánh bại CPU. Chúng lớn hơn về mặt vật lý, có nhiều bóng bán dẫn hơn, sử dụng nhiều điện năng hơn và xử lý nhiều luồng hơn bất kỳ CPU máy chủ nào có thể hướng tới.
Hãy lấy card đồ họa Radeon RX 6800 của AMD , trang bị chip Navi 21, làm ví dụ. Bộ xử lý đó bao gồm 60 Đơn vị tính toán (CU), mỗi đơn vị có thể xử lý 64 luồng riêng biệt cùng một lúc.

GPU Navi 21 ngốn nhiều luồng của AMD
Có 3.840 chủ đề đang diễn ra!
Vậy làm thế nào GPU có thể xử lý được nhiều việc hơn bộ xử lý trung tâm?
Mỗi CU có hai bộ SIMD (đơn lệnh, nhiều dữ liệu) và mỗi bộ có thể hoạt động trên 32 phần tử dữ liệu riêng biệt cùng một lúc. Tất cả chúng có thể từ các luồng khác nhau nhưng vấn đề là, đơn vị phải thực hiện cùng một lệnh chính xác trong mỗi luồng.
Đây là điểm khác biệt chính so với CPU – trong khi lõi bộ xử lý máy tính để bàn chỉ xử lý không quá hai luồng, các lệnh có thể hoàn toàn khác nhau, từ các quy trình hoàn toàn không liên quan.

GPU được thiết kế để thực hiện cùng một hoạt động lặp đi lặp lại, thường là từ các quy trình tương tự (về mặt kỹ thuật, chúng được gọi là hạt nhân , nhưng chúng ta sẽ không đề cập đến), nhưng tất cả đều diễn ra song song.
Cũng giống như IBM POWER10, một CPU chỉ dành cho máy chủ doanh nghiệp, chip xử lý đồ họa được chế tạo để thực hiện một tác vụ rất chuyên biệt.
Các trò chơi lớn nhất hiện nay, với hình ảnh 3D phức tạp, đòi hỏi một lượng toán học đáng kinh ngạc để xử lý, tất cả chỉ trong vài mili giây. Và điều đó đòi hỏi luồng - rất nhiều luồng!
Sợi chỉ! Đèn! Hành động!
Nếu bạn xem bất kỳ bài đánh giá CPU nào của chúng tôi , bạn gần như luôn thấy hai kết quả từ Cinebench , một điểm chuẩn thực hiện tác vụ kết xuất dựa trên CPU đầy thử thách.
Một kết quả là cho thử nghiệm chỉ sử dụng một luồng, trong khi kết quả kia sẽ sử dụng nhiều luồng như tổng số luồng mà CPU có thể xử lý. Kết quả từ kết quả sau luôn nhanh hơn nhiều so với thử nghiệm luồng đơn. Tại sao lại như vậy?

Cinebench đang kết xuất đồ họa 3D, giống như trong trò chơi, mặc dù là một khung hình có độ chi tiết cao. Và nếu bạn nhớ cách GPU thực hiện nhiều luồng song song để tạo đồ họa 3D, thì rõ ràng tại sao CPU có nhiều lõi, đặc biệt là với SMT, lại xử lý khối lượng công việc nhanh như vậy.
Thật không may, việc thêm nhiều lõi chỉ làm cho bộ xử lý lớn hơn và do đó đắt hơn, vì vậy có vẻ như SMT luôn là một điều tốt. Tuy nhiên, điều này phụ thuộc rất nhiều vào tình hình.
Ví dụ, khi chúng tôi thử nghiệm Ryzen 9 3950X của AMD (CPU 12 lõi, 24 luồng) trên 36 trò chơi khác nhau, có và không bật SMT , kết quả rất rộng. Một số tựa game tăng hiệu suất tới 16% khi bật SMT, trong khi một số khác giảm tới 12%.
Tuy nhiên, mức chênh lệch trung bình chỉ là 1% nên chắc chắn không phải lúc nào cũng phải tắt SMT khi chơi game, nhưng điều này lại nảy sinh thêm một số câu hỏi.
Câu hỏi đầu tiên là tại sao một trò chơi lại chạy chậm hơn 12% khi lõi CPU xử lý hai luồng cùng lúc? Cụm từ chính ở đây là " tranh chấp tài nguyên " .

Nếu một chương trình có nhiều yêu cầu đối với hệ thống bộ nhớ của CPU (bộ nhớ đệm, băng thông và RAM), việc có hai luồng trên một lõi yêu cầu truy cập bộ nhớ có thể khiến một luồng bị dừng lại trong khi nó phải chờ.
CPU có thể xử lý càng nhiều luồng thì hệ thống bộ nhớ đệm trong bộ xử lý càng trở nên quan trọng. Điều này trở nên rõ ràng khi kiểm tra các CPU có kích thước bộ nhớ đệm L3 cố định, bất kể có bao nhiêu lõi được kích hoạt.
Chip càng có nhiều lõi và luồng thì số lượng yêu cầu bộ nhớ đệm mà hệ thống phải xử lý càng lớn. Và điều này đưa chúng ta đến câu hỏi tiếp theo: đây có phải là lý do tại sao trò chơi không sử dụng nhiều luồng không?
Tại sao trò chơi không sử dụng nhiều luồng?
Hãy quay lại Process Explorer và kiểm tra một vài tựa game, cụ thể là Cyberpunk 2077, Spider-Man Remastered và Shadow of the Tomb Raider. Cả ba đều được phát triển cho PC và console, vì vậy bạn có thể mong đợi chúng sử dụng từ 4 đến 8 luồng.

Thoạt nhìn, trò chơi chắc chắn sử dụng rất nhiều luồng!
Có vẻ như điều này không thể đúng vì CPU được sử dụng trong máy tính chạy trò chơi chỉ hỗ trợ tối đa 8 luồng.
Nhưng nếu chúng ta đi sâu hơn vào các luồng quy trình, chúng ta sẽ có được bức tranh rõ ràng hơn nhiều. Hãy cùng xem Shadow of the Tomb Raider .
Dưới đây chúng ta có thể thấy rằng phần lớn các luồng này hầu như không chiếm thời gian chạy của CPU (cột thứ hai, hiển thị theo giây). Mặc dù quy trình và hệ điều hành đã tạo ra hơn một trăm luồng, nhưng hầu hết đều chạy quá ngắn để có thể đăng ký.

Số lượng Cycles Delta là tổng số chu kỳ CPU được luồng tích lũy trong quá trình này và trong trường hợp của trò chơi này, nó chỉ bị chi phối bởi hai luồng. Tuy nhiên, những người khác vẫn đang sử dụng tất cả các lõi CPU khả dụng.
Có vẻ như số chu kỳ là một con số vô lý, nhưng nếu bộ xử lý có tốc độ xung nhịp, chẳng hạn như 4,5 GHz, thì một chu kỳ chỉ mất 0,22 nano giây. Vì vậy, 1,3 tỷ chu kỳ chỉ tương đương với khoảng dưới 300 mili giây.
Tất nhiên, không phải tất cả các trò chơi đều như vậy, và tựa game càng cũ thì số lượng chủ đề càng ít. Nếu chúng ta xem xét Call of Duty gốc , từ năm 2003, chúng ta sẽ thấy một bức tranh rất khác.

Các trò chơi từ thời đại này đều như thế này – chỉ có một luồng chính cho mọi thứ. Điều này là do CPU thời đó chỉ có một lõi và tương đối ít trong số chúng hỗ trợ SMT.
Trong khi tiến trình và hoạt động của Call of Duty tạo ra một luồng để thực hiện hầu hết mọi thứ, Shadow of the Tomb Raider lại có thể xử lý đa luồng cùng lúc (nhiều luồng tùy theo CPU hỗ trợ).
Ban đầu, phần cứng vượt trội hơn phần mềm khi nói đến việc tận dụng tối đa tất cả các lõi (có hoặc không có SMT) được cung cấp và chúng ta đã phải đợi khá nhiều năm trước khi trò chơi có thể đa luồng hoàn toàn.
Giờ đây, khi các máy chơi game mới nhất có CPU 8 nhân hỗ trợ SMT 2 chiều, các tựa game trong tương lai chắc chắn sẽ có nhiều luồng xử lý hơn.
Tương lai sẽ rất mong manh
Hiện tại, ngoài vấn đề tài chính và tính khả dụng, bạn có thể mua một máy tính để bàn có CPU có khả năng xử lý 32 luồng ( Ryzen 9 7950X của AMD ) và GPU có thể xử lý 4.096 luồng ( GeForce RTX 4090 của Nvidia ).
Tất nhiên, phần cứng này là đỉnh cao của công nghệ, chi phí và sức mạnh và chắc chắn không đại diện cho những gì hầu hết các máy tính có thể cung cấp. Nhưng khoảng 10 năm trước, đó là một bức tranh rất khác.
CPU tốt nhất hỗ trợ 8 luồng thông qua SMT nhưng PC trung bình thường chỉ có khoảng 4 luồng. Bây giờ, bạn có thể mua CPU giá dưới 100 đô la có khả năng xử lý giống như chip tốt nhất từ một thập kỷ trước.

4 lõi, 8 luồng, dưới 100 đô la
Chúng ta có thể cảm ơn AMD vì điều này, vì họ là hãng đầu tiên cung cấp nhiều lõi/luồng với mức giá phải chăng và hiện nay cả hai nhà cung cấp CPU thường xuyên cạnh tranh xem ai có thể cung cấp nhiều lõi/luồng nhất trên mỗi đô la.
Và cuối cùng chúng ta cũng đang ở giai đoạn mà các trò chơi mới và gần đây có thể tận dụng tối đa sức mạnh xử lý luồng có sẵn khi chúng không bị giới hạn bởi GPU.
Vậy thì tiếp theo là gì? Nếu chúng ta có thể tua nhanh một thập kỷ tới tương lai, liệu chúng ta có thấy game thủ PC trung bình sử dụng CPU 128 luồng không? Có thể, nhưng không chắc, đơn giản vì lợi nhuận giảm dần khi số lượng lõi tăng lên. Tuy nhiên, những người sáng tạo nội dung chuyên nghiệp đã sử dụng các bộ xử lý như vậy (ví dụ: Threadripper Pro 5995WX ) nên không ai có thể đoán được họ sẽ sử dụng gì vào khoảng năm 2032.
Nhưng dù tương lai có ra sao thì có một điều vẫn đúng: sợi chỉ là những vật nhỏ bé tuyệt vời!
Theo TECHSPOT
Comments