You are on page 1of 62

TRƯỜNG ĐẠI HỌC

SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH


HCMC University of Technology and Education

Nhóm 2 : Kiến trúc máy tính

BÁO CÁO

ĐỀ TÀI: CACHE AND SMPCACHE SIMULATOR

Nguyễn Đức Ngọc Cảnh [17119059@student.hcmute.edu.vn]


Đặng Huỳnh Thi [17119103@student.hcmute.edu.vn]
Phạm Huỳnh Minh Sang [17119097@student.hcmute.edu.vn]
Ngô Thịnh Khang [17119082@student.hcmute.edu.vn]
Đồng Thế Anh [17119056@student.hcmute.edu.vn]
Trần Đức Sang [16119138@student.hcmute.edu.vn]

Đại học Sư phạm Kỹ thuật, tháng 12, năm 2019


Mục lục
Phần I. OVERVIEW ........................................................................................... 2

Phần II. CACHE ................................................................................................. 4

2.1. Nguyên lý bộ nhớ cache ..................................................................... 4

2.2. Cách yếu tố thiết kế cache ................................................................. 9

2.2.1. Địa chỉ cache ......................................................................... 9

2.2.2. Hàm ánh xạ ........................................................................... 10

2.2.3. Thuật toán thay thế ............................................................... 22

2.2.4. Chính sách ghi ...................................................................... 24

2.2.5. Kích thước line ..................................................................... 25

2.2.6. Kích thước cache ................................................................... 27

PHẦN III. SMP CACHE ..................................................................................... 31

3.1. Giới thiệu phần mềm .......................................................................... 31

3.2. Mô phỏng đơn xử lý ........................................................................... 39

3.3. Mô phỏng đa xử lý ............................................................................. 52

PHẦN IV. CONCLUSION ................................................................................. 60

PHẦN V. ĐÁNH GIÁ ĐÓNG GÓP CÁC THÀNH VIÊN TRONG NHÓM....... 61

1
PHẦN I. OVERVIEW
Trên thực tế, các thiết kế của chip SoC có một vấn đề rất lớn, đó là bộ nhớ
chính RAM chậm, quá chậm. Vì vậy, người ta phải đưa ra một cách giải quyết khác
và nó được gọi là bộ nhớ đệm.

Tại CPU. Nó nắm quyền chi phối tối cao với thiết bị và tốc độ của nó đòi hỏi
phải rất cao. Một CPU trung bình có xung nhịp từ 2.6 GHz đến khoảng 3.5 GHz.
Trong khi đó, xung nhịp trung bình của module RAM chỉ khoảng 1200 MHz (có sử
dụng công nghệ DDR). Vậy điều đó nghĩa là thanh RAM trung bình chạy ở tốc độ
xung nhịp chậm hơn khoảng 2-3 lần so với CPU. Điều này quả thật như một khoảng
thời gian vô tận. Mỗi khi CPU cần cái gì đó từ RAM, nó sẽ phải chờ đợi, chờ đợi và
chờ đợi trong khi dữ liệu được nạp.

Như vậy chúng ta đã thấy được mấu chốt của vấn đề. Tuy nhiên, tình hình
không thực sự xấu đến mức như vậy, bởi vì những công nghệ như Double-Data-Rate
(DDR) RAM có thể gửi đi lượng dữ liệu gấp đôi trong mỗi chu kỳ xung nhịp. Ngoài
ra còn các kỹ thuật được tích hợp bên trong CPU, để đảm bảo dữ liệu sẽ được yêu
cầu sớm nhất có thể, trước khi nó thực sự cần đến.

Tại thời điểm của bài viết, các chip SoC mới nhất đang sử dụng DDR4 với tốc
độ hiệu quả lên đến 2666 MHz, vậy nếu xung nhịp của CPU là 2.6GHz hoặc chậm
hơn, bộ nhớ giờ chắc hẳn sẽ đuổi kịp CPU rồi chứ? Không hẳn vậy, vấn đề là các bộ
xử lý hiện đại sử dụng 4 đến 8 nhân, vì vậy sẽ không chỉ có một CPU truy cập vào
bộ nhớ, mà sẽ có 8 CPU, chúng đều cần dữ liệu, và chúng cần nó càng nhanh càng
tốt.

Sự hạn chế hiệu năng này được gọi là nút thắt cổ chai Von Neumann, lấy theo
tên của một trong những người chủ chốt phát minh ra máy tính hiện đại ngày nay.

2
Nhược điểm của kiến trúc Von Neumann là nút thắt cổ chai về hiệu năng xuất hiện
khi dữ liệu đi qua bị giới hạn do sự khác biệt tương đối về tốc độ giữa CPU và RAM.

Có một số phương pháp để cải thiện tình trạng này và giảm sự khác biệt về
hiệu năng, một trong số đó là sử dụng bộ nhớ đệm. Vậy bộ nhớ đệm là gì? Nói một
cách đơn giản, nó là một lượng nhỏ của bộ nhớ được đặt trên chip SoC, và chạy cùng
tốc độ với CPU. Điều này có nghĩa là CPU không cần phải chờ đợi mỗi khi cần dữ
liệu từ bộ nhớ đệm nữa, dữ liệu sẽ được gửi thẳng tới CPU với cùng tốc độ mà CPU
hoạt động. Hơn nữa, bộ nhớ đệm được cài đặt trên mỗi một nhân CPU, nên mỗi nhân
CPU sẽ có bộ nhớ đệm riêng và sẽ không có bất kỳ tranh chấp nào về việc ai được
truy cập vào nó.

Nếu vậy thì sao không làm tất cả bộ nhớ giống như bộ nhớ đệm? Câu trả lời
rất đơn giản. Bộ nhớ đệm có thể chạy với tốc độ đó rất đắt. Giá thành là một rào cản
thực sự. Cấu tạo Cache thực ra là SRAM, sử dụng transitor lưu trữ 0,1 nên chi phí
đắt, mỗi loại lại có mức đắt khác nhau nên không thể làm to và dài như DRAM
được. Đó là lý do tại sao dung lượng bộ nhớ đệm trung bình thường được tính bằng
Kilobyte, có thể 32K hay 64K, thay vì hàng Megabyte như thường thấy ở DRAM.

Vậy giờ mỗi nhân CPU sẽ có vài Kilobyte bộ nhớ siêu nhanh, có thể dùng để lưu bản
sao của một phần trên bộ nhớ chính. Nếu bản sao trong vùng đệm thực sự là bộ nhớ
mà CPU cần, nó sẽ không cần truy cập vào bộ nhớ chính chậm chạp để lấy dữ liệu
nữa.

Do bộ nhớ đệm chỉ có vài Kilobyte nên sẽ có những lúc vùng đệm có đúng nội dung
bộ nhớ, còn được biết đến như một “cache hit” (trùng bộ nhớ đệm), và có những lúc
không, còn được gọi là “cache miss” (lệch bộ nhớ đệm). Tỷ lệ trùng bộ nhớ đệm
càng cao càng tốt.

3
PHẦN II. CACHE

2.1. Nguyên lý bộ nhớ cache


Mục đích bộ nhớ Cache được thiết kế để kết hợp thời gian truy cập của bộ nhớ
tốc độ cao, đắt tiền với dung lượng lớn của bộ nhớ tốc độ thấp và rẻ hơn. Trong đó,
có một bộ nhớ chính tương đối lớn và chậm cùng với một bộ nhớ cache nhỏ hơn,
nhanh hơn.

Cache chứa bản sao của một phần bộ nhớ chính. Khi bộ xử lý muốn đọc một
word của bộ nhớ chính, trước tiên phải kiểm tra để xác định xem word đó có nằm
trong cache hay không. Nếu có, word này được truyền từ cache đến bộ xử lý. Nếu
không, một block trong bộ nhớ chính, gồm một vài word có chứa word mong muốn,
được đọc vào cache và rồi word đó được gửi đến bộ xử lý.

Do tính cục bộ của tham chiếu, khi một block dữ liệu được truy xuất vào bộ
nhớ cache để đáp ứng một tham chiếu bộ nhớ, có khả năng là sắp tới sẽ có sự tham
chiếu tới cùng vị trí bộ nhớ đó hoặc tới các word khác trong block đó.

4
Hình 1. Cache và bộ nhớ chính

Hình 1 miêu tả việc sử dụng nhiều cấp bộ nhớ cache. Cache L2 chậm hơn và
thường lớn hơn cache L1, cache L3 chậm hơn và thường lớn hơn cache L2.

5
Hình 2. Cấu trúc Cache/Bộ nhớ chính

