LỜI CẢM ƠNCả nhóm chúng em xin chân thành cảm ơn cô Nguyễn Thị Huyền Trang cùng tất cả quý thầy cô trong khoa Khoa học máy tính đã giúp đỡ chúng em hoàn thành đồ án bài tập lớn cuối kỳ h
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
ĐỀ TÀI: GPU – SỨC MẠNH CỦA CHIP ĐỒ HỌA
Sinh viên thực hiện: Đặng Trần An-22AD001
Bùi Đức Dũng-22AD007
Nguyễn Xuân Phúc-22AD0
Giảng viên hướng dẫn:ThS NGUYỄN THỊ HUYỀN TRANG
Đà Nẵng, tháng 12 năm 2023
Kiến trúc máy tính
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG VIỆT HÀN
Khoa Khoa Học Máy Tính
ĐỀ TÀI: GPU – SỨC MẠNH CỦA CHIP ĐỒ HỌA
Sinh viên: Đặng Trần An Mã:22AD001 Bùi Đức Dũng Mã: 22AD007 Nguyễn Xuân Phúc Mã: 22AD
Giảng viên hướng dẫn: ThS.NGUYỄN THỊ HUYỀN TRANG
Đà Nẵng, tháng 12 năm 20
Kiến trúc máy tính
Trang 3NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
Trang 4LỜI CẢM ƠN
Cả nhóm chúng em xin chân thành cảm ơn cô Nguyễn Thị Huyền Trang cùng tất cả quý thầy cô trong khoa Khoa học máy tính đã giúp đỡ chúng em hoàn thành đồ án bài tập lớn cuối kỳ học phần Kiến trúc máy tính.
Sau một khoảng thời gian được học tập và nghiên cứu về kiến trúc của máy tính, chúng em đã lựa chọn "RISC-V và ngôn ngữ assembly" để làm đề tài cho nhóm mình Đây là một cơ hội tốt cho nhóm chúng em tự tìm hiểu, áp dụng những kiến thức đã học, từ đó hình thành nên phương pháp nghiên cứu, tìm tòi, tiếp cận với khoa học công nghệ Đồng thời trau dồi cho chúng em kỹ năng học tập năng động và sáng tạo.
Mặc dù nhóm em đã cố gắng tìm hiểu và khảo sát các thông tin liên quan đến RISC-V và ngôn ngữ assembly, nhưng do khả năng còn khá hạn hẹp nên không thể tránh khỏi những thiếu sót, những sai lầm trong quá trình nghiên cứu đề tài Vậy chúng em rất mong nhận được sự đóng góp ý kiến của các thầy cô và các bạn để chương trình của chúng em được hoàn thiện và tốt hơn!
Chúng em xin chân thành cảm ơn!
Sinh viên thực hiện
Trang 5MỞ ĐẦU
Trong những năm đầu, RISC-V chỉ là một kiến trúc tập lệnh mới và chưa được biết đến rộng rãi Tuy nhiên, với sự gia tăng đáng kể về nhu cầu tính toán, nó đã trở thành một phần quan trọng trong máy tính hiện đại.
Vào những năm 2010, RISC-V bắt đầu được triển khai trong một số thiết bị nhúng, chẳng hạn như máy tính bảng, điện thoại thông minh và thiết bị IoT Những thiết bị này yêu cầu bộ xử lý hiệu quả về năng lượng và chi phí thấp, và RISC-V đáp ứng được những yêu cầu đó.
Trong thập kỷ sau đó, RISC-V tiếp tục được phát triển và ngày càng được sử dụng trong nhiều ứng dụng khác nhau Nó đã được triển khai trong các máy tính trung tâm, chẳng hạn như siêu máy tính, và trong các thiết bị học máy.
Trong những năm gần đây, RISC-V cũng đã trở thành một lựa chọn phổ biến cho việc lập trình bằng ngôn ngữ assembly Ngôn ngữ assembly là một ngôn ngữ máy cấp thấp cho phép lập trình viên kiểm soát trực tiếp bộ xử lý RISC-V có một tập lệnh đơn giản và dễ học, khiến nó trở thành một lựa chọn tốt cho việc lập trình bằng ngôn ngữ assembly.
Tóm lại, RISC-V đã trải qua một sự phát triển đáng kể từ những năm đầu cho đến ngày nay Từ một kiến trúc tập lệnh mới, nó đã trở thành một công nghệ mạnh mẽ và tiên tiến có ảnh hưởng lớn đến thế giới máy tính Sự phát triển tiếp tục của RISC-V hứa hẹn mang đến nhiều cơ hội sáng tạo và đưa ra những tiến bộ đáng kể trong tương lai.
Khoa khoa học máy tính
Trang 6DANH MỤC TỪ VIẾT TẮT vii
Chương 1 - TỔNG QUAN VỀ GPU 1
1.1 Vài nét về GPU 1
1.1.1 Khái niệm - RISC-V (phát âm là "risk-năm") là một kiến trúc tập lệnh(ISA) phần cứng mã nguồn mở dựa trên kiến trúc tập lệnh máy tính với tập lệnh đơn giản hóa (RISC) 1
1.1.2 Lịch sử hình thành và phát triểned - Giai đoạn 2010-2015 1
Ý tưởng về RISC-V bắt đầu từ những năm 2000, khi các nhà nghiên cứu tại Đại học California, Berkeley, bắt đầu suy nghĩ về cách tạo ra một kiến trúc tập lệnh linh hoạt và hiệu quả hơn Dự án chính thức được công bố vào năm 2010, và trong năm đầu tiên, nhóm đã phát hành phiên bản đầu tiên của kiến trúc RISC-V 1
- Giai đoạn 2010-2015: Khởi đầu của RISC-V 2
Năm 2015, Hiệp hội RISC-V (RISC-V Foundation) được thành lập để quản lý và thúc đẩy sự phát triển của kiến trúc RISC-V Hiệp hội đóng vai trò quan trọng trong việc xây dựng tiêu chuẩn, cung cấp tài nguyên hỗ trợ và tạo điều kiện cho sự hợp tác trong cộng đồng RISC-V 2
Năm 2016: SoC thương mại đầu tiên dựa trên RISC-V được phát hành SoC này được phát triển bởi SiFive, một công ty khởi nghiệp có trụ sở tại Hoa Kỳ 2
iv Khoa khoa học máy tính
Trang 7RISC-V đã mở cửa cho cả cộng đồng nghiên cứu và doanh nghiệp Sự linh hoạt và tính mở của nó đã thu hút sự quan tâm từ nhiều tổ chức lớn và những cá nhân có đam mê trong lĩnh vực kiến trúc máy tính Các công ty như NVIDIA, Western
Digital, và Alibaba đã tham gia và ủng hộ sự phát triển của RISC-V 2
- Giai đoạn 2020-nay: Tiềm năng của RISC-V 2
Năm 2020, Tổ chức V đã phát hành phiên bản 2.0 của kiến trúc RISC-V Phiên bản này bao gồm một số cải tiến về hiệu suất, bảo mật và mở rộng 2
Năm 2021, Intel đã công bố kế hoạch phát triển chip RISC-V cho các ứng dụng máy tính trung tâm Đây là một bước ngoặt quan trọng cho RISC-V, vì nó cho thấy kiến trúc này có thể được sử dụng trong các ứng dụng đòi hỏi hiệu suất cao 2
Năm 2022, RISC-V đã được sử dụng trong một số sản phẩm thương mại quan trọng, bao gồm: SoC HiFive Unleashed của SiFive ,SoC Sipeed Maixduino của
Kiến trúc máy tính RISC-V cũng được trang bị với các thành phần quan trọng nhằm tối ưu hóa hiệu suất xử lý Nhưng thay vì đơn vị xử lý đồ họa như trong GPU, RISC-V tập trung vào nguyên tắc cơ bản của kiến trúc máy tính RISC (Reduced Instruction Set Computing) 4
RISC-V duy trì kiến trúc Load-Store, trong đó tất cả các phép toán trên dữ liệu phải được thực hiện thông qua thanh ghi Dữ liệu từ bộ nhớ được nạp vào thanh ghi trước khi thực hiện các phép toán, và kết quả có thể được ghi trở lại thanh ghi hoặc lưu
Trang 8* Extension: 4
* Ứng Dụng Cụ Thể: 4
* Phiên Bản và Tiêu Chuẩn: 5
1.4 Sự khác nhau giữa CPU và GPU 5
-Assembly là một loại ngôn ngữ lập trình cấp thấp được sử dụng cho bộ vi xử lý và các thiết bị có thể lập trình khác, được tạo ra bằng cách biên dịch mã nguồn từ một ngôn ngữ lập trình cấp cao Assembly được thiết kế để giao tiếp trực tiếp với phần cứng máy tính 7
2.2 Cách thức hoạt động: 7
2.3 Thành phần của ngôn ngữ Assembly: 9
2.4 Cấu trúc chương trình 9
Hầu hết các hệ điều hành máy tính hiện nay, đặc biệt là các hệ điều hành của Microsoft, đều hỗ trợ hai dạng cấu trúc tập tin thực thi có thể hoạt động trên nó, đó là tập tin cấu trúc dạng COM và tập tin cấu trúc dạng EXE 9
Có nhiều điểm khác nhau giữa hai cấu trúc chương trình này, nhưng điểm khác biệt lớn nhất là: Các chương trình cấu trúc dạng EXE gồm 3 đoạn: Mã lệnh (Code), dữ liệu (Data) và Ngăn xếp (Stack) Khi hoạt động, 3 đoạn này sẽ được nạp vào 3 đoạn (Segment) bộ nhớ tách biệt trên bộ nhớ Các chương trình dạng COM thì ngược lại, nó chỉ có 1 đoạn mã lệnh, trong đó chứa cả mã lệnh, đoạn dữ liệu và ngăn xếp Vì thế, khi được nạp vào bộ nhớ để hoạt động nó chỉ được cấp phát một đoạn bộ nhớ 9
Rõ ràng kích thước của một chương trình dạng COM không thể vượt quá giới hạn của một đoạn bộ nhớ (với Intel 8088/80286 và MSDOS, 1 Segment bộ nhớ = 64KB) vi Khoa khoa học máy tính
Trang 9Trong khi đó một chương trình dạng EXE có thể lớn hơn 3 Segment bộ nhớ Do đó, khi thiết kế các chương trình lớn, với chức năng phức tạp, trong đó có liên kết giữa các modun chương trình khác nhau thì ta phải thiết kế theo cấu trúc chương trình dạng
Hợp ngữ hỗ trợ thiết kế cả hai dạng cấu trúc chương trình EXE và COM, mỗi dạng phù hợp với một nhóm trình biên dịch nào đó Muốn biên dịch một chương trình hợp ngữ sang dạng EXE thì ngoài việc nó phải được viết theo cấu trúc dạng EXE ta còn cần phải sử dụng một trình biên dịch phù hợp Điều này cũng tương tự với việc muốn có một chương trình thực thi dạng COM 9
Trong cấu trúc chương trình trên các từ khóa Model, Code, ORG, Proc, Endp, End là các hướng dẫn biên dịch <Nhãn chính> là nhãn của lệnh Jmp 9
Cấu trúc này cho thấy rõ, một chương trình hợp ngữ dạng COM chỉ có 1 đoạn, đó chính là đoạn Code (đoạn mã lệnh), trong này bao gồm cả phần khai báo dữ liệu Các khai báo dữ liệu trong chương trình dạng COM có thể đặt ở đầu hoặc ở cuối chương vii Khoa khoa học máy tính
Trang 10trình, nhưng với việc sử dụng định nghĩa đoạn đơn giản các khai báo dữ liệu phải đặt ở
đầu chương trình 9
Chỉ dẫn ORG 100h và lệnh JMP <Thủ tục chính> sẽ được đề cập trở lại ở các phần sau đây của tài liệu này 9
Trong cấu trúc chương trình trên các từ khóa Model, Code, Data, Stack, Proc, Endp, End là các hướng dẫn biên dịch 9
Cấu trúc này cho thấy rõ, một chương trình hợp ngữ dạng gồm 3 đoạn: đoạn Code, chứa toàn bộ mã lệnh của chương trình Đoạn Data, chứa phần khai báo dữ liệu của chương trình Đoạn Stack, nơi chứa stack (ngăn xếp) của chương trình khi chương trình được nạp vào bộ nhớ để hoạt động 9
Chỉ dẫn Stack đặt ở đầu chương trình với mục đích khai báo kích thước của Stack dùng cho chương trình sau này Kích thước thường được chọn là 100h (256) byte 9
Chỉ dẫn Model được đặt ở đầu cả cấu trúc chương trình dạng COM và EXE với mục đích khai báo chế độ bộ nhớ mà chương trình sử dụng 9
viii Khoa khoa học máy tính
Trang 112.4.3 Ví dụ về chương trình viết theo cấu trúc dạng COM và EXE 9
Đề bài: Hãy sử dụng hai chương trình hợp ngữ đơn giản, dạng COM và EXE để in ra màn hình 4 dòng văn bản như sau: 9
University of Da Nang 9
VKU - ICT 9
Subject: Computer Architecture 9
Group 4 9
Hai chương trình dưới đây chỉ có tác dụng minh họa cho việc sử dụng các hướng dẫn biên dịch định nghĩa đoạn đơn giản và giúp các bạn thấy được những điểm giống nhau, khác nhau giữa hai dạng cấu trúc chương trình dạng COM và EXE, vì vậy, á đây các bạn chưa cần quan tâm đến ý nghĩa của các lệnh và các hàm/ngắt trong nó Phần lệnh hợp ngữ và các hàm/ngắt sẽ được trình bày ngay sau đây 9
Chương trình viết theo cấu trúc dạng COM: 9
MyChildren DB ‘University of Da Nang’,0Ah,0Dh 9
DB ‘VKU - ICT’ ,0Ah,0Dh 9
DB ‘Subject: Computer Architecture’ ,0Ah,0Dh 9
Trang 12Chương trình này chọn chế độ bộ nhớ Small Tên thủ tục chính là Main (tên thủ tục chính là tùy ý) Nhãn chính của chương trình là Start (tên thủ tục chính là tùy ý), đó chính là nhãn của lệnh Jmp Phần khai báo dữ liệu chỉ khai báo 1 biến, đó là MyChildren 9
Chương trình này gọi ngắt 20h để kết thúc chương trình dạng COM 9
Chương trình viết theo cấu trúc dạng COM: 9
.Model Small 9
.Stack 100h 9
.Data 9
MyChildren DB ‘University of Da Nang’,0Ah,0Dh 9
DB ‘VKU - ICT’ ,0Ah,0Dh 9
DB ‘Subject: Computer Architecture’ ,0Ah,0Dh 9
Trang 43Ví dụ: địa chỉ COM1 = 378h mov dx,378h in al,dx
2.6.1.6 Lệnh OUT
Cú pháp: OUT địa chỉ cổng,AL/AX
Chức năng: đưa dữ liệu từ thanh ghi AL/AX ra cổng Chú ý:
Nếu địa chỉ cổng <256 thì số địa chỉ đứng trực tiếp trong lệnh OUT Ví dụ: địa chỉ cổng là 1fh
OUT 1fh,AL ; đưa nội dung AL ra cổng 1fh Nếu địa chỉ cổng 256 thì phải nhờ đến thanh ghi DX Ví dụ: địa chỉ COM1 = 378h
mov dx,378h out dx,al
Lệnh này không tác động đến cờ.
2.6.1.7 Lệnh LEA (load Efective address)
Cú pháp: lea reg16, mem
Chức năng: lấy phần địa chỉ offset của biến đưa vào thanh ghi 16 bit Ví dụ: lea bx, Value hay mov bx, OFFSET Value
Đích thường là các thanh ghi: BX, CX, DX, BP, SI, DI
Nguồn là tên biến trong đoạn DS được chỉ rõ trong lệnh hay ô nhớ cụ thể.
2.6.1.8 Lệnh LES (Load register and ES with words from memory)
Cú pháp: les reg, mem
Chức năng: chuyển giá trị của 1 từ(word) từ một vùng nhớ vào thanh ghi đích và giá trị của từ tiếp theo sau của vùng nhớ vào thanh ghi ES.
Trang 24
Trang 44Trong đó:
Đích là một trong các thanh ghi AX, BX,CX, DX, SP, BP, SI, DI Gốc là ô nhớ trong đoạn DS được chỉ rõ trong lệnh
2.6.1.9 Lệnh LDS (Load resgister and DS with words from memory)
Cú pháp: ADD dest, source
Chức năng: lấy toán hạng đích cộng với toán hạng nguồn rồi đưa vào toán hạng đích dest = dest + source
Trang 45Chức năng: Tăng toán hạng đích thêm 1.
Có hai trường hợp tổ chức phép nhân: Nếu source là 8 bit thì AX = AL * source Nếu source là 16 bit thì DX:AX = AX * source Tác động đến cờ: C, O.
2.6.2.5 Lệnh DIV
Cú pháp: DIV SRC
Chức năng: Chia hai toán hạng với số không dấu Hai trường hợp tổ chức phép chia:
Nếu số 16 bits chia cho số 8 bits
Trang 26
Trang 48VD: shl ax,1
2.6.3.5 Lệnh SHR (Shift Right)
Cú pháp: SHR DST, CL
Chức năng: dịch phải logic các bit của toán hạng đích đi một số lần nào đó (số lần dịch được cất trong thanh ghi CL)
Chức năng: quay vòng sang trái các bit của toán hạng đích đi một số lần nào đó (số lần dịch được cất trong thanh ghi CL) Trong mỗi lần quay giá trị bit cao nhất vừa chuyển vào thanh ghi cờ CF đồng thời chuyển vào bit thấp nhất
Tác động đến cờ: C, O VD:rol ax,1
2.6.3.7 Lệnh TEST
Cú pháp: TEST dest, source
Tương tự toán hạng AND nhưng không lưu kết quả Ảnh hưởng các cờ: CF, OF, PF, ZF, SF
Trang 29
Trang 50Cú pháp: RET (nằm ở cuối chương trình con)
Chức năng: quay về chương trình đã gọi chương trình con
2.6.5.3 Lệnh INT
Cú pháp: int n (số ngắt viết theo số hexa)
Chức năng: Kích hoạt một ngắt (chuyển sang chạy chương trình con phục vụ ngắt)
Trang 51Chú ý: Bước nhảy của lệnh jump < 64k
2.6.5.6 Lệnh LOOP (for của ASM)
Cú pháp: mov cx, số lần lặp; số lần lặp ≥ 1
Chức năng: lặp đi lặp lại khối lệnh ASM nằm giữa nhãn và loop cho đến khi cx = 0 Mỗi khi thực hiện một vòng lặp giá trị của CX giảm đi 1.
Chức năng: Đưa giá trị cờ CF lên 1, CF = 1 Chức năng: Đưa giá trị cờ CF lên 1, CF = 1