Đơn vị tài/lưu trữ - Load/Store Unit
Khi các địa chỉ cần tìm đã được tính toán xong trong AGU của bộ xử lý K8, tất cả các phép tính đã được tải và lưu trữ sẽ được chuyển đến LSU (Đơn vị tải/lưu trữ - Load/Store Unit ). LSU chứa hai hàng chờ: LS1 và LS2. Đầu tiên, các phép tính này sẽ được chuyển vào hàng LS1 với 12 đơn vị. Với tốc độ hai phép tính mỗi xung nhịp, hàng chờ LS1 cần có bộ nhớ cache L1 được sắp xếp bởi mã lập trình. Trong trường hợp không có trong cache ( Cache –Miss ) , các phép tính sẽ được xếp vào hàng chờ LS2 32 đơn vị. Đây là lúc cần đến bộ nhớ cache L2 và RAM.
Cache L1
Cache L1 trong K8 được tách riêng: 64KB lệnh (L1I) và dữ liệu (L1D). Mỗi cache được liên kết hai chiều và có độ dài 64 byte. Việc này có thể dẫn đến xung đột thường xuyên giữa các đường có cùng đích đến, làm tăng số cache thiếu và ảnh hưởng xấu đến tốc độ xử lý. Nhưng tình trạng này có thể được khắc phục bằng cache L1 có kích thước lớn hơn. Ngoài ra, một ưu điểm khác của L1D đó là có có hai cổng, do vậy có thể xử lý hai lệnh đọc hoặc/và viết hai lệnh trong mỗi xung nhịp.
Cache L2
Mỗi nhân trong bộ xử lý 2 nhân K8 có cache L2 riêng của mình . Cache L2 trong K8 vẫn như cũ: 512KB mỗi nhân với 16 liên kết. Các cache L2 riêng đều có ưu và nhược điểm riêng so với cache L2 chia sẻ trong CPU Core 2. Chắc chắn ưu điểm lớn nhất là việc xung đột và cạnh tranh cache khi nhiều nhân cùng được tải cùng một lúc sẽ không còn nữa. Còn nhược điểm là sẽ có ít cache hơn cho mỗi nhân khi chỉ có một ứng dụng hoạt động.
Cache L2 đều là riêng: các dữ liệu lưu trong cache L1 và L2 đều không nhân đôi. Cache L1 và L2 trao đổi dữ liệu qua hai Bus theo hai hướng: một để nhận và một để chuyển dữ liệu. Trong bộ xử lý K8, mỗi Bus rộng 64 bit (8 byte). Cấu trúc này giúp tốc độ chuyển dữ liệu đến cache L2 ít nhất là 8 byte/xung nhịp. Nói cách khác, cần 8 xung nhịp để chuyển 64 bit, do vậy thời gian chuyển dữ liệu đến nhân sẽ bị chậm lại rõ rệt, đặc biệt là khi hai dòng trong cache L2 được chuyển đến cùng một lúc.
Hình 2.5: Bus chuyển dữ liệu giữa cache L1 và L2 trong bộ xử lý K8
Cache L3
Để khắc phục nhược điểm của cache L2 có kích cỡ nhỏ, các cache L3 2MB trong tất cả các nhân của K8 lại có thể chia sẻ được với 32 đường liên kết.Cache L3 có cả khả năng thích ứng và riêng biệt: nó lưu trữ dữ liệu từ cache L2 của tất cả các nhân và cả dữ liệu chung của nhiều nhân. Khi nhân yêu cầu đọc một dòng lệnh, nếu như chỉ có
một nhân đang sử dụng dòng lệnh đó, nó sẽ được chuyển từ không gian trống trong L3. Còn nếu dòng lệnh này đang được một nhân khác sử dụng, nó sẽ vẫn nằm trong cache. Tuy nhiên, để xếp chỗ cho dòng lệnh đến từ cache 2, một dòng lệnh khác trước đó sẽ rời đi.
Cache L3 sẽ giúp tăng tốc độ luân chuyển dữ liệu giữa các nhân. Như đã tìm hiểu, các bộ xử lý Athlon 64 tạm thời chỉ chuyển đổi dữ liệu giữa các nhân thông qua Bus bộ nhớ. Do đó, việc chuyển đến dữ liệu chia sẻ diễn ra chậm hơn nhiều. Theo như AMD, bộ xử lý 4 nhân K8 có thể trao đổi dữ liệu qua cache L3. Khi yêu cầu từ một trong số các nhân được chuyển đến, nhân chuyển đổi dữ liệu sẽ copy dữ liệu vào cache L3, nơi nhân yêu cầu có thể đọc chúng. Thời gian chuyển dữ liệu trong cache của nhân còn lại sẽ được rút ngắn rất nhiều.
Hình 2.6 : Quá trình chuyển dữ liệu giữa các nhân trong bộ xử lý K8
Cache L3 sẽ hoạt động hiệu quả hơn so với cache L2. Tuy nhiên, AMD cho rằng hiệu quả trội hơn này còn tuỳ thuộc vào khối lượng công việc. Nếu khối lượng công việc không quá lớn, khả năng làm việc của L3 sẽ lớn hơn rõ rệt, còn nếu khối lượng công việc rất nặng nề, độ rộng băng thông sẽ tăng lên. Chúng ta sẽ còn phải chờ để kiểm chứng điều đó .
TLB
Bên cạnh bộ nhớ Cache cho lệnh và cho dữ liệu , bộ vi xử lí có nhiều kiểu của Cache : đó là Bộ đệm TLB ( Translation – Lookaside Buffer ) . Những bộ đệm này được dùng
để lưu trữ sự kết nối giữa địa chỉ trang vật lí với địa chỉ trang ảo từ những Bảng trang địa chỉ .
Số lượng của danh mục TLB xác định có bao nhiêu trang bộ nhớ có thể làm việc mà không mất công chuyển sang Bảng trang khác . Điều này hay bị phê phán trong những ứng dụng mà xử lí dữ liệu bộ nhớ ngẫu nhiên , khi chúng yêu cầu dữ liệu liên tục trong những trang khác nhau , bộ vi xử lí K8 có những bộ đệm dịch nhiều hơn và có kích thước cũng lớn hơn . Để thuận tiên theo dõi , chúng tôi đưa ra bảng dưới đây
Bảng 2. 1 : Khả năng TLB của bộ vi xử lí K8 ITLB : Bộ đệm TLB cho lệnh
DTLB : Bộ đệm TLB cho dữ liệu
Như bảng trên cho thấy nhiều bộ đệm dịch những trang 2MB . Nó xuất hiện để hỗ trợ cho việc những trang có dung lượng lớn hơn 1GB mà có thể được dùng hữu ích cho những máy chủ xử lí khối lượng dữ liệu lớn . Với sự hỗ trợ thích hợp từ phía hệ điều hành mà những ứng dụng dùng những trang 2MB và 1GB sẽ chạy nhanh hơn .
2.7Bộ phận điều khiển bộ nhớ - Memory Controller
Khi dữ liệu được yêu cầu không tìm thấy trong bất kì bộ nhớ Cache nào , thì yêu cầu đó được chuyển tới Bộ phận điều khiển bộ nhớ tích hợp bên trong Die ( Vùng Silcon chứa Chip ) của bộ vi xử lí . Vị trí của Bộ phận điều khiển bộ nhớ nằm trên Die của bộ vi xử lí làm giảm thời gian trễ với bộ nhớ , nhưng bên cạnh đó nó lại làm cho bộ vi xử lí không linh hoạt với những kiểu bộ nhớ khác nhau , nó lại làm tăng kích thước của Die và sự phức tạp trong thiết kế .
Bộ phận điều khiển bộ nhớ được tích hợp bên trong CPU là một điều thuận lợi với những bộ vi xử lí K8.
Đầu tiên , bây giờ nó có thể truyền dữ liệu không phải bằng một kênh có độ rộng 128- bit và nó dùng hai kênh độc lập 64-bit . Như vậy hai hoặc nhiều nhân của bộ vi xử lí có thể làm việc hiệu quả hơn với bộ nhớ trong cùng một thời gian .
Thứ hai , thuật toán sắp xếp lại và cấp phát trong Bộ phận điều khiển bộ nhớ được tối ưu hoá . Những nhóm điều khiển bộ nhớ Đọc và Ghi vì thế mà Bus nhớ có thể được tận dụng một cách tối đa . Những việc Đọc thuận lợi hơn so với việc Ghi . Dữ liệu cần ghi được lưu trữ trong bộ đệm mà không rõ kích thước ( nó sẽ nằm giữa từ 16 và 30 dòng , mõi dòng 64-byte ) . Với việc điều khiển những dòng yêu cầu trong những nhóm chúng ta có thể tránh việc chuyển Bus nhớ từ trạng thái Đọc thành Ghi liên tục để tiết kiệm thời gian . Nó cho phép tăng hiệu suất một cách đáng kể khi thay đổi yêu cầu trạng thái Đọc và Ghi .
Thứ ba , Bộ phận điều khiển bộ nhớ có thể phân tích chuỗi yêu cầu và thực hiện công việc lấy trước dữ liệu . ( Prefetch ) .