Hình 2 mô tả cấu trúc của một hệ thống cache/bộ nhớ chính. Bộ nhớ chính có
tới 2𝑛 word, mỗi word có một địa chỉ n bit duy nhất. Vì mục đích ánh xạ, bộ nhớ này
được coi là bao gồm K block có độ dài cố định. Tức là, có M = 2𝑛 /k block trong bộ
nhớ chính. Bộ nhớ cache bao gồm C block, được gọi là line. Mỗi line có K word,
cộng với một vài bit của trường tag. Mỗi line còn chứa các bit điều khiển (không
được thể hiện), chẳng hạn như một bit cho biết line đó kể từ khi được nạp vào cache
đã được thay đổi hay chưa. Độ dài của một line, không bao gồm tag và các bit điều
khiển, được gọi là kích thước line. Kích thước line nhỏ nhất là 32 bit, với mỗi “word”
là một byte; trong trường hợp này kích thước line là 4 byte. Số lượng line ít hơn đáng
kể so với số lượng block bộ nhớ chính (m≪M). Tại một thời điểm, một vài tập con

6
của các block bộ nhớ chính nằm trong các line của cache. Nếu một word trong một
block của bộ nhớ chính được đọc, block đó được truyền đến một trong các line của
cache. Bởi vì có nhiều block hơn line, một line sẽ không được dành riêng vĩnh viễn
cho một block cụ thể. Do đó, mỗi line bao gồm một tag để xác định block nào đang
được lưu trữ. Tag thường là một phần của địa chỉ bộ nhớ chính.

Hình 3. Hành động đọc cache

7
Hình 3 mô tả hành động đọc. Bộ xử lý tạo ra địa chỉ đọc (RA – read address)
của một word cần đọc. Nếu word đã nằm trong bộ nhớ cache, nó sẽ được gửi đến bộ
xử lý. Nếu không, block chứa word đó được nạp vào bộ nhớ cache, và word được
gửi đến bộ xử lý. Hình 3 cho thấy hai hành động cuối cùng diễn ra song song và phản
ánh tổ chức điển hình của bộ nhớ cache như mô tả trong hình 4. Trong tổ chức này,
cache kết nối với bộ xử lý thông qua các đường dữ liệu, điều khiển và địa chỉ. Đường
dữ liệu và địa chỉ còn nối tới bộ đệm dữ liệu và địa chỉ; các bộ đệm này lại nối tới
bus hệ thống để từ đó nối tới bộ nhớ chính. Khi có một cache hit, bộ đệm dữ liệu và
bộ đệm địa chỉ bị vô hiệu hóa, chỉ có giao tiếp giữa bộ xử lý và cache, không có lưu
lượng trên bus hệ thống. Khi có một cache miss, địa chỉ mong muốn được tải lên bus
hệ thống và dữ liệu được đưa ra qua bộ đệm dữ liệu tới cả bộ nhớ cache và bộ xử lý.
Trong cách tổ chức khác, cache được đặt giữa bộ xử lý và bộ nhớ chính đối với tất
cả đường dữ liệu, địa chỉ và điều khiển. Trong trường hợp này, đối với một cache
miss, trước tiên word mong muốn được đọc vào cache rồi sau đó chuyển từ cache
sang bộ xử lý

Hình 4 .Tổ chức cache điển hình

8
2.2. Các yếu tố thiết kế cache
Mặc dù có nhiều cách thực hiện bộ nhớ cache, có một vài yếu tố thiết kế cơ
bản được dùng để phân loại và phân biệt các kiến trúc bộ nhớ cache.

2.2.1. Địa chỉ cache


Hầu hết các bộ xử lý không nhúng, và nhiều bộ vi xử lý nhúng, có hỗ trợ bộ
nhớ ảo. Về cơ bản, bộ nhớ ảo là một tiện ích cho phép các chương trình định địa chỉ
bộ nhớ từ quan điểm logic, mà không cần quan tâm dung lượng vật lý sẵn có của bộ
nhớ chính. Khi bộ nhớ ảo được sử dụng, các trường địa chỉ của lệnh máy chứa các
địa chỉ ảo. Để đọc và ghi ở bộ nhớ chính, một khối phần cứng quản lý bộ nhớ (MMU
– memory management unit) sẽ dịch địa chỉ ảo sang địa chỉ vật lý trong bộ nhớ chính.
Khi địa chỉ ảo được sử dụng, nhà thiết kế hệ thống có thể lựa chọn để đặt cache giữa
bộ xử lý và MMU hoặc giữa MMU và bộ nhớ chính (Hình 4.6). Cache logic, còn
được gọi là cache ảo, lưu trữ dữ liệu bằng địa chỉ ảo. Bộ xử lý truy cập cache trực
tiếp mà không phải đi qua MMU. Cache vật lý lưu trữ dữ liệu nhờ sử dụng địa chỉ
vật lý của bộ nhớ chính.
Một ưu điểm rõ ràng của cache logic là tốc độ truy cập bộ nhớ cache nhanh
hơn so với tốc độ truy cập cache vật lý, vì cache có thể đáp ứng trước khi MMU thực
hiện dịch địa chỉ.
Nhược điểm là hầu hết các hệ thống bộ nhớ ảo cung cấp cho các ứng dụng
cùng một không gian địa chỉ bộ nhớ ảo giống nhau. Tức là, mỗi ứng dụng đều thấy
một bộ nhớ ảo bắt đầu ở địa chỉ 0. Do đó, cùng một địa chỉ ảo trong hai ứng dụng
khác nhau tương ứng với hai địa chỉ vật lý khác nhau. Vì vậy, bộ nhớ cache phải
được làm sạch hoàn toàn với mỗi chuyển đổi ngữ cảnh của ứng dụng hoặc phải thêm
các bit bổ sung vào mỗi line của cache để xác định xem địa chỉ này tương ứng với
không gian địa chỉ ảo nào.

9
2.2.2. Hàm ánh xạ
Bởi vì số lượng line trong cache ít hơn số block bộ nhớ chính, cần có thuật
toán ánh xạ các block bộ nhớ chính vào các line cache. Hơn nữa, cần có phương tiện
để xác định block bộ nhớ chính nào đang chiếm một line cache. Hàm ánh xạ được
sử dụng sẽ quyết định cách Chương 4. Bộ nhớ cache 87 thức tổ chức cache. Ba kỹ
thuật ánh xạ có thể được sử dụng là: trực tiếp, kết hợp, và kết hợp tập hợp.

2.2.2.1. Ánh xạ trực tiếp

10
Đây là kỹ thuật ánh xạ đơn giản nhất, ánh xạ mỗi block của bộ nhớ chính vào
một line cache xác định duy nhất. Hàm ánh xạ được biểu diễn bởi

I = j mod m

trong đó

i = chỉ số line cache

j = chỉ số block bộ nhớ chính

m = tổng số line trong cache

Hình 5 mô tả sự ánh xạ m block đầu tiên của bộ nhớ chính. Mỗi block trong
bộ nhớ chính được ánh xạ vào một line duy nhất trong cache. M block tiếp theo của
bộ nhớ chính cũng được ánh xạ vào cache theo cách tương tự; tức là, block Bm của
bộ nhớ chính ánh xạ vào line L0 of cache, block Bm+1 ánh xạ vào line L1, v.v…

Hàm ánh xạ này được thực hiện dễ dàng bằng địa chỉ bộ nhớ chính. Hình 6
mô tả cơ chế tổng quát. Đối với mục đích truy cập bộ nhớ cache, mỗi địa chỉ bộ nhớ
chính được xem như bao gồm ba trường. w bit có trọng số nhỏ nhất xác định một
word hoặc một byte trong một block của bộ nhớ chính; trong hầu hết các máy tính
hiện đại, địa chỉ được đánh ở mức byte. S bit còn lại xác định một block trong 2 s
block của bộ nhớ chính. Logic cache chia s bit này thành trường tag s – r bit (phần
bit có trọng số lớn nhất) và trường line r bit. Trường line xác định một line trong m
= 2r line của cache.

Tóm lại,

• Độ dài địa chỉ = (s + w) bits

• Số lượng đơn vị địa chỉ= 2s+w word hoặc byte

11
• Kích thước block = kích thước line = 2w word hoặc byte

• Số block trong bộ nhớ chính = 2s+ w/2w = 2s

• Số line trong cache = m = 2r

• Kích thước cache = 2 r+ w word hoặc byte

• Kích thước tag = (s – r) bit

Hình 5 Ánh xạ từ Bộ nhớ chính sang Cache: Trực tiếp

12
Hình 6. Tổ chức cache ánh xạ trực tiếp

Trong hình 6, khi CPU cần một dữ liệu nào đó sẽ gửi một lệnh yêu cầu truy
xuất đến cache. Ban đầu Line sẽ được kiểm tra xem line mà CPU yêu cầu có trong
cache hay không. Vì một line trong một khoảng thời gian có thể không chứa duy nhất
một địa chỉ dữ liệu vì vậy sẽ tiếp tục kiểm tra tag xem có đúng là nằm trong line
thuộc cache đó hay không. Bằng cách lấy tag thuộc địa chỉ mà CPU cần lấy thông
tin so sánh với tag thuộc dữ liệu trong line vừa xác định trong cache, nếu đúng sẽ

