Bản tin công nghệ quốc tế · dịch tiếng Việt 02.09.2026 RSS
Phần cứng · Wccftech

Vì sao hiệu năng bộ nhớ ngày càng đóng vai trò quan trọng trong điện toán hiện đại

Hiệu suất tính toán của các bộ vi xử lý hiện đại đã tăng vọt, nhưng việc di chuyển dữ liệu lại gặp nhiều rào cản về độ trễ và băng thông. Do đó, việc hiểu rõ hành vi của bộ nhớ đã trở nên không thể thiếu để tối ưu hóa hiệu năng máy tính.

Wccftech21.08.202610 phút đọc1 lượt đọc
Ảnh: Wccftech

Trong nhiều thập kỷ, hiệu năng điện toán thường được đánh giá qua một vài thông số chính. CPU được bán dựa trên tốc độ xung nhịp và số lượng nhân, GPU dựa trên thông lượng shader và sau này là teraFLOPS, bộ nhớ dựa trên tần số, và lưu trữ dựa trên tốc độ truyền tuần tự. Những con số đó vẫn có giá trị, nhưng các bộ xử lý hiện đại ngày nay đã trở nên vô cùng mạnh mẽ trong việc thực hiện các phép tính toán học. Điều này dẫn đến một vấn đề khác ngày càng quyết định lượng hiệu năng lý thuyết nào thực sự có thể được tận dụng: đưa dữ liệu đến đúng nơi, vào đúng thời điểm cần thiết.

Một nhân CPU hiện đại có thể thực thi nhiều lệnh trong mỗi chu kỳ xung nhịp. Một chiếc GPU cao cấp chứa hàng nghìn đơn vị số học hoạt động song song. Các bộ tăng tốc AI đẩy thông lượng nhân ma trận lên mức petaFLOP. Thế nhưng, không có đơn vị nào trong số này có thể tính toán được bất kỳ điều gì hữu ích nếu thiếu đi các toán hạng, tập lệnh, kết cấu (texture), hình học, trọng số mô hình, kết quả trung gian, hoặc một số dạng dữ liệu khác.

Điều này tạo ra một sự mất cân bằng cơ bản. Trên thực tế, thông lượng số học đã tăng lên rất nhiều theo năm tháng, nhưng việc di chuyển dữ liệu lại tốn kém hơn đáng kể về mặt độ trễ, băng thông, năng lượng và tài nguyên chip vật lý. Kết quả là, nhiều tác vụ hiện đại phải tiêu tốn một lượng công sức đáng kinh ngạc chỉ để cố gắng cung cấp đủ dữ liệu cho các đơn vị thực thi.

Điều đó không có nghĩa là mọi tác vụ đều bị "giới hạn bởi bộ nhớ". Thực tế không phải vậy. Hiệu năng vẫn có thể bị kìm hãm bởi thông lượng tính toán, sự phụ thuộc lệnh, dự đoán rẽ nhánh, đồng bộ hóa, chi phí phần mềm, lưu trữ, mạng hoặc nhiều yếu tố khác. Thay đổi lớn nhất ở đây là việc thấu hiểu hành vi của bộ nhớ đã trở nên không thể thiếu để hiểu rõ hiệu năng điện toán hiện đại.

Bản thân "hiệu năng bộ nhớ" cũng vượt xa các khái niệm về tần số hay dung lượng. Độ trễ, băng thông, tính cục bộ, dung lượng bộ nhớ đệm (cache), tính song song cấp độ bộ nhớ, mẫu truy cập, khả năng nạp trước (prefetch), topology kết nối, và thậm chí là vị trí lưu trữ vật lý của dữ liệu đều tương tác lẫn nhau.

Để hiểu lý do tại sao, chúng ta phải bắt đầu từ điểm khác biệt quan trọng nhất: cách dữ liệu được truy cập.

Truy Cập Tuần Tự Và Ngẫu Nhiên Có Thể Hoạt Động Giống Như Hai Tác Vụ Hoàn Toàn Khác Nhau

Hãy tưởng tượng bạn đang đọc một file dung lượng 1 GB từ đầu đến cuối. Vị trí của phần dữ liệu tiếp theo có thể dự đoán một cách hoàn hảo. Ngay khi hệ thống nhận ra bạn đang làm gì, nó có thể bắt đầu nạp trước dữ liệu trong tương lai trước khi chúng được yêu cầu rõ ràng.

Đây là mẫu truy cập tuần tự, và máy tính hiện đại cực kỳ giỏi trong việc xử lý nó.

CPU chứa các bộ nạp trước phần cứng được thiết kế đặc biệt để nhận diện các luồng bộ nhớ có thể dự đoán trước. Các bộ điều khiển DRAM có thể duy trì nhiều giao dịch đang diễn ra và sắp xếp lại các yêu cầu. Bộ điều khiển SSD phân phối các truy cập trên nhiều khuôn và kênh NAND. GPU có thể kết hợp các yêu cầu bộ nhớ từ các luồng lân cận thành các giao dịch lớn hơn.

