6. Cấu trúc của luận án
2.2.1.9. Các loại trượt cache
Có 4 loại trượt cache: trượt ép buộc, trượt dung lượng, trượt do đụng độ, và
trượt chính sách.
Trượt ép buộc:
Trượt ép buộc xảy ra khi một khối lần đầu tiên được truy nhập đến mà nó không có trong cache. Do đó, khối được yêu cầu phải được tải từ bộ nhớ chính vào một dòng của cache. Loại trượt này còn được gọi là trượt lần tham chiếu đầu tiên
hay trượt lạnh.
Trượt dung lượng:
Trượt dung lượng xảy ra khi dung lượng của cache không đủ lớn để sắp xếp
tất cả các khối được yêu cầu khi CPU thực hiện chương trình, một số khối bị bỏ đi
và phải nạp lại sau đó.
Trượt đụng độ:
Trượt đụng độ xảy ra trong các cache liên kết tập hợp hoặc sắp xếp trực tiếp
khi có ít nhất hai khối đồng thời sắp xếp đến cùng một tập hợp, và một khối phải bị
bỏ đi rồi nạp lại (tức là có hai địa chỉ bộ nhớ chính cùng tham chiếu đến một tập
hợp của cache). Loại trượt này còn gọi là trượt giao thoa. 0,1 0,01 0,001 1e-04 1e-05 1e-06 1K 4K 16K 64K 256K 1M ∞ Kích thước cache T ỷ s ố t rư ợ t Trực tiếp 2-dòng 4-dòng 8-dòng Đầy đủ
Trượt chính sách:
Trượt chính sách xảy ra bởi chính sách thay thế cache, hay chính sách chọn
dòng cache nào cho thay thế khi cache bị đầy nội dung.
2.2.1.10. Tổ chức cacheảnh hưởng đến tốc độ của CPU
Cho một chương trình với n kiểu lệnh với các đặc tính như sau:
Ci = số lệnh thuộc kiểu i
CPIi= số chu kỳ đồng hồ trung bình của một lệnh thuộc kiểu i
Fi = Tần suất của kiểu lệnh i = Ci/Tổng số lệnh
Thì:
n
i i
i =1
CPI = CPI × F (2.25)
Tỷ số của tổng thời gian thực hiện các lệnh kiểu i là:
CPI × Fi i i =
CPI (2.26)
Để minh họa, cho rằng chip kiến trúc RISC thực hiện một chương trình với các
tần suất thực hiện các loại lệnh và CPI như bảng 2.1:
Bảng 2.1: Tần suất thực hiện các loại lệnh và CPItrong chip kiến trúc RISC [25].
Khí đó: CPI = n (CPI ×F ) = 0,5×1+ 0, 2×5 + 0,1×3+ 0,2×2 i i i=1 = 2,2 chu kỳ/lệnh
Đối với một chương trình được biên dịch để chạy trên một máy tính “A” với
- Tổng số lệnh trong một chương trình là I, được xác định bằng lệnh/chương
trình (instructions per program).
- Số chu kỳ đồng hồ để thực hiệnmột lệnh là CPIexecution, được xác định bằng
chu kỳ/lệnh (cycles/instruction).
- Số chu kỳ đồng hồ trì hoãn bộ nhớ cho một lệnh (MSPI)được xác định bằng
chu kỳ/lệnh (cycles/instruction):
- Thời gian của một chu kỳ đồng hồ là C = 1/clock rate, được xác định bằng
giây/chu kỳ (seconds/cycle).
Khi đó:
Thời gian thực hiện chương trình của CPU được xác định bằng:
execution execution
CPU time = I× (CPI + MSPI)×C (2.27a)
hay CPUexecutiontime = I×(CPIexecution+ MAPI×miss rate×misspenalty)×C (2.27b)
- Với một cấp cache (L1):
L1
execution execution
CPU time = I× (CPI + MSPI ) × C (2.28a)
hay CPUexecutiontime = I×(CPIexecution+MAPI×L1 miss rate×L1 miss penalty)×C (2.28b)
hay execution L1
execution
CPU time = I×(CPI + MAPI×(AMAT - L1 hit time))×C (2.28c)
-Với hai cấp cache (L1, L2):
L1L2
execution execution
CPU time = I× (CPI + MSPI ) × C (2.29a)
execution execution
hay CPU time = I×(CPI + MAPI×L1 miss rate
×(L2hit time + L2 miss rate×L2 miss penalty))×C (2.29b)
hay CPUexecutiontime = I×(CPIexecution+ MAPI×(AMATL1L2- L1 hit time))×C (2.29c)
- Với ba cấp cache (L1, L2, L3)
L1L2L3
execution execution
execution execution
hay CPU time = I×(CPI + MAPI× L1 miss rate×(L2 hit time
+ L2 miss rate× (L3 hit time + L3 miss rate× L3 miss penalty)))×C (2.30b)
hay CPUexecutiontime = I×(CPIexecution+ MAPI×(AMATL1L2L3- L1 hit time))×C (2.30c)
Số chu kỳ thực hiện thực tế của một lệnh (CPIactual):
CPIactual = CPIIdeal+ MSPI (2.31)
2.2.2. Các giải pháp tăng hiệu năng của cache
Giảm tỷ số trượt:
Để giảm tỷ số trượtcần phải tăng dung lượng của dòng cache, tăng kích thước
của cache, tăng mức độ liên kết tập hợp (n-dòng), dự đoán dòng, liên hợp giả, và tối ưu chương trình dịch.
Giảm trượt penalty:
Để giảm trượt penalty cần tổ chức nhiều cấp cache, cache nạn nhân, đọc trượt trước tiên, hợp nhất các bộ đệm ghi, và thực hiện tiến trình song song.
Giảm thời gian trúng cache:
Để giảm thời gian trúng cache cần thiết kế cache nhỏ và đơn giản, tránh
chuyển đổi địa chỉ, truy nhập cache theo đường ống.
2.3.Các chính sách thay thế dòng cache
Khi có trượt cache, chương trình thực hiện phải tham chiếu đến bộ nhớ chính để đọc khối nhớ yêu cầu về CPU và đồng thời nạp vào một dòng cache. Sự thay thế
nội dung của một dòng cache chỉ xảy ra khi cache không còn một chỗ trống nào. Vì vậy, phải lựa chọn một dòng cache nào đó làm dòng “nạn nhân” cho sự thay thế: nội
dung của nó phải được thay thế bằng nội dung của khối mới nạp từ bộ nhớ chính.
Cache sắp xếp trực tiếp không có sự chọn lựa thay thế, vì mỗi khối chỉ được sắp xếp
vào một dòng tương ứng và sơ đồ sắp xếp được thiết kế cứng dễ dàng. Nhưng các
cache liên kết đầy đủ và cache liên kết tập hợp có một số lựa chọn để thay thế dòng
cache, đó là chính sách thay thế dòng cache và chúng được thực hiện bằng phần
dụng gần đây ít nhất (LRU); Vào trước, ra trước (FIFO); Tần suất sử dụng ít nhất
(LFU); và Ngẫu nhiên (Random) [4, 5, 10, 62].
2.3.1. Chính sách thay thế cache LRU
Khi thực hiện thuật toán LRU, một dòng bị chọn làm dòng nạn nhân để thay
thế bằng nội dung mới của một khối từ bộ nhớ chính nếu nội dung cũ của dòng này
ít được sử dụng gần đây nhất. LRU là thuật toán thay thế được sử dụng phổ biến
trong các CMP [4, 12, 59].
2.3.2. Chính sách thay thế cache LFU
Để thực hiện thuật toán LFU, mỗi dòng cache có thêm quan hệ với bộ đếm
riêng, và bộ đếm được tăng lên mỗi khi dòng tương ứng được tham chiếu. Như vậy,
một dòng được thay thế khi giá trị bộ đếm của nó nhỏ nhất, vì nó có tần suất tham
chiếu ít nhất.
2.3.3. Chính sách thay thế cache FIFO
Để thực hiện thuật toán FIFO, các dòng cache được sắp xếp trong một danh
sách theo kiểu hàng đợi. Đầu hàng là dòng được sử dụng gần đây ít nhất (LRU),
cuối hàng là dòng được sử dụng gần đây nhiều nhất (MRU). Khi có trượt cache và thực hiện thay thế, dòng LRU ở đầu hàng là nạn nhân trước tiên, nó bị đẩy ra ngoài hàng, nghĩa là nội dung cũ của nó bị thay thế bởi nội dung của khối từ bộ nhớ chính.
Hàng có nội dung bị thay thế trở thành hàng MRU, nó được đưa vào vị trí trống ở
cuối hàng. FIFO cũng là thuật toán thay thế thông dụng.
2.3.4. Chính sách thay thế cache Random
Random là thuật toán thay thế tùy tiện, nghĩa là chọn bất cứ dòng nào của cache để sắp xếp một khối từ bộ nhớ chính. Thuật toán này đơn giản cho thiết kế
phần cứng, chi phí thấp. Nếu dùng cache liên kết tập hợp 2-dòng thì tỷ số trượt
cache của thuật toán Random chỉ cao hơn thuật toán LRU và vì chỉ có hai dòng trong một tập hợp nên chỉ có thể thay thế một trong hai dòng mà thôi. Do đó, thuật toán Random có cơ hội thay thế 50-50 như LRU. Dung lượng cache càng lớn thì tỷ
số trượt cache của cả Random và LRU đều giảm đi và sự khác biệt của hai thuật toán này không đáng kể.
Các chính sách thay thế LRU, LFU, FIFO, Random,.. được sử dụng có hiệu
quả trong các chip đơn lõi và cũng được sử dụng cho các CMP đa luồng, tuy nhiên
không đạt được hiệu năng cao. Do đó, có một số chính sách thay thế cache được đề
xuất cho CMP đa luồng [3, 45] nhằm nâng cao hiệu năng của bộ xử lý.
2.3.5. Chính sách thay thế cache NRU
Chính sách thay thế NRU là một cách xấp xỉ của chính sách thay thế cache
LRU, thường được sử dụng trong CMP đa luồng hiện đại hiệu năng cao. NRU sử
dụng một bit duy nhất cho mỗi khối cache được gọi là nru-bit. Với chỉ 1 bit của
thông tin, NRU cho phép hai dự đoán khoảng tham chiếu lại: Tham chiếu lại gần
ngay lập tức và tham chiếu lại xa. Khi giá trị nru-bit = 0 có nghĩa là một khối cache
được sử dụng gần đây và khối cache đã dự đoán sẽ được tham chiếulại trong tương
lai gần ngay lập tức. Khi giá trị nru-bit = 1 có nghĩa là khối này không được sử
dụng gần đây và khối được dự đoán sẽ được tham chiếu lại trong tương lai xa. Khi
đầy cache, NRU luôn luôn dự đoán rằng thiếu khối sẽ có tham chiếu lại gần ngay lập tức.Với tham chiếulại, NRU một lần nữa dự đoán trước rằng khối tham chiếu
sẽ có tham chiếu lại gần ngay lập tức. Khi trượt cache, NRU lựa chọn các khối
cache nạn nhân mà dự đoán tham chiếu lại trong tương lai xa, tức là, một khối mà nru-bit = 1. Bởi vì nhiều khối cache có thể có một dự đoán tham chiếu lại xa. Chính sách lựa chọn nạn nhân NRU luôn luôn bắt đầu việc tìm kiếm nạn nhân từ một vị trí
cố định. Trong trường hợp tất cả cácgiá trị nru-bit = 0, tức là, tất cả các khốiđược
dự đoán sẽđược tham chiếu lại trong tương lai gần ngay lập tức, NRU cập nhật các
dự đoán tham chiếu lại của tất cả các khối cache trong tương lai xa và lặp lại tìm kiếm nạn nhân. Cập nhật tất cả nru-bit = 1 cho phép chính sách lựa chọn nạn nhân thực hiện tiến trình chuyển tiếp trong khi đó cũng loại bỏ các khối cũ từ cache.
2.3.6.Chính sách thay thế cache SRRIP
Với một bit thông tin, NRU có thể dự đoán hoặc là khoảng tham chiếu lại gần
ngay lập tức hoặc là khoảng tham chiếulại xa cho tất cả các khối được lấp đầy vào cache. Luôn dự đoánkhoảng tham chiếu lại gần ngay lập tức trên tất cả cache được
chèn vào làm hạn chế hiệu năng cache cho các mô hình truy nhập hỗn hợp. Mặt
các mô hình truy nhập mà chủ yếu là khoảng tham chiếu lại gần ngay lập tức. Để khắc phục hạn chếcủa NRUmột chính sách thay thế cache SRRIP được đề xuất.
Chính sách thay thế cache SRRIP thực hiện dựa trên dự đoán khoảng cách
tham chiếu lại (RRIP). RRIP sử dụng M-bit cho mỗi khối cache để lưu trữ một
trong 2M giá trị dự đoán tham chiếu lại (RRPV) có thể thực hiện được. RRIP biết được linh hoạt thông tin tham chiếu lại cho mỗi khối cache trong mô hình truy nhập
cache. Khi RRPV = 0 có nghĩa là một khối cache được dự đoán sẽ tham chiếu lại
trong tương lai gần ngay lập tức, trong khi RRPV = 2M - 1 có nghĩa là một khối
cache đã dự đoán sẽ được tham chiếu lại trong tương lai xa. Về mặt định lượng, RRIP dự đoán rằng các khối có các RRPV nhỏ được tham chiếu lại sớm hơn các khối có các RRPV lớn. Khi M = 1, RRIP cho phép hai dự đoán khoảng tham chiếu lại đó là tham chiếu lại ngay lập tức và tham chiếu lại xa. Khi M > 1, RRIP cho phép các khoảng tham chiếulạitrung gian tức là lớn hơn khoảng tham chiếu lại gần
ngay lập tứcnhưngnhỏhơn khoảng tham chiếulại xa. Mục đíchchủ yếu của RRIP
là để ngăn chặn các khối cache với một khoảng tham chiếu lại xa do làm bẩn cache.
Như vậy, SRRIP dự đoán khoảng tham chiếu lại của tất cả các khối cache bị trượt để có một khoảng tham chiếu lại trung gian. Khi đó, RRIP cập nhật dự đoán
tham chiếu lại ngắn hơn so với dự đoán trước đó trong khoảngtham chiếu lại.
Chính sách thay thế cache SRRIP có hai chính sách để cập nhật dự đoán tham chiếu lại: SRRIP-ưu tiên trúng (SRRIP-HP) và SRRIP-ưu tiên tần suất (SRRIP-FP).
Chính sách RRIP-HP dự đoán rằng khối cache nhận được trúng cache sẽ được
tham chiếu lại trong tương lai gần ngay lập tức và cập nhật RRPV của khối cache liên quan bằng không. Mục đích của chính sách HP là ưu tiên thay thế các khối
cache không nhận được trúng cache hơn khối cache bất kỳ nhận được trúng cache.
Chính sách RRIP-FP cập nhật khoảng tham chiếu lại đã được dự đoán là ngắn hơn khoảng tham chiếulại trướcđó, mỗi lần một khối cache nhận được trúng cache. Chính sách FP hoàn thành việc này bằng cách giảm số ghi RRPV (trừ khi số ghi
RRPV = 0) khi trúng cache. Mục đích của chính sách FP là ưu tiên thay thế các khối cache tham chiếu lại không thường xuyên khi các khối cachetham chiếu lại thường
2.3.7. Chính sách thay thế cache DRRIP
Sử dụng chính sách thay thế cache SRRIP sẽ không hiệu quả khi khoảng
tham chiếu lại của các khối cache là lớn hơn so với dung lượng cache sẵn có. Trong các tình huống như vậy, SRRIP sẽ gây ra hiện tượng đập cache và dẫn đến là không trúng cache. Hiện tượng này được khắc phục bằng cáchđề xuất chính sách thay thế hai phương thức RRIP (BRRIP). BRRIP chèn vào phần lớn các khối cache với một
dự đoán khoảng tham chiếu lại xa (tức là RRPV = 2M - 1) và chèn không thường
xuyên (với xác suất thấp) các khối mới với dự đoán khoảng tham chiếu lại dài (tức
là RRPV = 2M - 2). BRRIP tương tự như chính sách chèn hai phương thức (BIP) [45] thành phần của BIP giúp duy trì một số tập làm việc trong cache.
Đối với các mô hình truy nhập không đập cache, sử dụng BRRIP có thể làm giảm đáng kể hiệu năng cache. Do đó, để sử dụng cho tất cả các mô hình truy nhập
cache, bằng cách đề xuất một chính sách thay thế cache dự đoán khoảng tham chiếu lại động (DRRIP).
DRRIP sử dụng tranh chấp tay đôi tập hợp (SD) để xác định chính sách thay
thế nào là phù hợp nhất cho một ứng dụng. Chính sách thay thế cache DRRIP lựa
chọn linh hoạt giữa SRRIP và BRRIP bằng cách sử dụng hai bộ giám sát tranh chấp
tay đôi tập hợp (SDM). SDM hạn chế trượt cache cho bất kỳ chính sách được đưa ra bằng cách cung cấp thường xuyên một vài tập hợp của cache theo chính sách đó. SD sử dụng một bộ đếm lựa chọn chính sách (PSELC) duy nhất để xác định chính sách được chọn. DRRIP sử dụng chính sách được chọn của hai SDM cho các tập
hợp còn lại của cache.
2.4. Ghi và đọc cache
2.4.1. Ghi cache
Khi thực hiện một chương trình, mỗi khi CPU có nhu cầu ghi nội dung mới ra
một khối của bộ nhớ chính, mà một phần hay toàn bộ nội dung cũ của khối nhớ đó đang lưu giữ trong một dòng của cache. CPU phải thực hiện đồng thời ghi dữ liệu
mới đó vào dòng cache và vào khối nhớ tương ứng trên bộ nhớ chính để đảm bảo sự đồng nhất dữ liệu trên cả hai vị trí (dòng cache và khối nhớ). Như vậy, khi trúng
cache nội dung của dòng cache được đọc đồng nhất với nội dung của khối mà CPU tham chiếu. Thời gian của quá trình ghi này được điều khiển nhờ chính sách ghi.
Khi có tham chiếu ghi bộ nhớ và cache, có thể xuất hiện2 trường hợp:
Dữ liệu bẩn:
Dữ liệu bẩn là dữ liệu bị thay đổi bên trong dòng cache nhưng chưa thay đổi
bên trong khối nhớ tương ứng ở bộ nhớ chính.
Dữ liệu cũ:
Dữ liệu cũ là dữ liệu bị thay đổi trong khối nhớ ở bộ nhớ chính nhưng không thay đổi trong dòng cache tương ứng.
Có hai cách ghi cache: ghi thông qua và ghi trở lại [24, 62, 72].
2.4.1.1. Ghi thông qua
Trong ghi thông qua, mỗi lần ghi, CPU đồng thời ghi ngay nội dung mới vào cả dòng của cache và khối nhớ tương ứng ở bộ nhớ chính như hình 2.10.
Hình 2.10: Ghi thông qua [72].
Ghi thông qua còn gọi là ghi “caching một nửa”, nội dung mới được ghi ngay vào cache để cho CPU có thể sớm đọc nó.
Ưu điểm:
Nội dung của bộ nhớ chính và nội dung của dòng cache luôn tương đồng với
nhau, không cần phải nạp từ cache vào bộ nhớ chính, và thực hiện đơn giản.
Nhược điểm:
Phải tham chiếu bộ nhớ chính nên thời gian ghi chậm. Như vậy, để tăng tốc