
Bài thí nghiệm Kiến trúc máy tính 3
2010
Khoa Điện tử- Viễn thông
Page 1
Bài 3. Hoạt động của bộ đệm, tối ưu hóa bộ đệm
(Bài thí nghiệm này được biên soạn dựa trên bài thí nghiệm môn học Kỹ thuật máy tính của F.
Lundevall, Khoa công nghệ thông tin và truyền thông, Học viện công nghệ Hoàng gia, Thụy Điển [1])
1 Mục đích
Trong bài thí nghiệm này sinh viên sẽ tìm hiểu bộ đệm trong bộ xử lý MIPS và học cách tối ưu hóa
các tham số bộ đệm, hoặc cách thay đổi cấu trúc chương trình để có được hiệu suất tính toán cao
hơn.
2 Công cụ
Bài thí nghiệm sử dụng bộ phần mềm MIPSIT [1] để mô phỏng hoạt động của một hệ thống máy tính
dựa trên bộ xử lý MIPSIT.
3 Lý thuyết
Sinh viên cần nắm rõ về bộ đệm; các tham số của bộ đệm mà có ảnh hưởng đến hiệu suất tính toán
của bộ xử lý. Ngoài ra sinh viên cần có kiến thức về cách sắp xếp các lệnh máy và các biến trong bộ
nhớ (eng. memory mapping). (bài giảng chương 2, chương 3). Sách tham khảo [3].
Sinh viên cần hiểu các khái niệm trong bộ đệm như: tỉ lệ trúng (eng. hit rate), tổn hao trượt (eng.
miss penalties), thời gian truy cập (eng. access time), bộ đệm ánh xạ trực tiếp (eng. direct mapped
cache), bộ đệm kết hợp toàn phần (eng. fully associative cache), bộ đệm kết hợp k đường (eng. k-
way associative cache).
4 Thực hiện
4.1 Cài đặt và làm quen với phần mềm
4.1.1 Cài đặt
Tải bộ công cụ MIPSIT từ địa chỉ:
https://sites.google.com/site/fethutca/my-forms/MipsICT.zip?attredirects=0&d=1.
Giải nén tệp “MipsICT.zip” và chạy tệp nhận được “MipsICT.exe” để phầm mềm tự giải nén vào thứ
mục: “C:\MipsIT”.
Trong bộ phần mềm MIPSIT, ta sẽ sử dụng 2 phần mềm MIPSITStudio (xem bài thí nghiệm số 2) và
Mips Simulator.
4.1.2 Giới thiệu MIPSITStudio
Mipsitstudio là phần mềm mô phỏng hoạt động của hệ thống máy tính dựa trên bộ xử lý MIPS. Gọi
chương trình bằng cách chạy tệp “C:\MipsIT\bin\Mips.exe” (Hình 1).
Phầm mềm mô phỏng việc thực hiện một chương trình (được biên dịch bằng MIPSITStudio) trên một
hệ thống máy tính gồm:
1. Bộ xử lý MIPS (CPU)
2. Bộ đệm lệnh (I-Cache)
3. Bộ đệm dữ liệu (D-Cache)
4. Bộ nhớ chính (RAM)
5. Cửa sổ console (Console)

Bài thí nghiệm Kiến trúc máy tính 3
2010
Khoa Điện tử- Viễn thông
Page 2
6. Thiết bị ngoại vi (I/O)
Cửa sổ hiển thị trạng thái của các khối trong hệ thống nói trên được mở bằng cách bấm vào các khối
tương ứng trên sơ đồ khối ở Hình 1.
Hình 1. Chương trình mô phỏng hệ thống máy tính dùng CPU MIPS.
Hình 2. Cửa sổ hiển thị trạng thái của bộ xử lý (Register), bộ nhớ chính (Memory), vào ra
(Input&Output), và cửa sổ Console.

Bài thí nghiệm Kiến trúc máy tính 3
2010
Khoa Điện tử- Viễn thông
Page 3
Trạng thái của CPU là giá trị của các thanh ghi hiển thị trong cửa sổ thanh ghi (Hình 2). Trạng thái của
RAM là nội dung các ô nhớ (Hình 2). Trạng thái của Console là cửa sổ hiển thị nội dung được chương
trình ghi ra bằng câu lệnh in ra màn hình ví dụ như “printf” (Hình 2). Trạng thái của I/O là cửa sổ hiển
thị nội dung các cổng điều khiển đèn LED ra và các công tắc vào (Hình 2). Cửa sổ D-Cache và I-Cache
hiển thị cấu trúc bộ đệm (ánh xạ trực tiếp, kết hợp toàn phần, hay kết hợp k đường) và nội dung lưu
trong bộ đệm (Hình 3).
Hình 3. Cửa sổ hiển thị trạng thái bộ đệm lệnh (I-Cache) và bộ đệm dữ liệu (D-Cache).
4.1.3 Thiết lập tham số bộ đệm
Trước khi thực hiện mô phỏng, các tham số của bộ đệm cần được thiết lập bằng cách lựa chọn menu
“Edit->Cache/Mem Config”.
Trong các tab “Inst. Cache” và “Data Cache” của cửa sổ thiết lập (Hình 4), các tham số cấu trúc của
bộ đệm lệnh và bộ đệm dữ liệu như kích thước bộ đệm (eng. size), kích thước đường/khối (eng.
block size), số lượng đường/khối trong tập (eng. blocks in sets). (Cần chú ý số lượng đường sẽ xác
định loại bộ đệm: ánh xạ trực tiếp, kết hợp toàn phần hoặc kết hợp k đường).
Ngoài ra, với bộ đệm dữ liệu, ta có thể thiết lập chính sách thay thế (eng. Replacement policy), và
chính sách ghi (eng. Write policy).
Ta có thể vô hiệu hóa (loại bỏ) bộ đệm khỏi hệ thống bằng cách chọn “Disable”. Tổn hao trượt bộ
đệm (thời gian truy cập bộ nhớ chính) sẽ không được tính đến khi mô phỏng nếu chọn “Disable
penalty”.
Hình 4. Cửa sổ thiết lập các tham số cấu trúc bộ đệm I-Cache, D-Cache.