Về cơ bản, phần cứng có thể xây dựng một đường ống (pipeline). Thật không may, truy cập ngẫu nhiên lại là một trở ngại khó vượt qua hơn rất nhiều.

Hãy xem xét việc duyệt qua một danh sách liên kết (linked list) trong đó mỗi mục chứa địa chỉ của mục tiếp theo. Bộ xử lý có thể hoàn toàn không biết truy cập tiếp theo sẽ đi về đâu cho đến khi truy cập hiện hiện tại hoàn tất. Điều này phá hủy phần lớn cơ hội nạp trước và ngăn cản máy tính chồng lấp các truy cập một cách hiệu quả. Đó là lý do tại sao hai tác vụ có thể di chuyển cùng một lượng dữ liệu nhưng vẫn chạy với tốc độ chênh lệch đáng kể.

Sự khác biệt này càng trở nên quan trọng hơn khi có sự tham gia của các phụ thuộc độ trễ. Nếu CPU yêu cầu bốn dòng cache không liên quan, nó có thể giữ một số lần trượt cache (cache miss) diễn ra đồng thời và chồng lấp phần lớn độ trễ của chúng. Tuy nhiên, nếu yêu cầu B phụ thuộc vào kết quả của yêu cầu A, thì B thậm chí không thể bắt đầu cho đến khi A kết thúc.

Hiện tượng này thường được minh họa thông qua việc đuổi theo con trỏ (pointer chasing). Mỗi lần tải sẽ tiết lộ địa chỉ của lần tải tiếp theo, buộc bộ xử lý phải gánh chịu nhiều độ trễ bộ nhớ thực tế hơn thay vì che giấu nó thông qua suy đoán hoặc tính song song.

Nguyên tắc tương tự xuất hiện ở mọi nơi trong lĩnh vực điện toán. Một cơ sở dữ liệu thực hiện các thao tác tra cứu nhỏ không thể đoán trước sẽ đặt ra một thử thách hoàn toàn khác so với việc sao chép một file lớn. Một GPU lấy mẫu các texel lân cận có tính đồng nhất sẽ hành xử khác với hàng nghìn luồng đang đuổi theo các địa chỉ không liên quan. Một SSD đọc hàng trăm kilobyte tuần tự sẽ thấy một tác vụ hoàn toàn khác so với việc truy xuất các khối 4 KB nằm rải rác.

Điều này cũng giải thích tại sao chúng ta không thể đơn giản "biến truy cập ngẫu nhiên thành truy cập tuần tự" để cải thiện hiệu năng. Tuy nhiên, các nhà phát triển phần mềm vẫn luôn cố gắng làm điều đó. Các cơ sở dữ liệu sắp xếp lại dữ liệu. Các engine game gom nhóm công việc. Các thuật toán GPU sắp xếp lại các yêu cầu. Các trình biên dịch thay đổi bố cục dữ liệu. Cấu trúc mảng đôi khi có thể thay thế mảng cấu trúc. Việc sắp xếp (sorting) có thể biến các truy cập rải rác thành các truy cập có tính đồng nhất tương đối.

Nhưng làm như vậy không phải lúc nào cũng khả thi. Thực tế, nếu địa chỉ tiếp theo phụ thuộc vào kết quả của thao tác hiện tại, thì sự phụ thuộc đó là có thật. Nếu một tia sáng (ray) có thể nảy đến một phần không thể đoán trước của một cảnh 3D, thì GPU không thể biết trước mọi truy cập trong tương lai. Nếu một người dùng cơ sở dữ liệu yêu cầu một bản ghi cụ thể, thì việc đọc một terabyte các bản ghi liền kề trước đó rõ ràng sẽ phản tác dụng.

Do đó, mục tiêu trở thành việc giảm thiểu các truy cập đắt đỏ sao cho chúng xảy ra ít nhất có thể, dễ dự đoán nhất có thể và diễn ra đồng thời nhất có thể.

Tính Cục Bộ Là Lý Do Giúp Hệ Thống Bộ Nhớ Đệm Hoạt Động

May mắn thay, phần mềm thực tế hiếm khi truy cập dữ liệu hoàn toàn tùy ý mọi lúc. Trên thực tế, các chương trình thường có xu hướng thể hiện cả tính cục bộ không gian và tính cục bộ thời gian.

Tính cục bộ không gian có nghĩa là nếu một chương trình truy cập một mảnh dữ liệu, thì nó tương đối có nhiều khả năng cần đến dữ liệu lân cận ngay sau đó. Tính cục bộ thời gian có nghĩa là dữ liệu được truy cập gần đây có cơ hội hợp lý để được truy cập lại.

