Giáo trình Kiến trúc máy tính - Chương 3: Bộ Xử lý: Khối điều khiển và Đường dữ liệu - Đại học Bách Khoa

So sánh đánh giá thiết kế đơn xung nhịp Instruction access 2 ns Register read 1 ns ALU operation 2 ns Data cache access 2 ns Register write 1 ns Total 8 ns Single-cycle clock = 125 MHz Đồng hồ tốc độ 125 MHz là bình thường So sánh độ trễ thực hiện 1 lệnh: Một bộ xử lý 2.5 GHz với 20 giai đoạn pipeline có độ trễ khoảng: 0.4 ns/cycle  20 cycles = 8 ns Lưu lượng của bộ xử lý có pipeline tốt hơn rất nhiều: Tốt hơn tới 20 lần với các bộ xử lý phát hành đơn lệnh Tốt hơn tới 100 lần với các bộ xử lý phát hành đa lệnhSo sánh đánh giá thiết kế đa xung nhịp HUST-FET, 04/04/2014 62 R-type 44% 4 cycles Load 24% 5 cycles Store 12% 4 cycles Branch 18% 3 cycles Jump 2% 2 cycles Contribution to CPI R-type 0.444 = 1.76 Load 0.245 = 1.20 Store 0.124 = 0.48 Branch 0.183 = 0.54 Jump 0.022 = 0.04 _____________________________ Average CPI  4.02 Cycle time = 2 ns Clock rate = 500 MHz So sánh độ trễ thực hiện 1 lệnh: Một bộ xử lý 2.5 GHz với 20 giai đoạn pipeline có độ trễ khoảng: 0.4 ns/cycle  20 cycles = 8 ns Lưu lượng của bộ xử lý có pipeline tốt hơn rất nhiều: - Tốt hơn tới 20 lần với các bộ xử lý phát hành đơn lệnh - Tốt hơn tới 100 lần với các bộ xử lý phát hành đa lệnh