13
cùng với word tìm đúng vào dữ liệu mà CPU cần . Nếu sai sẽ cộng với đường địa chỉ
ban đầu vào trong main memory để truy xuất dữ liệu về CPU.

Kỹ thuật ánh xạ trực tiếp đơn giản và không tốn kém để thực hiện. Nhược
điểm chính là chỉ có một vị trí cố định trong cache dành cho một block bất kỳ. Vì
vậy, nếu một chương trình tham chiếu lặp đi lặp lại các word thuộc hai block khác
nhau nhưng được ánh xạ vào cùng một line, khi đó các block sẽ liên tục bị đổi chỗ
trong cache, và tỷ lệ truy cập cache thành công sẽ rất thấp. Một phương pháp để giảm
cache miss là ghi nhớ dữ liệu đã bị loại bỏ khỏi cache đề phòng trường hợp sau đó
lại cần nó lần nữa. Vì dữ liệu bị loại bỏ đã từng được truy xuất, nên nó có thể được
sử dụng lại. Việc tái sử dụng này có thể khả thi nếu sử dụng một cache nạn nhân.
Cache nạn nhân là bộ nhớ cache kết hợp toàn phần, có kích thước từ 4 đến 16 line,
nằm giữa cache L1 ánh xạ trực tiếp và cấp độ bộ nhớ tiếp theo.

2.2.2.2. Ánh xạ kết hợp

Ánh xạ kết hợp khắc phục nhược điểm của ánh xạ trực tiếp bằng cách cho
phép mỗi block bộ nhớ chính được nạp vào bất kỳ line nào trong cache (Hình 7).
Trong trường hợp này, địa chỉ bộ nhớ được coi là bao gồm trường Tag và trường
Word. Trường Tag xác định một block bộ nhớ chính duy nhất. Để xác định một block
có nằm trong bộ nhớ cache hay không, logic điều khiển cache phải kiểm tra tag của
tất cả các line cùng lúc để tìm ra giá trị tag trùng. Hình 8 minh hoạ cho logic này.

14
Hình 7 Ánh xạ từ Bộ nhớ chính sang Cache: kết hợp

15
Hình 8. Tổ chức cache ánh xạ kết hợp

Cách tổ chức hoạt động của ánh xạ kết hợp tưng đối giống với ánh xạ trực tiếp
, khác ở chỗ ánh xạ kết hợp sẽ kiểm tra hết tất cả cách line có trong cache nên ko cần
địa chỉ line mà thay vào đó địa chỉ tag sẽ lớn hơn và cụ thể là 22bit và mỗi lần cần
lấy dữ liệu trong cache, CPU sẽ kiểm tra tất cả các tag có trong cache.

Lưu ý rằng không có trường nào trong địa chỉ tương ứng với chỉ số line, do đó
chỉ số line trong cache không được xác định bằng định dạng địa chỉ. Tóm lại,

• Độ dài địa chỉ = (s + w) bit

• Số lượng đơn vị địa chỉ = 2s + w word hoặc byte

• Kích thước block = Kích thước line = 2w word hoặc byte

• Số lượng block trong bộ nhớ chính = 2s + w /2w = 2 s

• Số lượng line trong cache = không xác định

• Kích thước tag = s bi

Với ánh xạ kết hợp, việc lựa chọn block nào bị thay thế khi có một block mới
được đọc vào bộ nhớ cache trở nên linh hoạt hơn. Các thuật toán thay thế được thiết
kế sao cho tỷ lệ truy cập cache thành công là cao nhất. Nhược điểm chính của ánh xạ
kết hợp là yêu cầu mạch điện phức tạp hơn để có thể kiểm tra tag của tất cả các line
trong cache đồng thời.

2.2.2.3. Ánh xạ kết hợp tập hợp

Ánh xạ kết hợp tập hợp thể hiện ưu điểm của cả phương pháp ánh xạ trực tiếp
và kết hợp đồng thời lại giảm được nhược điểm của chúng. Trong trường hợp này,
bộ nhớ cache gồm một số tập hợp, mỗi tập hợp gồm một số line. Hàm ánh xạ được
thể hiện bằng công thức: m = v * k
16
I = j mod v

Trong đó I = chỉ số của tập hợp trong cache

• j = chỉ số của block trong bộ nhớ chính


• m = số lượng line trong cache
• v = số lượng tập hợp
• k = số lượng line trong một tập hợp

Ta gọi đây là ánh xạ kết hợp tập hợp k chiều. Với ánh xạ kết hợp tập hợp,
block B có thể được ánh xạ vào bất kỳ line nào của tập i. Hình 9a minh hoạ sự ánh
xạ v block đầu tiên của bộ nhớ chính. Giống với ánh xạ kết hợp, mỗi word có thể ánh
xạ vào nhiều line trong cache. Đối với ánh xạ kết hợp tập hợp, một word có thể ánh
xạ được vào tất cả các line trong một tập hợp nhất định, do đó block B0 ánh xạ vào
tập 0, block B1 ánh xạ vào tập 1, v.v… Vì vậy, một bộ nhớ cache kết hợp tập hợp có
thể được thực hiện như v bộ nhớ cache kết hợp. Cũng có thể thực hiện bộ nhớ cache
kết hợp tập hợp như k cache ánh xạ trực tiếp, như thể hiện trong hình 9.b. Mỗi cache
ánh xạ trực tiếp được gọi là một chiều, gồm v line. Vậy v block đầu tiên của bộ nhớ
chính được ánh xạ trực tiếp vào v line của mỗi chiều; nhóm v block tiếp theo của bộ
nhớ chính được ánh xạ tương tự, v.v… Việc thực hiện ánh xạ trực tiếp thường được
sử dụng khi mức độ kết hợp nhỏ (tức là giá trị k nhỏ) trong khi việc thực hiện ánh xạ
kết hợp thường được sử dụng khi mức độ kết hợp cao hơn. Đối với ánh xạ kết hợp
tập hợp, logic điều khiển cache diễn giải địa chỉ bộ nhớ thành ba trường: Tag, Set và
Word. Trong đó, d bit trường Set chỉ định một trong v = 2 d tập hợp. s bit của trường
Tag và Set xác định một trong 2s block của bộ nhớ chính.

Hình 10 minh hoạ logic điều khiển bộ nhớ cache. Với ánh xạ kết hợp toàn
phần, trường tag trong một địa chỉ bộ nhớ khá lớn và phải được so sánh với tag của

17
tất cả các line trong cache. Với ánh xạ kết hợp tập hợp k chiều, trường tag trong địa
chỉ bộ nhớ nhỏ hơn nhiều và chỉ cần so sánh với k tag trong một tập hợp duy nhất.

Tổ chức hoạt động của ánh xạ kết hợp toàn phần là sự kết hợp ưu điểm của hai
ánh xạ trên, hạn chế được các khuyết điểm của cách ánh xạ trước.

Tóm lại,

• Độ dài địa chỉ = (s + w) bit

• Số lượng đơn vị địa chỉ = 2s+w word hoặc byte

• Kích thước block = kích thước line = 2w word hoặc byte

• Số block trong bộ nhớ chính = 2s+w/2w = 2 s

• Số line trong tập hợp = k

• Số lượng set = v = 2d

• Số lượng line trong cache = m = kv = k * 2 d

• Kích thước cache = k * 2d+w word hoặc byte

• Kích thước tag = (s – d) bit

18
Hình 9. Ánh xạ từ Bộ nhớ chính sang Cache: Kết hợp tập hợp k chiều

19
Hình 10.Tổ chức cache ánh xạ kết hợp tập hợp

Hình 11 là kết quả của một nghiên cứu mô phỏng với hiệu suất cache kết hợp
tập hợp là hàm biến thiên theo kích thước cache. Sự chênh lệch hiệu suất giữa kết
hợp trực tiếp và kết hợp hai chiều là đáng kể khi kích thước cache nhỏ hơn hoặc bằng
64 kB. Cũng lưu ý rằng sự chênh lệch hiệu suất giữa hai chiều và bốn chiều ở 4 kB

20
nhỏ hơn nhiều so với sự chênh lệch ở kích thước cache 8 kB. Độ phức tạp của cache
tăng tỷ lệ với mức độ kết hợp, và thể hiện rõ khi kích thước cache nhỏ hơn 16 Kbyte.
Điểm lưu ý cuối cùng là, ngoài khoảng 32 kB, việc tăng kích thước cache không làm
tăng hiệu suất một cách đáng kể. Kết quả của Hình 11 dựa trên mô phỏng quá trình
thực thi của trình biên dịch GCC. Các ứng dụng khác nhau có thể mang lại kết quả
khác nhau, tuy nhiên kết quả so sánh tỷ lệ truy cập cache thành công với kích thước
cache vẫn thể hiện xu hướng giống như Hình 11.

Hình 11. Sự biến thiên của mức độ kết hợp theo kích thước cache