Một vòng lặp xử lý một mảng có tính cục bộ không gian cực tốt. Dữ liệu thế giới game được tham chiếu thường xuyên có thể có tính cục bộ thời gian mạnh mẽ. Các lệnh bên trong một vòng lặp nóng (hot loop) — một đoạn mã máy tính chạy rất thường xuyên — thể hiện cả hai loại tính cục bộ này. Những đặc tính này chính là thứ làm cho bộ nhớ đệm (cache) khả thi.

Khi CPU cần một byte từ DRAM, nó thường không chỉ chuyển riêng byte đó. Dữ liệu được di chuyển qua hệ thống cấp bậc cache theo các khối có kích thước cố định gọi là dòng cache (cache line). Trên các CPU x86 phổ biến, các khối này thường có kích thước 64 byte. Ví dụ, tài liệu tối ưu hóa của AMD mô tả việc sắp xếp phần mềm và các cân nhắc truy cập xung quanh các dòng cache 64 byte.

Nếu chương trình sau đó truy cập dữ liệu lân cận, dữ liệu đó có thể đã nằm sẵn bên trong cache. Điều này giới thiệu một khái niệm quan trọng khác: tập hợp làm việc (working set).

Một chương trình có thể phân bổ hàng chục gigabyte bộ nhớ về mặt kỹ thuật, nhưng trong một giai đoạn cụ thể, nó lại chỉ lặp đi lặp lại việc thao tác trên một phần nhỏ trong số đó. Nếu tập hợp làm việc đang hoạt động đó nằm gọn bên trong một bộ nhớ đệm nhanh, hiệu năng có thể rất xuất sắc. Tăng tập hợp làm việc vượt quá dung lượng cache có sẵn một chút, đột nhiên sẽ có nhiều truy cập tràn hơn vào một cấp độ chậm hơn trong hệ thống cấp bậc. Điều này có thể tạo ra những thay đổi hiệu năng đột ngột đến bất ngờ.

Đó cũng là lý do tại sao việc cải thiện dung lượng cache đôi khi mang lại những bước nhảy vọt khổng lồ và đôi khi gần như không có gì. Việc tăng cache từ 32 MB lên 96 MB cực kỳ có giá trị nếu nó cho phép tập hợp làm việc 64 MB được sử dụng thường xuyên nằm lại trên chip. Nó mang lại ít lợi ích hơn đáng kể nếu tác vụ liên tục luân chuyển qua vài gigabyte dữ liệu mà nó không bao giờ chạm đến lần nào nữa.

Do đó, bộ nhớ đệm hoạt động hiệu quả nhất khi phần mềm cung cấp cho chúng thứ gì đó đáng để ghi nhớ.

Tại Sao CPU Có Nhiều Cấp Độ Cache Thay Vì Một Bộ Nhớ Đệm Khổng Lồ

Điều này dấy lên một câu hỏi hiển nhiên. Nếu cache rất hữu ích, tại sao không đơn giản xây dựng một bộ nhớ đệm cực lớn siêu nhanh và quên đi bộ nhớ chậm hơn? Bởi vì các đặc tính mà chúng ta muốn từ bộ nhớ mâu thuẫn lẫn nhau.

Các bộ nhớ đệm CPU gần nhất được làm từ SRAM và được tối ưu hóa cho độ trễ truy cập cực thấp cùng băng thông cực cao. Nhưng SRAM tiêu tốn một lượng đáng kể diện tích silicon. Các cấu trúc lớn hơn cũng đòi hỏi nhiều dây dẫn hơn, đường dẫn vật lý dài hơn, logic tra cứu phức tạp hơn…

🔗 Bài gốc (tiếng Anh): Why Memory Performance Is More Important Than Ever In Modern Computing
Nguồn: Wccftech

Cùng chuyên mục · Phần cứng
Phần cứng

NVIDIA công bố DLSS 5 với công nghệ 3D-Guided Neural Rendering, ra mắt cùng NBA 2K27

NVIDIA vừa thông báo công nghệ DLSS 5 tích hợp 3D-Guided Neural Rendering sẽ chính thức ra mắt vào ngày 3 tháng 9 trên…

TechPowerUp · 7 phút đọc
Phần cứng

Astell & Kern ra mắt máy nghe nhạc PD5: Thiết bị 'Walkman' trang bị 8 DAC dành cho tín đồ âm thanh hi-res

Astell & Kern vừa công bố máy nghe nhạc số PD5 với hệ thống 8 chip DAC Cirrus Logic, hỗ trợ âm thanh độ phân giải cao…

Notebookcheck · 2 phút đọc
Phần cứng

Lenovo ra mắt ThinkPad tháo rời mới tại Mỹ với chip Intel Core Ultra 7 và màn hình 120Hz

Lenovo chính thức phân phối dòng máy tính bảng ThinkPad X13 Detachable tại thị trường Bắc Mỹ với chip Intel Core Ultra…

Notebookcheck · 2 phút đọc