Bài thí nghiệm Kiến trúc máy tính 3
2010
Khoa Điện tử- Viễn thông
Page 4
Tổn hao trượt phụ thuộc vào thời gian truy cập bộ nhớ chính. Các tham số này được thiết lập bằng
tab “Memory” (Hình 5). Thời gian đọc và ghi bộ nhớ chính được xác định bằng số chu kz xung nhịp
của CPU. Ở đây có giá trị mặc định là 50 chu kz. Các tham số này phụ thuộc vào công nghệ chế tạo
bộ nhớ chính, được xác định dựa trên các tham số thời gian của RAM (Tham khảo [4]).
Hình 5. Thiết lập thời gian truy cập bộ nhớ chính.
4.1.4 Thực hiện mô phỏng
Chương trình sau khi được biên dịch thành tệp thực thi sẽ được nạp vào bộ nhớ hệ thống mô phỏng
từ phần mềm MIPSITStudio bằng cách lựa chọn menu “Build->Upload->To Simulator” hoặc bằng
phím tắt F5.
Phần mềm mô phỏng sẽ thực hiện chương trình đã đươc nạp bằng cách bấm nút trên thanh
công cụ.
Các kết quả mô phỏng như số lần trúng, trượt bộ đệm, tỉ lệ trúng, số chu kz thực hiện chương trình
được hiện ở phần “Cache Statistics” bên dưới phải của cửa sổ “I-Cache”, “D-Cache”.
Để thực hiện một lần mô phỏng mới, hệ thống cần được khởi tạo lại (eng. reset) bằng menu “CPU-
>Reset”. Sau khi khởi tạo lại, vì bộ đệm và bộ nhớ sẽ trở về trạng thái mặc định, các tham số bộ đệm,
bộ nhớ phải được thiết lập lại. Thêm vào đó, chương trình đã được biên dịch cần được nạp lại từ
MIPSITStudio.
4.2 Tối ưu bộ đệm lệnh cho chương trình copy chuỗi
4.2.1 Bước 1: Chuẩn bị chương trình C.
Tạo một đề án C(minimal)/Assembler trong môi trường MIPSITStudio. Đặt tên đề án này là Bai3-1.
Chọn thư mục để lưu là “C:\MipsIt\Projects\Bai3-1”. Tạo một tệp chương trình C với tên “bai3-1.c”.
Soạn thảo đoạn mã C vào tệp chương trình như Hình 6.
Biên dịch đề án bằng cách lựa chọn menu “Build -> Build Bai3-1” hoặc phím F7.

Bài thí nghiệm Kiến trúc máy tính 3
2010
Khoa Điện tử- Viễn thông
Page 5
Hình 6. Chương trình bai3-1.c
4.2.2 Bước 2: Mô phỏng.
Chạy phần mềm mô phỏng “C:\MipsIT\bin\Mips.exe”. Quay về phần mềm MIPSITStudio, nạp chương
trình đã biên dịch vào phần mềm mô phỏng (phím tắt F5). Chương trình có câu lệnh in ra thời gian
thực hiện hàm str_cpy tính bằng số chu kz đồng hồ. Trả lời các câu hỏi:
Câu 1. Thực hiện mô phỏng xác định các kết quả: số lần trúng, số lần trượt bộ đệm, tỉ lệ trúng, số
chu kz thực hiện chương trình thống kê bởi phần mềm mô phỏng (eng. Cycle count) và số chu kz tính
bởi chương trình (eng. Time to copy).
Hit count = ………………………………………………………………………………………………………………………………………….
Miss count = ……………………………………………………………………………………………………………………………………….
Hit rate = …….………………………………………………………………………………………………………………………………………
Cycle count=………………………………………………………………………………………………………………………………………..
Time to copy=………………………………………………………………………………………………………………………………………
Tính toán chỉ số CPI khi hệ thộng thực hiện hàm str_cpy (chú ý thời gian thực tế thực hiện hàm copy
khác thời gian thống kê bởi phần mềm mô phỏng, ở đây ta dùng thời gian thống kê bởi phần mềm
mô phỏng)
CPI=……………………………………………………………………………………………………………………………………………………..
1. /* strcpy.c */
2. #include <stdio.h>
3. #include <idt_entrypt.h>
4. /* C stringcopy */
5. static void str_cpy( char *to, const char *from)
6. {
7. while( *from)
8. {
9. *to++ = *from++;
10. }
11. *to = '\0';
12. }
13. int main()
14. {
15. static char* hello = "Hello";
16. static char to[4711] = "Function str_cpy";
17. int Time;
18. printf("String before copy: %s\n", hello);
19. flush_cache(); /* khởi tạo lại các bộ đo bộ đệm */
20. timer_start(); /* bắt đầu tính thời gian thực hiện hàm str_cpy*/
21. str_cpy( to, hello);
22. Time = timer_stop(); /* kết thúc tính thời gian thực hiện hàm str_cpy*/
23. printf("Time to copy: %d\n",Time); /* In ra tổng thời gian copy */
24. printf("String after copy: %s\n", to);
25. }
89
68
0,57
11862
9272
1,279