21
2.2.3. Thuật toán thay thế
Khi bộ nhớ cache đã đầy, nếu một block mới được đưa đến cache, một trong
những block hiện đang nằm trong cache phải được thay thế. Đối với ánh xạ trực tiếp,
chỉ có một line định sẵn cho một block bất kỳ và không có sự lựa chọn nào khác. Đối
với các kỹ thuật kết hợp và kết hợp tập hợp, cần phải có thuật toán thay thế. Để đạt
được tốc độ cao, thuật toán đó phải được thực hiện trong phần cứng. Ta sẽ đề cập
đến bốn trong số các thuật toán phổ biến nhất.

LRU (least recently used): Thay thế block nằm trong cache lâu nhất mà không
có tham chiếu đến nó. Đối với kết hợp tập hợp hai chiều, thuật toán này được thực
hiện dễ dàng. Mỗi line chứa một bit USE. Khi một line được tham chiếu, bit USE
của nó được đặt lên 1 và bit USE của line còn lại trong tập hợp đó được đặt thành 0.
Khi một block mới được đọc vào tập hợp, line có bit USE bằng 0 được thay thế. Do
ta giả thiết rằng các vị trí bộ nhớ được sử dụng gần đây hơn có nhiều khả năng được
tham chiếu tiếp, LRU cho tỷ lệ truy cập thành công tốt nhất. LRU cũng tương đối dễ
thực hiện trong cache kết hợp toàn phần. Cơ chế bộ nhớ cache duy trì một danh sách
riêng chứa chỉ mục của tất cả các line trong cache. Khi một line được tham chiếu, nó
được di chuyển lên phía trên của danh sách. Khi cần thay thế, line ở cuối danh sách
được sử dụng. Do sự đơn giản trong thực hiện, LRU là thuật toán thay thế phổ biến
nhất.

22
Hình 12. Quy trình lại bỏ bộ nhớ cache của LRU

Một thuật toán khác là FIFO (first-in-first-out): Thay thế block trong tập hợp
đã nằm trong cache lâu nhất. FIFO được thực hiện dễ dàng bằng kỹ thuật round-
robin. Một thuật toán khác nữa là LFU (least frequently used): Thay thế block trong
tập hợp mà số lần tham chiếu đến nó là ít nhất.

Hình 13. So sánh giữa 2 thuật toán LRU và FIFO

LFU có thể được thực hiện bằng cách sử dụng một bộ đếm ở mỗi line.

Khi miss, thì block trong cache ít được truy xuất nhất sẽ bị thay thế

23
Hình 14. Quy trình lại bỏ bộ nhớ cache của LFU

Một kỹ thuật khác không dựa trên sự sử dụng block (tức là không phải LRU,
LFU, FIFO) là chọn một line ngẫu nhiên trong số các line. Các nghiên cứu đã chỉ ra
rằng việc thay thế ngẫu nhiên đem lại hiệu suất chỉ kém hơn một chút so với thuật
toán dựa trên sự sử dụng block.

2.2.4. Chính sách ghi


Khi một block đang nằm trong cache được thay thế, có 2 trường hợp cần được
xem xét. Nếu block cũ trong cache chưa từng thay đổi giá trị thì có thể ghi đè block
mới lên mà không cần ghi block cũ ra trước. Nếu có ít nhất một thao tác ghi đã được
thực hiện trên một word trong line của cache thì bộ nhớ chính phải được cập nhật
bằng cách ghi line đó vào một block của bộ nhớ chính trước khi đưa block mới vào
cache. Có nhiều chính sách ghi khác nhau, với ràng buộc về hiệu suất và tính thương
mại. Có hai vấn đề cần phải đối mặt. Một là, nhiều thiết bị có thể truy cập vào bộ

24
nhớ chính. Ví dụ, một mô-đun I/O có thể đọc/ghi trực tiếp vào bộ nhớ. Nếu một word
đã thay đổi chỉ được cập nhật trong cache, thì word tương ứng ở bộ nhớ chính không
còn hợp lệ. Hơn nữa, nếu thiết bị I/O thay đổi word trong bộ nhớ chính, thì word
trong cache lại không hợp lệ. Hai là, vấn đề phức tạp hơn xảy ra khi nhiều bộ xử lý
được gắn vào cùng một bus và mỗi bộ xử lý lại có cache cục bộ riêng. Khi đó, nếu
một word bị thay đổi trong một cache, nó có thể làm mất ý nghĩa một word trong các
cache khác. Kỹ thuật đơn giản nhất được gọi là write through. Sử dụng kỹ thuật này,
tất cả các hành động ghi được thực hiện đồng thời ở cả bộ nhớ chính và cache, đảm
bảo rằng nội dung bộ nhớ chính luôn luôn hợp lệ. Một mô-đun bộ xử lý – cache bất
kỳ có thể giám sát lưu lượng truy cập vào bộ nhớ chính để duy trì tính nhất quán
trong cache của chính nó. Nhược điểm chính của kỹ thuật này là nó tạo ra lưu lượng
bộ nhớ đáng kể và có thể tạo ra nút nghẽn cổ chai. Một kỹ thuật khác, được gọi là
write back, giảm thiểu việc ghi vào bộ nhớ chính. Với write back, việc cập nhật giá
trị mới chỉ được thực hiện trong cache. Khi có một cập nhật xảy ra, một bit được gọi
là dirty bit hoặc use bit trong line được đặt lên 1. Khi một block cần được thay thế
trong cache, nó được ghi trở lại bộ nhớ chính nếu và chỉ nếu dirty bit bằng 1. Vấn đề
đối với write back là nhiều phần của bộ nhớ chính là không hợp lệ, và do đó các truy
cập bằng mô-đun I/O chỉ được cho phép thực hiện thông qua cache. Điều này làm
cho mạch phức tạp hơn và khả năng tạo nút nghẽn cổ chai.

2.2.5. Kích thước line


Một yếu tố thiết kế khác là kích thước line. Khi 1 block dữ liệu được lấy ra và
đặt vào cache, line sẽ chứa không chỉ word mong muốn mà còn một số word liền kề.
Khi kích thước block tăng dần, ban đầu tỷ lệ truy cập thành công cũng tăng do
nguyên lý cục bộ của tham chiếu, theo đó dữ liệu trong vùng lân cận của một word
được tham chiếu có thể sẽ được tham chiếu trong tương lai gần. Khi kích thước block
tăng thêm, nhìều dữ liệu hữu ích hơn được đưa vào cache. Tuy nhiên, tỷ lệ truy cập
25
thành công bắt đầu giảm khi block lớn hơn nữa và xác suất sử dụng thông tin mới
truy xuất sẽ nhỏ hơn xác suất tái sử dụng thông tin phải được thay thế. Có hai ảnh
hưởng rõ rệt là:

• Block lớn hơn làm giảm số lượng block trong cache. Bởi vì mỗi lần truy xuất
block mới lại ghi đè lên nội dung cũ hơn trong cache, số lượng block càng ít
thì dữ liệu càng nhanh chóng bị ghi đè ngay sau khi chúng được truy xuất.
• Khi 1 block lớn hơn, mỗi word thêm vào lại càng xa word mong muốn và do
đó ít có khả năng là cần thiết trong tương lai gần.

Mối quan hệ giữa kích thước line và tỷ lệ truy cập thành công là rất phức tạp,
tùy thuộc vào đặc tính cục bộ của mỗi chương trình cụ thể, và không có giá trị tối ưu
nhất định. Kích thước line từ 8 đến 64 byte được xem là hợp lý, gần như tối ưu.

Hình 15. Mô tả cấu trúc Cache line

26
2.2.6. Kích thước cache
Khi cache mới ra mắt, hệ thống điển hình có một bộ nhớ cache đơn. Gần đây,
việc sử dụng nhiều bộ nhớ cache đã trở nên phổ biến. Hai khía cạnh của vấn đề thiết
kế này là số lượng cấp độ cache và việc sử dụng cache thống nhất hay phân chia.

2.2.6.1. Cache nhiều cấp độ

Khi mật độ logic tăng lên, việc đưa bộ nhớ cache lên trên chip cùng với bộ xử
lý là khả thi: ta có cache trên chip. So với cache có thể truy cập thông qua bus bên
ngoài, cache trên chip làm giảm bớt việc bộ xử lý phải sử dụng bus bên ngoài và do
đó tăng tốc độ thực hiện và tăng hiệu suất tổng thể của hệ thống. Khi đã tìm thấy lệnh
hoặc dữ liệu được yêu cầu trong cache trên chip, việc truy cập bus được loại bỏ. Do
các đường dữ liệu trong bộ xử lý ngắn hơn so với độ dài của bus, việc truy cập bộ
nhớ cache trên chip sẽ nhanh hơn rất nhiều so với chu kỳ bus. Hơn nữa, trong giai
đoạn này, bus được tự do để hỗ trợ các nhu cầu truyền khác. Việc sử dụng một bộ
nhớ cache trên chip mở ra câu hỏi liệu có còn cần cache ngoài chip hay không. Câu
trả lời là có, và hầu hết các thiết kế hiện đại có cả cache trên chip và cache bên ngoài.

