Các loại trượt cache

Một phần của tài liệu Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý thế hệ sau (Trang 55 - 153)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

(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 (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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

Một phần của tài liệu Tối ưu hoá và đánh giá hiệu năng của tổ chức cache trong hệ thống vi xử lý thế hệ sau (Trang 55 - 153)