pdf62 trang | Chia sẻ: thucuc2301 | Lượt xem: 792 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Giáo trình Kiến trúc máy tính - Chương 3: Bộ Xử lý: Khối điều khiển và Đường dữ liệu - Đại học Bách Khoa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bộ xử lý: Khối điều khiển và Đường dữ liệu Nội dung  Thành phần cơ bản của bộ xử lý – Lệnh truy cập – Các toán tử ALU – Toán tử bộ nhớ Kết nối các thành phần – Các tín hiệu điều khiển và bộ đồn kênh MUXes – Các chỉ thị giải mã lệnh Thực thi cơ bản của bộ xử lý MIPS  Xem lại các tập lệnh cơ bản trong MIPS – Memory: lw, sw – Arithmetic: add,sub – Logic: and, or – Branch: beq  Đọc thêm: – Multiply, divide – A bunch of logic operations – jump – jr and jal Các hoạt động chính của bộ xử lý?  Nạp lệnh: tìm ra lệnh và tải lệnh  Tính toán trên ALU: tìm ra toán tử và thực thi  Truy nhập bộ nhớ: tìm ra địa chỉ và truy nhập Thiết kế đơn xung nhịp  Thiết kế đầu tiên sẽ xử lý một lệnh trong một chu kỳ đồng hồ. Chia lệnh thành các pha và thực hiện trong một chu kỳ đồng hồ.  Nhắc lại về thiết kế mức logic:  Tổ hợp các mức logic tạo ra trạng thái kế tiếp  Bộ nhớ (các mạch chốt, RAM) lưu trữ trạng thái  Bộ đồng hồ chuyển đổi trạng thái kế tiếp  Quy trình nạp lệnh  Trạng thái kế tiếp: PC+4 (ngoại trừ các lệnh nhảy)  Trạng thái: Program Counter (lệnh hiện tại) Thiết kế đơn xung nhịp  Thiết kế xử lý một lệnh trong một chu kỳ đồng hồ  Các khối xử lý cơ bản: – Combinational logic tạo ra next state – Memories (latches, RAM) lưu trữ trạng thái – Clock chuyển đổi next state thành current state. Nạp lệnh  Theo dõi địa chỉ lệnh hiện tại tên thanh PC. – Tăng PC lên 4 trong mỗi chu kỳ – Tải lệnh tại địa chỉ được xác định bởi PC Tính toán trên ALU (các chỉ thị lệnh dạng R-type) Các bước thực hiện? – Đọc dữ liệu từ tệp thanh ghi(specify rs and rt) – Thực thi tính toán ALU – Ghi dữ liệu về tệp thanh ghi (specify rd) Tính toán trên ALU (cấu trúc lệnh dạng RS)  Các bước thực hiện? – Đọc dữ liệu từ tệp thanh ghi (xác định rõ rs và rt) – Thực hiện tính toán ALU – Ghi dữ liệu trở lại tệp thanh ghi (xác định rõ rd) Làm gì tiếp theo? Nạp lệnh và bộ tính toán ALU. – Bộ nhớ lệnh, PC, bộ cộng PC+4 – Tệp thanh ghi, ALU Q: Thiếu khối nào? 1. Không thiếu, chỉ cần tập lệnh và ALU 2. Thiếu khối so sánh 3. Thiếu bộ nhớ dữ liệu A: 3 Sử dụng đầu ra 0 từ ALU để so sánh trong lệnh beq và bne Truy cập bộ nhớ Các bước thực hiện? – Tính toán địa chỉ – Gửi địa chỉ đến bộ nhớ dữ liệu (write: data) – Đọc: nhận kết quả trả về và đưa vào tệp thanh ghi Q: Điều gì xảy ra nếu đọc ghi vào bộ nhớ cùng một thời điểm 1/ không thể xảy ra 2/ dữ liệu sẽ bị sai lệch hoặc không hợp lệ 3/ không có vấn để gì cả vì có đầu ra đọc dữ liệu và đầu vào ghi dữ liệu A: 2 Hoạt động của RAM: kích hoạt một hàng đọc/ghi dữ liệu. Nếu thực hiện cả 2 cùng lúc sẽ làm các bit bị xáo trộn. Ngoài ra cần phải 2 địa chỉ cho quá trình ghi đọc Truy nhập bộ nhớ Q: làm thế nào để tính địa chỉ với giá trị tức thì 1. Cộng gía trị tức thì và giá trị thanh ghi sử dụng ALU. 2. Số có dấu tức thì được sử dụng trong ALU 3. Cộng giá trị tực thì có dấu và giá trị thanh ghi sử dụng ALU A: 2. Cộng giá trị tức thì có dấu và giá trị thanh ghi sử dụng ALU Để tính địa chỉ cần cộng giá trị từ thanh ghi và giá trị tức thì bằng ALU. Cần mạch tổ hợp hợp để biểu diễn số có dấu 16 bit thành số 32 bit Kết nối các thành phần • Bộ tính toán ALU – tải lệnh – tính toán giá trị tiếp theo của PC – đọc từ tệp thanh ghi – thực thi tính toán – ghi lại tệp thanh ghi • Truy nhập bộ nhớ (load/store) – tải lệnh – tính toán giá trị tiếp theo củaPC – đọc từ tệp thanh ghi – tính toán địa chỉ – Read/Write dữ liệu bộ – Write dữ liệu vào tệp thanh ghi • Nạp lệnh (branch) – tải lệnh – tính toán giá trị tiếp theo của PC – đọc từ tệp thanh ghi Tính toán địa chỉ rẽ nhánh: không sử dụng ALU cho phép toán so sánh và tính toán địa chỉ cùng một thời điểm. – thực thi các nhánh so sánh – cập nhật lại giá trị của PC Note: hầu hết các lệnh đều dùng hết các khối của bộ sử lý ! Kết nối RF và ALU Kết nối ALU với bộ nhớ Kết nối giá trị tức thời để tính toán địa chỉ Thêm vào bộ dồn kênh Lựa chọn tín hiệu bằng Bộ dồn kênh MUX Định tuyến tính hiệu (control) • MUX lựa chọn ALU input (tệp thanh ghi hoặc các giá trị hằng số có dấu tức thời) • MUX lựa chọn tệp thanh ghi ghi dữ liệu (kết quả tính toán được tại ALU hoặc dữ liệu từ bộ nhớ) Các tín hiệu điều khiển xác định hoạt động: Lệnh addi Định nghĩa về tín hiệu điều khiển: ALUSrc (ALU source) và MemtoReg (Memory to Register File) Các tín hiệu điều khiển xác định hoạt động: lệnh add Xây dựng các khối rẽ nhánh có điều kiện Các bước thực hiện? – Mặc định: PC = PC + 4 – Trường hợp có điều kiện : PC = PC + 4 + [Sign-extended immediate << 2] if branch Tín hiệu PCSrc Các bước thực hiện? – Mặc định: PC = PC + 4 – Trường hợp có điều kiện: PC= PC+4+[Sign-extended immediate << 2] if branch Đường tín hiệu đơn xung nhịp trong MIPS Các dữ liệu nguồn (dữ liệu lấy ra ở đâu?) Các dữ liệu đích (dữ liệu đi đến đâu?) Ví dụ: addi Lặp lại quá trình Giải mã lệnh Giải mã lệnh (trực tiếp) Giải mã lệnh (các tín hiệu điều khiển) Giải mã lệnh (R-format) Giải mã lệnh (load) Thiết kế đồng bộ theo đồng hồ Thiết kế đồng bộ theo đồng hồ HUST-FET, 04/04/2014  Mạch đồng bộ theo đồng hồ: 1 phần tử trạng thái là hợp lệ và ổn định được quy định bởi xung đồng hồ - Phần tử trạng thái - phần tử nhớ - VD. thanh ghi, bộ nhớ lệnh, bộ nhớ dữ liệu. - Kích hoạt theo sườn – các trạng thái thay đối khi có xườn xung  Đọc nội dung của phần tử trạng thái tính giá trị bằng logic tổ hợp ghi kết quả vào phần tử trạng thái  Các phần tử trạng thái được ghi ở tất cả các chu kỳ đồng hồ. State element 1 State element 2 Combinational logic clock one clock cycle Đồng hồ ở đâu? Lệnh addi thực thi như thế nào? Khi có tín hiệu đồng hồ, biến mới được lưu trữ Lặp lại quá trình Ví dụ lệnh: addi Các tuyến logic và các bộ trễ Tốc độ xử lý xác định như thế nào? Tính chu ky đồng hồ Tc – Đường dài nhất HUST-FET, 04/04/2014 Instr. I Mem Reg Rd ALU Op D Mem Reg Wr Total R-type 2 1 2 1 6ns load 2 1 2 2 1 8ns store 2 1 2 2 7ns beq 2 1 2 5ns jump 2 2ns  Tính chu kỳ đồng hồ trong trường hợp bỏ qua trễ ở bộ ghép, khối điều khiển, khối mở rộng dấu, khối đọc PC, khối dịch 2, dây dẫn, thời gian thiết lập và giữ. Cho biết độ trễ: - Truy cập bộ nhớ lệnh và bộ nhớ dữ liệu (2ns) - Khối số học logic và bộ cộng (2 ns) - Truy cập tệp thanh ghi (đọc hoặc ghi) (1 ns) Đánh giá hiệu năng  Thời gian đáp ứng (thời gian thực thi) – là khoảng thời gian giữa thời điểm bắt đầu thực hiên và thời điểm hoàn thành một nhiệm vụ Quan trọng đối với 1 người sử dụng yêu cầu hệ thống thức hiện 1 nhiệm vụ  Thông lượng (dải thông) – là tổng số nhiệm vụ có thể được hoàn thành trong 1 khoảng thời gian Quan trọng đối với người điều hành trung tâm dự liệu  Cần các hệ đo lường khác nhau cho hiệu năng của máy tính Cách tính hiệu năng  Hiệu năng (tốc độ) của máy tính X:  Máy tính X nhanh hơn máy tính Y, n lần:  Để tối đa hóa hiệu năng, cần tối thiểu hóa thời gian thực hiện  Giảm thời gian đáp ứng thường sẽ tăng thông lượng x x TimeExecution 1ePerformanc  n x y y x imeExecutionT imeExecutionT ePerformanc ePerformanc Đo hiệu năng – Đo thời gian thực hiện Thời gian dùng để tính hiệu năng  Thời gian đáp ứng (thời gian đồng hồ, thời gian đã trôi qua):  Tổng thời gian hoàn thành 1 nhiệm vụ  Bao gồm: thời gian truy cập đĩa, bộ nhớ, thời gian vào ra, thời gian cho hệ điều hành  Thời gian bộ xử lý (CPU time)  Thời gian CPU người dùng  Thời gian CPU hệ thống  Thời gian CPU – thời gian bộ xử lý dùng để thực hiện 1 nhiệm vụ  Không bao gồm thời gian chờ vào/ra hay thời gian thực hiện các chương trình khác  Thời gian CPU cho 1 chương trình, Tcpu được tính từ số chu kỳ đồng hồ CPU thưc hiện chương trình P và thời gian 1 chu kỳ đồng hồ ccpuccpu fCTTCT /or  Ví dụ  Công thức để tính thời gian CPU, khi máy tính A thực hiện chương trình:  Số chu kỳ máy tính A dùng để thực hiện chương trình:  Số chu kỳ máy tính B dùng để thực hiện chương trình:  Tốc độ đồng hồ của máy tính B:  Hiệu năng có thể cải thiện bằng cách giảm số chu kỳ 1 xung đồng hồ hoặc giảm số chu kỳ cần thiết để thực hiện chương trình Ac A Acpu f CT , ,  cycles102010210 99,,  AcAcpuA fTC AB CC  2,1 GHz T Cf Bcpu B Bc 46 10202,1 9 , ,  Máy tính A với xung đồng hồ 2GHz thực hiện 1 chương trình hết 10 giây. Để thực hiện chương trình đó trong 6 giây bằng máy tính B, ta cần tăng tốc độ xung đồng hồ của máy B. Tuy nhiên, tăng tốc độ xung đồng hồ cũng làm tăng số chu kỳ cần thiết lên 1,2 lần. Xác định tốc độ xung đồng hồ máy tính B Số xung đồng hồ HUST-FET, 04/04/2014  Số xung đồng hồ thực hiện 1 chương trình:  Trong đó:  I là số chỉ thị máy cần thực hiện trong chương trình  CPI (eng. Clock cycles per Instruction) là số xung đồng hồ trung bình cần để thực thi 1 chỉ thị máy,  CPI có thể dùng để so sánh các máy tính khác nhau cùng triển khai 1 kiến trúc tập lệnh.  Ví dụ: có 3 loại lệnh A, B, C khác nhau trong 1 kiến trúc tập lệnh. Mỗi lệnh trong từng loại có CPI tương ứng: CPIIC  CPI for this instruction class A B C CPI 1 2 3 So sánh dựa trên CPI  Khi 2 máy tính A, B cùng thực hiện 1 chương trình, chúng cùng thực hiện I chỉ thị.  Do đó:  Máy A nhanh hơn máy B: IpsITCPIIT IpsITCPIIT BcBBcpu AcAAcpu   6005002,1 5002500,2 ,, ,, PerformanceA PerformanceB  Tcpu,B Tcpu,A  600 I 500 I 1,2 Máy tính A và B cùng triển khai 1 kiến trúc tập lệnh. Máy A có chu kỳ đồng hồ là 250ps, và CPI hiệu dụng cho 1 chương trình P là 2,0. Máy B có chu kỳ đồng hồ là 500ps, và CPI hiệu dụng cho cùng 1 chương trình P là 1,2. Máy tính nào nhanh hơn và nhanh hơn bao nhiêu? CPI hiệu dụng (trung bình)  CPI hiệu dụng được tính bằng cách xét tất cả các lớp chỉ thị có trong chương trình và lấy trung bình với trọng số là tỉ lệ xuất hiện của lớp chỉ thị trong chương trình  Trong đó:  ICi là tỉ lệ (%) số chỉ thị thuộc loại i được thực thi  CPIi là số chu kỳ (trung bình) cần để thực hiện 1 chỉ thị thuộc thuộc loại i  n là số loại chỉ thị  CPI hiệu dụng phụ thuộc vào tỉ lệ chỉ thị trong một chương trình (tần suất động của các chỉ thị trong 1 hoặc nhiều chương trình) )( 1 i n i i ICCPICPI   So sánh đoạn mã chương trình HUST-FET, 04/04/2014 51  Người thiết kế một máy tính triển khai kiến trúc tập lệnh gồm 3 loại chỉ thị A, B, C được CPI như sau:  Với 1 câu lệnh ở ngôn ngữ bậc cao, người viết trình biên dịch có thể lựa chọn 2 đoạn chỉ thị máy gồm có tần suất các loại chỉ thị như sau:  Đoạn mã nào gồm nhiều chỉ thị hơn? Đoạn mã nào nhanh hơn? Tính CPI của từng đoạn mã. A B C CPI 1 2 3 Đoạn mã A B C 1 2 1 2 2 4 1 1 So sánh đoạn mã chương trình HUST-FET, 04/04/2014 52  Đoạn mã 1 dùng 5 chỉ thị, đoạn mã 2 dùng 6 chỉ thị  Số xung đồng hồ để thực hiện mỗi đoạn mã được tính như sau:  Trong đó I1,i, I2,i là số lượng chỉ thị loại i trong đoạn mã 1 và 2 tương ứng  Như vậy đoạn mã 1 chậm hơn đoạn mã 2, mặc dù dùng ít chỉ thị hơn Đoạn mã A B C 1 2 1 2 2 4 1 1 9)131241()( 10)231221()( ,2 3 1 2 ,1 3 1 1       i i i i i i ICPIC ICPIC A B C CPI 1 2 3 Cải tiến hiệu năng  Cho một máy tính thực hiện 1 chương trình gồm 4 loại chỉ thị máy có các thông số về tần suất và CPI như sau:  Nếu ta có bộ đệm dữ liệu làm giảm thời gian nạp (Load) xuống 2 chu kỳ, máy tính sẽ nhanh lên bao nhiêu lần?  Nếu ta có khối dự báo rẽ nhánh cho phép tiết kiệm 1 chu kỳ khi rẽ nhánh, hiệu năng sẽ thế nào?  Nếu ta có 2 khối ALU thực hiện 2 chỉ thị ALU đồng thời? Op Tần suất (ICi) CPIi ICi x CPIi ALU 50% 1 Load 20% 5 Store 10% 3 Branch 20% 2  = Hiệu năng thiết kế đơn xung nhịp HUST-FET, 04/04/2014 Độ trễ logic khi Truy cập lệnh 2 ns Đọc thanh ghi 1 ns Hoạt động ALU 2 ns Truy cập bộ nhớ DL 2 ns Ghi thanh ghi 1 ns Tổng 8 ns Tốc độ đồng hồ = 125 MHz Các loại lệnh: R-type 44% 6 ns Load 24% 8 ns Store 12% 7 ns Branch 18% 5 ns Jump 2% 4 ns Thời gian trung bình 6.38 ns CPI = 1. P C P C P C P C P C ALU-type Load Store Branch Jump Not used Not used Not used Not used Not used Not used Not used Not used Not used (and jr) (except jr & jal) Thiết kế đơn xung nhịp – Ưu nhược điểm HUST-FET, 04/04/2014 55  Sử dụng chu kỳ đồng hồ không hiệu quả – chu kỳ đồng hồ được đặt theo lệnh chậm nhất.  Các lệnh phức tạp như lệnh nhân dấu phẩy động: Tốn diện tích thiết kế vì cần nhân đôi một số khối chức năng (VD. bộ cộng) vì chúng không thể được chia sẻ trong cùng 1 chu kỳ đồng hồ  Đơn giản và dễ hiểu Clk lw sw Waste Cycle 1 Cycle 2 Thiết kế đa xung nhịp HUST-FET, 04/04/2014 56  Chia lệnh thành các pha thực hiện: IF, ID, EX, MEM, WB. Mỗi pha thực hiện trong 1 chu kỳ xung nhịp  Thời gian thực hiện (= số pha) của mỗi lệnh được điều chỉnh tùy thuộc độ phức tạp của lệnh  Các khối chức năng được chia sẻ giữa các pha khác nhau của lệnh do một khối chức năng cụ thể không cần trong toàn bộ các pha thực hiện của lệnh Clock Clock Instr 2 Instr 1 Instr 3 Instr 4 3 cycles 3 cycles 4 cycles 5 cycles Time saved Instr 1 Instr 4 Instr 3 Instr 2 Time needed Time needed Time allotted Time allotted Hiệu năng thiết kế đa xung nhịp HUST-FET, 04/04/2014 Các loại lệnh sử dụng số chu kỳ khác nhau R-type 44% 4 cycles Load 24% 5 cycles Store 12% 4 cycles Branch 18% 3 cycles Jump 2% 2 cycles Đóng góp vào số chu kỳ trung bình cần cho một lệnh: R-type Load Store Branch Jump _____________________________ CPI trung bình  P C P C P C P C P C ALU-type Load Store Branch Jump Not used Not used Not used Not used Not used Not used Not used Not used Not used (and jr) (except jr & jal) Hiệu năng thiết kế đa xung nhịp HUST-FET, 04/04/2014 58 Các loại lệnh sử dụng số chu kỳ khác nhau R-type 44% 4 cycles Load 24% 5 cycles Store 12% 4 cycles Branch 18% 3 cycles Jump 2% 2 cycles Tính số chu kỳ trung bình cần cho một lệnh: R-type 0.444 = 1.76 Load 0.245 = 1.20 Store 0.124 = 0.48 Branch 0.183 = 0.54 Jump 0.022 = 0.04 _____________________________ CPI trung bình  4.02 P C P C P C P C P C ALU-type Load Store Branch Jump Not used Not used Not used Not used Not used Not used Not used Not used Not used (and jr) (except jr & jal) Thiết kế đơn xung nhịp HUST-FET, 04/04/2014 59 / ALU Data cache Instr cache Next addr Reg file op jta fn inst imm rs (rs) (rt) Data addr Data in 0 1 ALUSrc ALUFunc DataWrite DataRead SE RegInSrc rt rd RegDst RegWrite 32 / 16 Register input Data out Func ALUOvfl Ovfl 31 0 1 2 Next PC Incr PC (PC) Br&Jump ALU out PC 0 1 2 Clock rate = 125 MHz CPI = 1 (125 MIPS) Thiết kế đa xung nhịp HUST-FET, 04/04/2014 60 Clock rate = 500 MHz CPI  4 ( 125MIPS) / 16 rs 0 1 0 1 2 ALU Cache Reg file op jta fn (rs) (rt) Address Data Inst Reg Data Reg x Reg y Reg z Reg PC 4 ALUSrcX ALUFunc MemWrite MemRead RegInSrc 4 rd RegDst RegWrite / 32 Func ALUOvfl Ovfl 31 PCSrc PCWrite IRWrite ALU out 0 1 0 1 0 1 2 3 0 1 2 3 InstData ALUSrcY SysCallAddr / 26 4 rt ALUZero Zero x Mux y Mux 0 1 JumpAddr 4 MSBs / 30 30 SE imm 2 So sánh đánh giá thiết kế đơn xung nhịp HUST-FET, 04/04/2014 Instruction access 2 ns Register read 1 ns ALU operation 2 ns Data cache access 2 ns Register write 1 ns Total 8 ns Single-cycle clock = 125 MHz Đồng hồ tốc độ 125 MHz là bình thường So sánh độ trễ thực hiện 1 lệnh: Một bộ xử lý 2.5 GHz với 20 giai đoạn pipeline có độ trễ khoảng: 0.4 ns/cycle  20 cycles = 8 ns Lưu lượng của bộ xử lý có pipeline tốt hơn rất nhiều: Tốt hơn tới 20 lần với các bộ xử lý phát hành đơn lệnh Tốt hơn tới 100 lần với các bộ xử lý phát hành đa lệnh So sánh đánh giá thiết kế đa xung nhịp HUST-FET, 04/04/2014 62 R-type 44% 4 cycles Load 24% 5 cycles Store 12% 4 cycles Branch 18% 3 cycles Jump 2% 2 cycles Contribution to CPI R-type 0.444 = 1.76 Load 0.245 = 1.20 Store 0.124 = 0.48 Branch 0.183 = 0.54 Jump 0.022 = 0.04 _____________________________ Average CPI  4.02 Cycle time = 2 ns Clock rate = 500 MHz So sánh độ trễ thực hiện 1 lệnh: Một bộ xử lý 2.5 GHz với 20 giai đoạn pipeline có độ trễ khoảng: 0.4 ns/cycle  20 cycles = 8 ns Lưu lượng của bộ xử lý có pipeline tốt hơn rất nhiều: - Tốt hơn tới 20 lần với các bộ xử lý phát hành đơn lệnh - Tốt hơn tới 100 lần với các bộ xử lý phát hành đa lệnh

Các file đính kèm theo tài liệu này:

  • pdfkien_truc_may_tinhchapter_3_processor_4302_2016040.pdf
Tài liệu liên quan