Tổ chức đơn giản nhất là bộ nhớ cache hai cấp, với cache trên chip được gán
là cấp 1 (L1) và cache bên ngoài được gán là cấp 2 (L2). Lý do cho việc sử dụng
cache L2 là: Nếu không có cache L2 và bộ xử lý yêu cầu truy cập vào một vị trí bộ
nhớ không có trong cache L1, thì bộ xử lý phải truy cập vào bộ nhớ DRAM hoặc
ROM thông qua bus. Do tốc độ bus thường chậm và thời gian truy cập bộ nhớ chính
lâu, điều này dẫn đến hiệu suất kém. Mặt khác, nếu sử dụng bộ nhớ cache L2 SRAM
(RAM tĩnh), thì thông tin bị thiếu có thể được truy xuất nhanh chóng. Nếu SRAM
đủ nhanh để kịp với tốc độ của bus thì dữ liệu có thể được truy cập bằng một giao
dịch trạng thái không đợi, kiểu truyền bus nhanh nhất. Có hai đặc điểm thiết kế đáng
lưu ý đối với các bộ nhớ cache nhiều cấp độ.

27
Một là, đối với cache L2 ngoài chip, nhiều thiết kế không sử dụng bus hệ thống
làm đường dẫn giữa cache L2 và bộ xử lý, mà sử dụng một đường dẫn dữ liệu riêng
biệt, để giảm bớt gánh nặng cho hệ thống bus. Hai là, khi các thành phần của bộ xử
lý liên tục thu nhỏ kích thước, một số bộ xử lý hiện nay kết hợp cả cache L2 trên
chip xử lý, cải thiện hiệu suất.

Hình 16. tỷ lệ truy cập thành công tổng cộng (L1 và L2) với L1 8Kbyte và 16Kbyte

Hình 16 cho thấy kết quả của một nghiên cứu mô phỏng sự thay đổi hiệu suất
bộ nhớ cache hai cấp theo kích thước cache. Giả thiết rằng cả hai cache kích thước
line nhw nhau. Hình vẽ thể hiện tỷ lệ truy cập cache thành công tổng cộng. Tức là,
một lần truy cập thành công được tính nếu dữ liệu mong muốn xuất hiện trong cache
L1 hoặc L2. Hình vẽ này cho thấy ảnh hưởng của L2 lên tổng số truy cập thành công
28
khi kích thước L1 cố định. L2 bắt đầu có ảnh hưởng đáng kể đến tổng số lần truy cập
cache thành công khi kích thước của nó gấp đôi kích thước cache L1. Lưu ý rằng,
trong đường biểu diễn cho cache L1 có kích thước 8 Kbyte, phần dốc nhất tương ứng
với cache L2 có kích thước là 16 Kbyte. Còn đối với cache L1 16 Kbyte, phần dốc
nhất của đường biểu diễn ứng với kích thước cache L2 là 32 Kbyte. Trước đó, cache
L2 có ảnh hưởng rất ít đến hiệu suất tổng cộng của bộ nhớ cache. Nhu cầu sử dụng
cache L2 lớn hơn cache L1 để cải thiện hiệu suất là hoàn toàn hợp lý. Nếu cache L2
có kích thước line và dung lượng bằng với cache L1, nội dung của nó sẽ gần như
giống hệt cache L1.

Khi diện tích sẵn có trên chip dành cho bộ nhớ cache ngày càng tăng, hầu hết
các bộ xử lý hiện đại đã chuyển cache L2 lên chip xử lý và có thêm cache L3. Ban
đầu, bộ nhớ cache L3 có thể truy cập được qua bus bên ngoài. Gần đây, hầu hết các
bộ xử lý đã tích hợp cache L3 trên chip. Việc dùng thêm cấp độ cache thứ ba có thể
góp phần cải thiện hiệu suất.

Hơn nữa, các hệ thống lớn hiện nay, chẳng hạn như hệ thống mainframe IBM
zEnterprise, kết hợp 3 cấp độ cache trên chip và cache thứ tư dùng chung cho nhiều
chip.

2.2.6.2 Cache thống nhất và cache phân chia

Khi cache trên chip mới xuất hiện, có nhiều thiết kế cho bộ nhớ cache đơn để
lưu trữ các tham chiếu tới cả dữ liệu và lệnh. Gần đây, việc chia tách bộ nhớ cache
thành hai phần: một dành cho lệnh và một dành cho dữ liệu dần trở nên phổ biến.
Hai bộ nhớ cache này ngang hang nhau, thường là hai cache L1. Khi bộ xử lý cần
truy xuất lệnh từ bộ nhớ chính, trước tiên nó sẽ kiểm tra cache lệnh L1, còn khi bộ
xử lý cần truy xuất dữ liệu từ bộ nhớ chính, trước tiên nó sẽ kiểm tra cache dữ liệu
L1. Cache thống nhất có hai ưu điểm:

29
• Đối với một kích thước cache xác định, cache thống nhất có tỷ lệ truy cập
thành công cao hơn cache phân chia vì nó tự động cân bằng tải giữa các truy
xuất lệnh và dữ liệu. Tức là, nếu một mẫu thực thi có nhiều lượt truy xuất lệnh
hơn so với dữ liệu thì bộ nhớ cache sẽ có xu hướng chứa đầy các lệnh và nếu
một mẫu thực thi có tương đối nhiều lượt truy xuất dữ liệu hơn, điều ngược lại
sẽ xảy ra.
• Chỉ cần thiết kế và thực hiện một bộ nhớ cache.

Xu hướng sử dụng cache là cache chia sẻ tại cấp L1 và cache thống nhất cho
các cấp cao hơn, đặc biệt đối với các máy siêu vô hướng chú trọng việc thực hiện
lệnh song song và truy xuất trước các lệnh dự đoán được sử dụng trong tương lai.
Ưu điểm chính của việc thiết kế bộ nhớ cache phân chia là loại trừ sự tranh chấp
cache giữa khối truy xuất/giải mã lệnh và khối thi hành. Điều này rất quan trọng
trong các thiết kế có sử dụng pipeline lệnh. Thông thường, bộ xử lý sẽ truy xuất trước
các lệnh và điền chúng vào một bộ đệm, hoặc pipeline. Giả sử có một bộ nhớ cache
lệnh/dữ liệu thống nhất. Khi khối thi hành truy cập bộ nhớ để tải và lưu trữ dữ liệu,
yêu cầu được gửi đến cache thống nhất. Nếu cùng lúc đó, khối truy xuất lệnh đưa ra
yêu cầu đọc một lệnh cho bộ nhớ cache, yêu cầu đó sẽ tạm thời bị chặn để cache có
thể phục vụ khối thi hành trước, để hoàn thành lệnh hiện đang thi hành. Sự tranh
chấp cache này có thể làm giảm hiệu suất. Cấu trúc cache phân chia khắc phục khó
khăn này.

30
PHẦN III. SMP CACHE

3.1. Giới Thiệu Phần Mềm


SMPCache là một trình giả lập theo dõi để phân tích và giảng dạy về các hệ
thống bộ nhớ đệm trên các bộ xử lý đa đối xứng. Sinh viên có thể sử dụng nó để thử
nghiệm các khía cạnh lý thuyết khác nhau về bộ nhớ đệm và bộ đa xử lý trong các
môn học về Kiến trúc máy tính. Một số thông số mà có thể nghiên cứu với trình giả
lập là: sự ảnh hưởng về số lượng bộ xử lý, giao thức cache, ánh xạ, cache size.

Trình giả lập này được sử dụng vào việc dạy về các bộ nhớ cache. Tiện ích
của nó trong phân tích chương trình và thiết kế bộ nhớ hệ thống trên nhiều bộ xử lý.

Hướng dẫn để có thể tải về miễn phí

Truy cập vào đường link: http://arco.unex.es/smpcache/

Trình mô phỏng có sẵn, với mục đích giáo dục và nghiên cứu, cho các trường
đại học và trung tâm nghiên cứu, miễn phí. Tuy nhiên, cần phải đăng kí. Sau đó, họ
sẽ cấp cho bạn quyền sử dụng, với mục đích giáo dục và nghiên cứu (bất kỳ mục
đích thương mại nào đều bị cấm), trình giả lập SMPCache. Hơn nữa, với đăng ký
này, người dùng sẽ được thông báo khi có bản cập nhật mới.

Để có được SMPCache, các bước cần tuân thủ là:

• Ấn vào link SMPCache license

• Điền, đăng kí và gửi nó.

• Gửi giấy phép qua e-mail (mavega@unex.es).

• Trong vài ngày, bạn sẽ nhận được e-mail với phiên bản SMPCache được yêu
cầu (nó bao gồm một tệp thực thi Windows, và các tệp memory traces).

31
Cách cài đặt phần mềm SMPCache

