Khi chúng ta nhìn vào thông số kỹ thuật của một CPU, chúng ta có thể thấy có một thông số về bộ nhớ cache được tích hợp sẵn trong CPU, dung lượng khoảng vài MB. Thông số này đóng vai trò quan trọng trong hiệu năng của CPU. Nhưng tại sao CPU lại cần đến cache, và cache của CPU hoạt động ra sao, sau đây chúng ta cùng tìm hiểu.
Khi máy tính chạy một chương trình, mã nguồn của chương trình đó được biên dịch thành mã máy mà CPU có thể hiểu được và đẩy vào trong RAM. Khi CPU thực hiện tính toán, nó hỏi dữ liệu từ trong RAM.
Ở những thế hệ máy tính đầu tiên được sản xuất, tốc độ của RAM và CPU là tương đương nhau, mỗi khi CPU cần dữ liệu để thực hiện tính toán, nó hỏi RAM, và RAM đáp ứng liền. Tuy nhiên, theo thời gian, tốc độ của CPU tăng nhanh hơn tốc độ của RAM nên điều này là một vấn đề. Bạn hãy hình dung điều này giống như 2 người cùng chạy bộ với nhau, nếu một người chạy nhanh và một người chạy chậm thì 2 người không thể nào cùng nói chuyện với nhau. Mỗi khi CPU cần dữ liệu, mà RAM không kịp đáp ứng thì điều này sẽ ảnh hưởng lớn đến tốc độ của máy.
Vì thế, người ta bèn nghĩ ra một cách đó là chèn thêm một lớp một bộ nhớ nữa vào giữa CPU và RAM. Loại bộ nhớ này được cấu tạo từ loại chip nhớ có tên gọi là SRAM, sử dụng 6 bóng bán dẫn để chứa 1 bit dữ liệu. So với loại chip nhớ DRAM được sử dụng trên các thanh RAM thông thường thì loại chip nhớ này có tốc độ nhanh hơn rất nhiều, nhưng ngược lại thì chi phí sản xuất cũng lớn hơn nhiều lần. Đối với CPU, thì đây được gọi là cache, còn RAM thông thường chính là backing-store.
Một bức ảnh đơn giản để minh hoạ cho cách sử dụng này. Không chỉ có một lớp cache bằng SRAM, các CPU thường có 2 lớp cache, thậm chí là 3 lớp cache:
Tìm hiểu về caching, một kĩ thuật tăng tốc máy tính phổ biến
Điều đầu tiên phải nói rằng, có những giới hạn nhất định ở bề mặt vật lý của con chip. Số lượng bóng bán dẫn có thể đặt cạnh những đơn vị tính toán thì có những giới hạn nhất định. Vì vậy dung lượng của bộ nhớ L1 cache thường rất nhỏ. Chẳng hạn, bộ nhớ cache L1 trên CPU intel Pentium 3 những năm 2000 là 32 KB, thì mãi đến năm 2017 trênintel Core i7, con số này mới chỉ tăng lên được thành 64 KB.
Tốc độ tăng dung lượng của L1 cache thường rất chậm do những giới hạn của chip.
Cách hoạt động cơ bản của CPU chỉ bao gồm việc đọc các dữ liệu (data) và thực hiện các chỉ dẫn hành động (instruction)- tức là làm gì với những dữ liệu này. Những dữ liệu về instruction được truy xuất tuần tự, còn mặt data thì được truy cập lặp đi lặp lại. Chính vì vậy, instructions và data có những mức độ truy xuất cục bộ khác nhau, nên để tăng tỷ lệ cache-hit, L1 lại được chia thành 2 phần là Data-cache và instruction-cache tương ứng để cache 2 loại dữ liệu này. L2 cache thì lại không chia ra như vậy.
CPU cache lưu dữ liệu theo từng dòng (cache-line). Kích thước của cache-line phụ thuộc vào từng loại CPU. Ví dụ, CPU Pentium 4, kích thước cache-line của L1 là 43 bytes, cache-line của L2 là 128 bytes. Xu hướng hiện tại là sử dụng cùng kích thước cho tất cả các lớp và con số phổ biến là 64 bytes.
Hãy phân tích một CPU 64-bit, mỗi cache-line có kích thước 64 bytes và mỗi thanh ghi (processor register) có thể chứa 8 bytes. Điều này nghĩa là khi một địa chỉ nhớ được truy cập, CPU cache không chỉ chứa những data đc truy cập, nhưng mà cả những data xung quanh nó, tổng cộng là 64 bytes. Đó chính là vì tính truy xuất cục bộ, vì khi một địa chỉ nhớ được truy cập, khả năng cao là những địa chỉ gần đó sẽ được truy cập tiếp trong những lần tiếp theo.
Vì CPU cache chứa được 64 byte trên một line. Hầu hết những truy cập vào DRAM cũng là 64 bytes. Thay vì request 8 lần mỗi lần 8 bytes, L2 request cả 64 bytes một lần. Đây được gọi là burst mode / burst transfer. Điều này giúp giảm tổng số request tới DRAM và cải thiện hiệu năng.
Khi request data, chúng ta muốn CPU cache nhận cả 64 bytes, nhưng ta cũng muốn những dữ liệu mà chúng ta cần thì tới trước để việc tính toán có thể thực hiện được ngay khi dữ liệu sẵn sàng. Do đó, thay vì chuyển dữ liệu từ đầu mỗi chunk 64 bytes, DRAM bắt đầu transfer dữ liệu từ địa chỉ được request trước. Dữ liệu được request thường được gọi là critical word. (dữ liệu thiết yếu).
CPU cache nói riêng hay memory nói chung, là một trong những thành phần cốt lõi của của bất kì một hệ thống máy tính nào. Trải qua hàng thập kỉ, ngành công nghiệp máy tính đã đưa ra rất nhiều nỗ lực để tối ưu và tích hợp những công nghệ bộ nhớ phức tạp nhất. Việc có kiến thức tốt về cache và memory sẽ giúp các lập trình viên thiết kế những hệ thống hoạt động hiệu quả với hiệu năng cao.