32
Chạy SMPCache
Ấn vào biểu tượng SMPCache

Sau khi khởi động. Giao diện chính của SMPCache như sau

33
Phần đầu sẽ gồm các phần sau:

Phần Menu

Phần Toolbar

Những chức năng chính của SMPCache (Cửa sổ bên trái):

Trong phần File gồm có:

34
*Load configuration: Mở cấu
hình đã lưu
*Save configuration: Lưu cấu
hình
*Open memory traces: Mở bộ
nhớ traces
-Phần Configuration gồm có:
*Multiprocessor: Đa bộ xử lý
*Main memory: Bộ nhớ chính
*Caches: Bộ nhớ đệm cache
-Phần View evolution gồm có:
*Multiprocessor: Thực hiện mô
phỏng và hiển thị về đa bộ xử

*Main memory: Thực hiện mô
phỏng và hiển thị về bộ nhớ
chính
*Caches: Thực hiện mô phỏng
và hiển thị về bộ nhớ đệm cache
Phần Help gồm có:

35
Quy trình sử dụng phần mềm:
Bước 1:
• Thiết lập mô phỏng thông qua các cấu hình (configure). Cấu hình gồm có của
processor, cache và main memory.

• Có thể tạo ra một cấu hình mới rồi lưu lại hoặc nạp một cấu hình đã lưu (có
thể chỉnh sửa) để sử dụng.

Bước 2
• Mở một file memory traces (lưu các truy xuất bộ nhớ) vào processor, để xem
quá trình thực hiện của processor, cache và main memory

36
Chú ý lựa chọn các processor

Bước 3
• Lựa chọn chế độ thực hiện mô phỏng
• Thường chọn chế độ Complete execution

37
Bước 4:
• Lựa chọn chế độ hiển thị và thực hiện mô phỏng

Hoặc

38
Chế độ hiển thị bao gồm:

• Chế độ Text sẽ hiển thị các thông tin chi tiết dưới dạng bảng thống kê
• Chế độ Graphic sẽ hiển thị thông tin dưới dạng biểu đồ

3.2. Mô phỏng đơn xử lý


Để sử dụng trình giả lập, ta cần sử dụng các tệp dữ liệu với the “calls” và các
địa chỉ bộ nhớ mà bộ xử lý yêu cầu trong quá trình thực thi chương trình – chúng ta
gọi cái này là Memory Traces (các truy xuất bộ nhớ ). Các tệp theo dõi này sẽ cho
phép bạn mô phỏng các chương trình để xử lý các bộ xử lý khác nhau trong SMP
(Đa xử lý đối xứng).

Có 2 loại Memory Trace được sử dụng trong phần mềm SMPCache đó là


Uniprocessor Traces (bộ đơn xử lý) và Multiprocessor Traces (bộ đa xử lý), ở đây
nhóm em sẽ giới thiệu về phần Uniprocessor Traces trước.

39
Đối với nhóm thử nghiệm đầu tiên này, nhóm em sẽ mô phỏng sự ảnh hưởng
của cách ánh xạ , kích thước cache, các thuật toán thay thế đến tỷ lệ truy xuất thành
công của cache( hit) .

Dưới đây là bảng tóm tắt các cách truy xuất bộ nhớ mà nhà sản xuất đã cung
cấp.Mục tiêu nhóm em hướng đến là kiểm nghiệm lại xem những gì đã trình bày ở
phần lý thuyết có đúng khi mô phỏng không nên nhóm em xin phép không đi sâu
vào các traces này.

3.2.1. Ảnh hưởng của phương pháp ánh xạ (Mapping) đối với các kích thước
khác nhau của Cache
a) Mục tiêu

Phân tích ảnh hưởng của các phương pháp ánh xạ (Mapping) đối với tỉ lệ Hit/Miss
(Tìm thấy/ Không tìm thấy) trên các kích thước cache khác nhau, từ đó giúp hiểu
thêm và chứng minh phần lý thuyết đã trình bày.

b) Cấu hình

40
Cấu hình một hệ thống với đặc tính kiến trúc như sau:

Configure Multiprocessor (Cấu hình bộ đa xử lý)

• Processors in SMP = 1. (Bộ xử lý trong SMP)


• Cache coherence protocol = MESI. (Cách thức kết hợp bộ nhớ Cache)
• Scheme for bus arbitration = Random. (Cách thức phân xử bus)

Configure Main Memory (Cấu hình bộ nhớ chính)

• Word wide (bits) = 32 (4 bytes). (Độ rộng của 1 từ)


• Words by block = 64 (Số từ trong 1 block)
• Blocks in main memory = 4096 (Số block trong bộ nhớ chính)
• Block size = Word wide (bits) x Words by block = 4 x 64 = 256 Bytes
(Kích thước của 1 block)
• Main memory size = Block in main memory x Block size = 4096 x 256
Bytes = 1Mbyte (Kích thước bộ nhớ chính)

41
Configure Caches (Cấu hình bộ nhớ Cache)

• Block in cache = 16 (Số block trong bộ nhớ Cache)


• Cache size = Block in cache x Block size = 16 x 256 Bytes = 4 Kbytes (Kích
thước bộ nhớ Cache)
• Replacement policy: LRU (Chính sách thay thế)

Mapping (Phương pháp ánh xạ) :

• Direct (Trực tiếp)


• Fully-associative (Kết hợp hoàn toàn)
• Set-associative (Kết hợp tập hợp)

Cache sets (Chỉ sử dụng với Mapping là Set-associcative) :

• 2-way set-associative
• 4-way set-associative
• 8-way set-associative
• …

42
c) Cách thực hiện

Với mỗi phương pháp ánh xạ, cấu hình số block trong cache để có cache size
như sau:

• 4 KB (16 blocks in cache)


• 8 KB (32 blocks in cache)
• 16 KB (64 blocks in cache)
• 32 K (128 blocks in cache)

Với mỗi cấu hình như vậy, chạy để có hit/miss rate với memory trace là Ear(
chọn theo như trong yêu cầu của lab thầy gửi).

d) Thực hiện chương trình

Đầu tiên chúng ta sẽ làm với Mapping là Direct với cache size là 4Kbytes.

Khi chúng ta cấu hình xong thì chúng ta xuống phần View evolution -> Chọn
Cache

Sau đó lựa chọn hiển thị kết quả theo chế độ Text

43
Chúng ta có 3 cách chạy

• Step by step (Chạy từng bước)


• With breakpoint (Chạy với điểm dừng)
• Complete (Chạy hoàn thiện)

Ở đây chúng ta sẽ tìm hiểu cách hoạt động của SMPCache trong chương trình
này nên sẽ chọn chạy Step by step.

Bấm Execute để chương trình bắt đầu chạy

44
Ở lần truy cập đầu tiên, CPU yêu cầu tìm block thứ 6.

• 1. CPU gửi yêu cầu xuống bộ nhớ Cache yêu cầu tìm block số 6
• 2. Cache thông báo không tìm thấy block số 6 trong Cache
• 3. Cache gửi yêu cầu tìm block số 6 của CPU xuống bus
• 4. Bus gửi yêu cầu tìm block số 6 của CPU xuống bộ nhớ chính (Ở đây nếu
có nhiều bộ xử lý thì đường bus sẽ truyền sang các bộ xử lý khác để tìm
block số 6 trước khi chuyển yêu cầu xuống bộ nhớ chính)
• 5. Chuyển block số 6 từ bộ nhớ chính

SHARED SIGNAL = NO : Không có chia sẻ tín hiệu do đây là 1 bộ đơn xử lý

Bấm Continue để chương trình tiếp tục chạy

45
Ở lần truy cập thứ 2, CPU yêu cầu tìm block số 6.

• 1. CPU gửi yêu cầu xuống bộ nhớ Cache yêu cầu tìm block số 6
• 2. Tìm thấy block số 6 trong Cache và chuyển lên CPU (Do ở lần truy cập đầu
tiên Cache đã nhận được block số 6 từ bộ nhớ chính)

Tương tự với các lần truy cập khác, nếu CPU yêu cầu tìm block không có trong
Cache thì Cache sẽ gửi yêu cầu xuống bus, bus sẽ gửi yêu cầu để bộ nhớ chính
gửi block lên CPU. Còn nếu CPU yêu cầu tìm block có trong Cache thì Cache sẽ
chuyển block đó lên CPU.

Chọn tab Hits-Misses

• Số lượng truy xuất theo loại thông tin

• Thông tin cho cả hệ thống Cache

46
• Thông tin cho từng mức Cache

Tương tự với các trường hợp Mapping và Cache size khác

Sau đó chúng ta sẽ ra được bảng thống kê như dưới đây

47
e) Phân tích và đánh giá kết quả

Phân tích

Theo như biểu đồ mô phỏng ra, nhóm có một số kết luận sau:

• Khi kích thước cache tăng thì tỉ lệ miss của tất cả các mapping giảm dần.
• Ở mọi kích thước của cache thì Direct luôn có tỷ lệ miss cao nhất.
• Khi kích thước cache 4KB,8KB thì sự chênh lệch của 2-Way Associative lớn
hơn 4-Way Associative, 8-Way Associative, Full -Way Associative .

48
• Hầu như tất cả trường hợp thì tỷ lệ miss của cách sau luôn nhỏ hơn cách trước
trừ trường hợp 8KB thì 2-Way Associative cho tỷ lệ miss thấp nhất.

Đánh giá

Phần mô phỏng cho kết quả giống như phần lý thuyết đã trình bày và biểu đồ
mô phỏng cũng rất giống với hình 11 , chỉ có sự khác biệt nhỏ có thể khác nhau về
trace nhưng nhìn chung biểu đồ có sự tăng trưởng như nhau.

3.2.2. Ảnh hưởng của phương pháp ánh xạ (Mapping), kích thước của Cache
(Cache Size) và Chính sách thay thế (Replacement Policy) tới hiệu năng của
Cache

a) Mục tiêu
Nhóm em vừa trình bày ảnh hưởng của mapping đến tỷ lệ truy xuất , tiếp theo
nhóm em sẽ phân tích ảnh hưởng của phương pháp ánh xạ (Mapping), các kích thước
khác nhau của Cache (Cache Size) và Chính sách thay thế (Replacement Policy) tới
hiệu năng (tỉ lệ miss, hit) của Cache.
b) Cấu hình

Cấu hình một hệ thống với đặc tính kiến trúc như sau:

Configure Multiprocessor (Cấu hình bộ đa xử lý)

• Processors in SMP = 1
• Cache coherence protocol = MESI.
• Scheme for bus arbitration = Random.

Configure Main Memory

• Word wide (bits) = 32 (4 bytes)


• Words by block = 64

49
• Blocks in main memory = 4096
• Block size = 256 Bytes
• Main memory size = 1Mbyte

Configure Caches

• Block in cache = 16, 32, 64, 128


• Cache size = 4, 8, 16, 32 Kbytes
• Replacement policy: Random, LRU, FIFO, LFU
• Mapping : Set-Associative (2-Way, 4-Way)
c) Cách thực hiện

Với mỗi phương pháp ánh xạ và cấu hình block khác nhau chọn 1 trong 4 kiểu
chính sách thay thế (Replacement Policy):

• Random
• LRU
• FIFO
• LFU

Với mỗi cấu hình như vậy, chạy để có hit/miss rate với memory trace là Ear.

d) Cách thức thựch hiện

Cách thực hiện của phần này hoàn toàn giống ví dụ mô phỏng trước và các
bước thực hiện cũng tương tự nên nhóm em quyết định không ghi lại .

Kết quả thực hiện được nhóm em trình bày ở bảng dưới đây :

50
e) Phân tích và đánh giá kết quả

Phân tích
• Ở tất cả các trường hợp thì Random luôn cho tỷ lệ miss cao nhất, tỷ lệ miss
cao thứ 2 là FLU và thấp nhất là LRU.
• Khi kích thước cache tăng thì tỷ lệ mis giảm.
• Các mapping không ảnh hưởng nhiều đến kết quả.

51
• Khi cache đạt 32KB thì gần như không còn thấy sự chênh lệch giữa thuật toán
thay thế nữa.

Đánh giá kết quả

Kết quả mô phỏng diễn ra đúng với phần lý thuyết mà các thành viên nhóm đã
trình bày về sự ảnh hưởng của các chính sách thay thế đến tỷ lệ truy xuất.

3.3. Mô phỏng đa xử lý
Phần đa xử lý nhìn chung khá giống phần đơn xử lý, nhưng ở đây xử dụng
traces khác và sử dụng nhiều hơn 1 cache.

Các bước thực hiện tương tự đơn xử lý nhưng tại bước chọn trace thì như hình
dưới:

Vào địa chỉ “C:\PROGRAM FILES (X86)\ARCO\SMPCACHE\TRACES\SPR\ “

Nhà sản xuất đã xem xét các trace có hàng chục triệu truy cập bộ nhớ gồm bốn
kiểm chuẩn (FFT, Simple, Speech, Weather). Hoặc có thể sử dụng các trace dung

52
lượng nhỏ hơn để thay thế. Các trace đã được cung cấp bởi David Chaiken, đại diện
cho một số ứng dụng thực tương đương. FFT, Simple và Weather được tạo ra bằng
cách sử dụng lược đồ phân tích thực hiện bởi Mathews Cherian với Kimming tại
IBM.

Name References Description


FFT 7,451,717 Ứng dụng tương đương mà nó mô
phỏng động lực học chất lỏng với FFT
Simple 27,030,092 Phiên bản tương đương của ứng dụng
SIMPLE
Weather 31,764,036 Phiên bản tương đương của ứng dụng
thời tiết, sử dụng cho dự báo thời tiết.
Phiên bản nối tiếp từ NASA

Ở phần này nhóm em sẽ mô phỏng thử nghiệm các trường hợp có thể làm ảnh
hưởng đến tỷ lệ truy cập.

3.3.1. Ảnh hưởng của kích thước bộ nhớ cache trong miss rate với đa xử lí

Đầu tiên, chúng em xem xét ảnh hưởng của kích thước bộ nhớ đệm với tỉ lệ
miss.

Cấu hình một hệ thống với đặc tính kiến trúc như sau:

• Processors in SMP = 4.

• Cache coherence protocol = MESI.

• Scheme for bus arbitration = LRU.

• Word wide (bits) = 16.

53
• Words by block = 32 (block size = 256 bytes).

• Blocks in main memory = 524,288 (main memory size = 32 MBytes).

• Mapping = Fully-associative

Kết quả mô phỏng được biểu diễn trên hình 3.3.1

Cache sizes
1KB 2KB 4KB 8KB 16KB 32KB 64KB 128KB
100
90
80
70
60
50
40
30
20
10
0
FFT SIMPLE SPEECH WEATHER

Hình 3.3.1 Ảnh hưởng của cache size với miss rate trong đa xử lí

Chúng ta có thể thấy kết quả mô phỏng trong đa xử lí tương tự so với bộ xử lý


đơn. Tỉ lệ miss rate toàn cục của hệ thống giảm khi kích thước bộ đệm tăng vì dung
lượng và lỗi xung đột giảm. Với kích thước bộ nhớ cache lớn, tỉ lệ miss rate được ổn
định, cho thấy các lỗi khách quan và kết hợp bỏ lỡ (coherence misses), là độc lập với
kích thước bộ đệm.

Kết quả mô phỏng trên chứng minh rằng dữ liệu được chia sẻ có ít không gian
và tính cục bộ tạm thời so với các loại dữ liệu khác. Nói chung, các chương trình
song song ít có tính cục bộ tạm thời hơn so với các trace của chương trình nối tiếp.

54
Vì vậy, thông thường tỷ lệ miss rate trace của đa xử lý lớn hơn với so với trace của
xử lý đơn.

3.3.2. Ảnh hưởng của kích thước bộ nhớ cache đến lưu lượng bus trong đa xử lí

Bus traffic
Data bus Address bus
60

50

40

30

20

10

0
FFT/1 FFT/2 FFT/4 FFT/8 FFT/16 FFT/32 FFT/64 FFT/128

Hình 3.3.2 Ảnh hưởng của kích thước bộ nhớ đệm với lưu lượng bus trong đa xử lí

Hình 3.3.2 biểu hiện lưu lượng bus trong đa xử lý trên mỗi lần truy cập bộ nhớ
với cấu hình tương tự mô phỏng ảnh hưởng kích thước bộ nhớ đệm với tỉ lệ miss.
Lưu lượng bus được chia thành các đường dữ liệu và địa chỉ (bao gồm cả lệnh) lưu
lượng bus. Các kết quả mô phỏng thu được tương đồng. Lưu lượng bus giảm khi tỷ
lệ miss giảm. Có hai lý do chính, có ít dữ liệu được di chuyển từ bộ nhớ chính sang
bộ nhớ cache. Mặt khác, do có ít tỉ lệ miss hơn, nên ít cần giao tiếp thông qua bus
hơn để quản lý giao thức trao đổi kết hợp (coherence protocol) bộ nhớ cache.

55
3.3.3. Ảnh hưởng của giao thức kết hợp bộ nhớ cache (the cache coherence
protocol) đến tỷ lệ miss và lưu lượng bus.

Tiếp theo chúng ta nghiên cứu ảnh hưởng của giao thức kết hợp bộ nhớ cache
(the cache coherence protocol) đến tỷ lệ miss và lưu lượng bus. Như trước đây, lưu
lượng bus được chia thành lưu lượng dữ liệu và địa chỉ (bao gồm cả lệnh) lưu lượng
bus. Chúng ta sẽ sử dụng cấu hình đã được xem xét trước đó (8 processors, 16-bit
words, 64-byte blocks, four-way set associative caches and LRU replacement). Các
kết quả mô phỏng được trình bày trong Hình 3.3.3 và Hình 3.3.4

Cache cohorence protocol


40

35

30

25

20

15

10

0
FFT2 SIMPLE2 SPEECH2 WEATHER

MSI MESI DRAGON Column6

Hình 3.3.3 - Ảnh hưởng của giao thức kết hợp bộ nhớ cache với miss rate trong đa
xử lí.

56
Bus traffic
40
35
30
25
20
15
10
5
0

Data bus Address bus

Hình 3.3.4 - Ảnh hưởng của giao thức kết hợp bộ nhớ cache với lưu lượng bus
trong đa xử lí
Tỷ lệ miss của giao thức MSI và giao thức MESI là như nhau. Điều này đúng
với lý thuyết vì giao thức MESI chỉ là một cải thiện giao thức MSI. Giao thức MESI
được bổ sung thêm trạng thái độc quyền (Exclusive) để giảm lưu lượng bus trao đổi
trong giao thức kết hợp (coherence protocol). Trong thực tế, Hình 3.3.4 cho chúng
ta biết rằng, mặc dù MSI và MESI các giao thức có cùng tỷ lệ miss rate, nhưng giao
thức MESI tạo ra lưu lượng bus ít hơn.
Ngoài ra có thể quan sát được rằng giao thức Dragon có tỷ lệ miss rate và lưu
lượng bus ít nhất. Bởi vì giao thức Dragon là giao thức dựa trên cập nhật cache.
Trong khi đó giao thức MSI và MESI dựa trên giao thức dựa trên vô hiệu hóa. Trong
giao thức dựa trên cập nhật, bất cứ khi nào một địa chỉ chia sẻ được ghi bởi một bộ
xử lý, giá trị của nó được cập nhật trong bộ nhớ cache của tất cả các bộ xử lý khác
đang giữ khối (block) bộ nhớ đó.

57
Hơn nữa, trong giao thức Dragon, cập nhật được cải thiện thành ghi word (sửa
đổi word cụ thể) thay vì tất cả khối trong bộ đệm trao đổi. Ngược lại, với các giao
thức dựa trên sự vô hiệu, khi trạng thái bộ đệm của khối bộ nhớ đó thay đổi thì tất cả
các bộ đêm đa xử lý khác được đặt thành không hợp lệ, vì vậy những bộ xử lý đó sẽ
phải lấy block thông qua miss (a coherence miss) và do đó cần lưu lượng bus lớn hơn
để trao đổi qua lại. Vì vậy, ta có thể dễ dàng thiết lập thêm các cấu hình khác trong
đó giao thức vô hiệu hóa làm tốt hơn nhiều so với giao thức dựa trên cập nhật.

3.3.4. Ảnh hưởng của số lượng bộ xử lí trong miss rate và lưu lượng bus

Cuối cùng, chúng ta mô phỏng sự ảnh hưởng của số lượng bộ xử lí với tỉ lệ miss
và lưu lượng bus thông qua việc sử dụng 3 traces đã được tạo sẵn. Chúng được tạo
ra bằng cách sử dụng các lược đồ phân tích thực hiện bởi Mathews Cherian và
Kimming tại IBM: FFT, Simple và Weather.

Chúng ta sẽ sử dụng cấu hình đã được xem xét trước đó (MESI protocol, 16-bit
words, 64-byte blocks, four-way set associative caches and LRU replacement). Kết
quả được trình bày ở hình 3.3.5 và hình 3.3.6.

Number of prosessors
40

35

30

25

20

15

10

0
FFT SIMPLE WEATHER

1 2 4 8

58
Hình 3.3.5 - Ảnh hưởng của số lượng bộ xử lí với tỉ lệ miss trong đa xử lí

Number of processors
35

30

25

20

15

10

Data bus Address bus

Hình 3.3.6 - Ảnh hưởng của số lượng bộ xử lí với lưu lượng bus

Sau khi quan sát được kết quả, chúng ta có thể thấy rằng, số lượng bộ xử lý cho
một ứng dụng song song càng nhiều thì tỉ lệ miss và lưu lượng bus càng nhiều. Bởi
vì với một giao thức dựa trên vô hiệu hóa, như giao thức MESI thì càng có nhiều bộ
xử lý sẽ cần càng nhiều bộ nhớ đệm cache chia sẻ cùng một block.

Do đó, trên một thao tác ghi, bộ đệm này tác động lên các bộ đệm khác bằng
cách vô hiệu hóa block đó, sau đó tạo ra các miss mới (coherence misses) đồng thời
số lượng block trao đổi tăng.

Mặt khác, số lượng bộ xử lý càng nhiều bao nhiêu sẽ cần lưu lượng bus càng
nhiều bấy nhiêu để đảm bảo sự kết hợp bộ nhớ cache (the cache coherence). Nói tóm
lại, khi số lượng bộ xử lý tăng với một kích thước cố định, khi bắt đầu với bộ đệm
và sự ảnh hưởng của miss cục bộ (chủ yếu là các miss lưu trữ) được thay thế bởi sự
ảnh hưởng của miss kết hợp (coherence misses).

59
IV. CONCLUSION
Trên bài tìm hiểu này, nhóm em đã trình bày được Cache là gì?, nguyên lý
hoạt động, nguyên lý hoạt động và các yếu tố ảnh hưởng đến việc thiết kế Cache ra
sao

Cũng như giới thiệu về phần mềm mô phỏng SMPCache, thực hiện được 2 bài
mô phỏng thử nghiệm về hệ thống đơn xử lý để cho thấy được sự ảnh hưởng của
phương pháp ánh xạ, kích thước cache và thuật toán thay thế sẽ ảnh hưởng đến tỷ lệ
truy xuất, hiệu năng của Cache như thế nào

Và 4 mô phỏng về hệ thống đa xử lý, nghiên cứu các trường hợp có thể xảy ra
làm ảnh hưởng đến tỉ lệ Miss rate trong quá trình thực hiện song song các chương
trình trong SMP (Symmetric Multiprocessor)

Sau khi thực hiện được những bài mô phỏng trên ta thấy được các đặc điểm
chính của trình giả lập hệ thống bộ nhớ cache trong môi trường đa xử lý. Những kết
quả đã cho thấy lợi ích mà phần mềm giả lập mang lại đối với các mục tiêu cụ thể

Chúng ta có thể sử dụng nó như một công cụ để thử nghiệm các khía cạnh
khác nhau về mặt lý thuyết của bộ nhớ cache và bộ đa xử lý đã học trong giáo trình
Kiến trúc máy tính. Và sinh viên có được một kiến thức tốt hơn và lớn hơn về các
khía cạnh này

Trong tương lai mà thế giới ngày càng phát triển, chắc chắn sẽ có những giải
pháp tốt hơn thế nữa thay cho bộ nhớ Cache để tối ưu thời gian truy xuất; thời điểm
hiện tại đã và đang phát triển SoC – một hệ thống máy tính trên con chip rất nhỏ, nó
có thể làm nền tảng cho những ý tưởng đột phá sau này

60
V. ĐÁNH GIÁ ĐÓNG GÓP CÁC THÀNH VIÊN
TRONG NHÓM
I. Overview (soạn bài, thiết kế powerpoint, thuyết trình): 100% Cảnh
II. Cache
2.1. Nguyên lí bộ nhớ cache: (soạn bài, thiết kế powerpoint, thuyết trình): 100%
Thi
2.2. Các yếu tố thiết kế Cache : (soạn bài, thiết kế powerpoint, thuyết trình): 100%
Thi
2.2.1 Địa chỉ cache: (soạn bài, thiết kế powerpoint, thuyết trình): 100% Thi
2.2.2 Hàm ánh xạ (soạn bài, thiết kế powerpoint, thuyết trình): 100% Thi
2.2.3 Thuật toán thay thế (soạn bài, thiết kế powerpoint, thuyết trình): 100%
Minh Sang
2.2.4 Chính sách ghi (soạn bài, thiết kế powerpoint, thuyết trình): 100% Minh
Sang
2.2.5 Kích thước line (soạn bài, thiết kế powerpoint, thuyết trình): 100% Minh
Sang
2.2.6 Kích thước cache (soạn bài, thiết kế powerpoint, thuyết trình): 100% Minh
Sang
III. SMPCache simulator
3.1. Giới thiệu phần mềm (soạn bài, thiết kế powerpoint, thuyết trình): 100%
Khang
3.2. Mô phỏng đơn xử lý (soạn bài, thiết kế powerpoint, thuyết trình): 100% Thế
Anh
3.3. Mô phỏng đa xử lý (soạn bài, thiết kế powerpoint, thuyết trình): 100% Đức
Sang
IV. Conclusion (soạn bài, thiết kế powerpoint, thuyết trình): 100% Cảnh
• Thiết kế Powerpoint : 100% Cảnh
• Tổng hợp, làm file báo cáo: 100% Thi

61

You might also like