Opteron, Turion 64 và một vài kiểu Sempron .Cấu trúc này có tên gọi như K8 hoặc Hammer , chúng ta sau khi xem cấu trúc bên trong của nó và so sánh với cấu trúc bên trong của bịi vi xử lí
Trang 1Bộ công thơng Trờng đại học côngnghiệp hà nội Khoa: công nghệ thông tin
BáO CáO BàI TậP LớN MÔN HọC
Hà nội: 2012
Trang 2Phần A : Giới thiệu
I / đề tài
Phân tích kiến trúc & nguyên lý làm việc của bộ vi xử lý amd 64 bit II/ bố cục
1 kiến trúc AMD 64 bit.
2.Nguyên lý làm việc AMD 64 bit.
Trang 3Opteron, Turion 64 và một vài kiểu Sempron
Cấu trúc này có tên gọi như K8 hoặc Hammer , chúng ta sau khi xem cấu trúc bên trong của nó và so sánh với cấu trúc bên trong của bịi vi xử lí Intel
Sự khác nhau chính giữa cấu trúc AMD64 và những bộ vi xử lí được thiết kế trước đó của AMD như AthlonXP và Athlon đầu tiên ở chỗ phần điều khiển bộ nhớ được đi kèm bên trong CPU mà không thông qua Chip North Bridge ( Chip chính của Chipset trên Mainboard ) Do đó Mainboard được sản xuất cho bộ vi
xử lí dựa trên cấu trúc AMD64 thì Chip “North Bridge” là cầu nối giữa CPU và Bus đồ hoạ (AGP hoặc PCI Express) và Chip "South Bridge" Từ khi
Chip “North Bridge” được sản xuất đơn giản hơn thì một vài nhà sản xuất chỉ còn một Chipset trên Mainboard cho kiểu CPU của AMD64
Từ khi phần điều khiển bộ nhớ được đi kèm bên trong CPU , dung lượng của bộ nhớ - bao gồm kiểu bộ nhớ được hỗ trợ và hỗ trợ Dual Channel - phụ thuộc vào CPU mà không còn phụ thuộc vào North Bride ( không còn phụ thuộc vào Mainboard ) như đã từng xảy ra với những Mainboard sử dụng CPU có cấu trúc khác Như vậy đối với Mainboard dùng CPU dựa trên cấu trúc AMD64 mà không tích hợp Video on-board thì không có những tính năng khác của
Mainboard được quan tâm đến đối với những Mainboard dùng CPU dựa trên cấu trúc AMD64 có tích hợp Card màn hình on-board thì chỉ có tính năng của phần Card màn hình là được quan tâm đến
Hình dưới đây là cấu trúc được dùng dựa trên CPU khác
Trang 5Hình dưới đây là cấu trúc được dùng dựa trên bộ vi xử lí AMD64
Chúng ta có thể nói rằng Chip "North Bridge" được gắn bên trong CPU Trên Mainboard chúng ta sẽ tìm thấy Chip " Bridge" mà sẽ phù hợp giao diện giữa Bus "HyperTransport" ( có nghĩa là CPU ) với Bus của card đồ hoạ (AGP hoặc PCI Express x16) và Chip "South Bridge" Đôi khi nhà sản xuất Mainboard họ đưa ra một Chip duy nhất gọi là “Single-chip Solution” bao gồm Chip " Bridge"
và Chip "South Bridge"
Phần điều khiển bộ nhớ được đi kèm bên trong bộ vi xử lí AMD64 có thể điều khiển tới 04 thanh nhớ / kênh Do vậy hệ thống Dual - Channel có thể điều khiển 08 thanh nhớ Số của khe cắm được có sẵn trên Mainboard là giới hạn bởinhà sản xuất Mainboard
Trang 62 Bus HyperTransport và Đa xử lí
Sự trao đổi thông tin giữa CPU AMD64 và Chip " Bridge" được thực hiện bởi Bus có tên là HyperTransport Tốc độ HyperTransport phụ thuộc vào kiểu của CPU Giá trị thông thường là 3200MB/s hoặc 4000MB/s Để hiểu kỹ hơn về HyperTransport bạn có thể xem riêng bài này trong trang Web của chúng tôi
Bộ vi xử lí AMD64 có thế có nhiều hơn một bus HyperTransport Trong khi tất
cả CPU AMD64 của thị trường máy tính để bàn và máy tính xách tay Athlon 64,Athlon 64 FX, Athlon 64 X2, Sempron và Turion 64 chỉ có 01 bus
HyperTransport , thì kiểu CPU dùng AMD64 cho náy chủ và máy trạm làm việc
- Opteron - có nhiềuhơn 01 bus HyperTransport
Bộ vi xử lí Opteron có series 1xx không hỗ trợ Đa xử lí và chỉ có 01 bus
HyperTransport như hình trên ( ở phần 1)
CPU Opteron 2xx hỗ trợ đa xử lí tới 02 CPU và có 02 Bus HyperTransport
CPU Opteron 8xx hỗ trợ đa xử lí tới 08 CPU có 03 Bus HyperTransport NhữngBus thêm vào để dùng kết nối bên trong những CPU với nhau , chúng ta có thể xem hình dưới đây
Cấu hình Opteron 2xx hoặc 8xx có Dual-CPU và Đa xử lí
Trang 7Cấu hình Đa xử lí Opteron 8xx có 04 CPU
Trang 8Cấu hình đa xử lí Opteron 8xx có 08 CPU
Trang 9Quan điểm của AMD về vấn đề Đa xử lí cũng rất được đáng quan tâm
Mỗi một CPU có phần điều khiển bộ nhớ của nó , mỗi CPU truy cập vào những thanh nhớ riêng biệt
Ví dụ : trong hệ thống 04 Opterron có 4GB bộ nhớ thì mỗi một CPU có điều khiển riêng 1GB nhớ Trong hệ thống Opteron có 04 CPU 4GB được chia cho tất cả CPU Như thế mỗi một CPU có thể điều khiển tới 04 thanh nhớ / kênh và
Trang 1004 CPU có thể điều khiển trực tiếp tới 32 thanh nhớ ( 08 thanh / CPU ) Nhà sảnxuất Mainboard thiết kế số khe cắm RAM sẵn sàng trên Mainboard ( có nghĩa
là có thể nói rằng hệ thống Opteron 04 CPU có thể có tới 32 thanh nhớ mà không thể nói rằng tất cả hệ thống Opteron 04 PCU có 32 khe cắm RAM )
Trong hình trên chúng ta có thể thấy phần "I/O " I/O này đại diện cho mỗi kiểu của Bridge , thông thường là South Bridge , nó có thể là Bridge của Card đồ hoạAGP hoặc PCI Express x16 , nó cũng có thể là PCI-X hoặc PCI Express cho mục đích Card Add-on
Bus HyperTransport được kết nối bên trong CPU theo hình dưới đây
Bộ vi xử lí AMD64 có "Crossbar" , ở đó là đường nạp dữ liệu và những lệnh từ
và tới CPU , bộ nhớ và với Bus HyperTransport
Trang 11System Request Interface (SRI) cũng được gọi là System Request Queue (SRQ),trong khi APIC là Advanced Programmable Interrupt Controller
3 Socket của CPU
CPU AMD64 có vài kiểu Socket khác nhau Chúng ta phải dùng Mainboard có cùng kiểu Socket với CPU mà chúng ta có
Những kiểu Socket khác nhau bởi vì những tính năng khác nhau của phần điều khiển bộ nhớ
Socket 754 : phần điều khiển bộ nhớ DDR và Single - Channel , có nghĩa
là điều khiển bộ nhớ truy cập bộ nhớ 64-bit được sử dụng đầu tiên cho kiểu Athlon64 , Turion64 và kiểu Sempron socket 754
Socket 939 : điều khiển bộ nhớ DDR và Dual - Channel , điều khiển bộ nhớ truy cập 128-bit được sử dụng kiểu Athlon 64, Athlon 64 X2,
Athlon 64 FX và một vài dòng Opteron 1xx
Socket 940 : điều khiển bộ nhớ DDR và Dual - Channel yêu cầu bộ nhớ ECC được dùng trong Opteron và những kiểu đầu tiên của Athlon 64 FX
Socket AM2 : điều khiển bộ nhớ DDR2 và Dual - Channel Được dùng cho những sản phẩm sắp tới của Athlon 64, Athlon 64 X2 và Athlon 64
FX
Hình dưới đây là Socket của CPU và trên Mainboard
Socket 754
Trang 13phép CPU mô phòng nhiều bộ nhớ RAM bằng cách tạo thành những file nháp trên ổ cúng gọi là Swap file
Intel đã Copy tất cả những đặc điểm trên và họ không ngoại trừ bất kì đặc điểm nào của AMD Mặc dù vậy những CPU AMD64 mà hỗ trợ kiểu x86-64 thì không phải tất cả bộ vi xử lí của Intel đều hỗ trợ đặc điểm đó Để sử dụng đặc điểm này thì hệ điều hành phải chạy 64-bit
Như chúng ta đã biết phần điều khiển nhớ của AMD64 làm việc trên công nghệ DDR hoặc DDR2 Công nghệ Dual Data Rate làm việc bằng cáhc truyền 02 dữ liệu trong một chu kì đồng hồ Do đó khi dùng Athlon64 có bộ nhớ
DDR400/PC3200 , CPU truy cập với tần số xung nhịp đồng hồ 200MHz chứ không phải 400 MHz ( bộ nhớ DDR và DDR2 có tốc độ thực bằng 1/2 tốc độ ghi trên nhãn )
Tất cả CPU AMD64 có bộ nhớ Cache lệnh là 64KB và Cache dữ liệu là 64KB
Bộ nhớ cache L2 thì phụ thuộc vào kiểu của CPU Trong bộ vi xử lí Dual-core thì cache L2 được tách rời có nghĩa là mỗi nhân sở hữu bộ nhớ cache L2 riêng biệt Trong CPU của Intel dòng mới nhất ( Core Duo và Core 2 Duo ) bọ nhớ cache L2 được dùng chung và được chia xẻ tuỳ theo nhu cầu của mỗi nhân ( Intel tuyên bố đó là cải tiến để tăng hiệu suất làm việc )
5 Pipeline AMD64
Pipeline là danh sách của tất cả các tầng mà một lệnh phải đi qua một cách thứ
tự để thực hiện một công việc được hoàn thành
Cấu trúc AMD 64 dùng 12 tầng Pipeline đối với những lệnh thực hiện số
nguyên và 17 tầng Pipeline đối với những phép tính thực hiện dấu phảy động
Dó đó nó sẽ cần 12 hoặc 17 bước để một lệnh đưa ra được thực hiện hoàn thành trong AMD64
Cấu trúc trước của AMD - K7 , được sử dụng Athlon , Athlon XP và một vài kiểu Sempron , có 10 tầng Pipeline Pentium 4 có 20 tầng , Pentium
Trang 144 “Prescott” có 31 tầng Intel quay trở lại những bộ vi xử lí sau này Core 2 Duo
có 14 tầng Pipeline
Chúng ta hãy nghiên cứu Pipeline số nguyên của AMD64 Nó dựa trên Pipelinecủa cấu trúc K7 , sự khác nhau chính ở tầng Decoder ( giải mã ) mà nó sẽ phân thành vài tầng khác , chắc chắn cho phép những CPU AMD64 đạt được tốc độ đồng hồ cao hơn
Fetch : những lệnh được đưa tới từ bộ nhớ cache lệnh L1 thành những nhóm 16 byte ( 128 bit ) Trong phần này thành 02 tầng Tầng thứ hai được biết như là “Transit” - Sự đi qua , nó là hoạt đông jchính để chuyển
dữ liệu bên trong CPU ( tương tự như tầng Drive của Pentium 4 )
Pick : Fetch Unit gửi 128-bit mà đã được chuyển tới tầng này , cung cấp tới một bộ đệm được sẵn sàng ở đây Những lệnh x86 không có độ dài cốđịnh , trong tầng này CPU sẽ tìm và tách những lệnh hiện có bên trong bộ đệm Nó cũng quyết định những lệnh x86 sẽ được gửi tới phần Decoder
Trang 15nào : tới Decode đơn giản ( nhanh ) được dùng những lệnh x86 chung mà chuyển đổi thành một hoặc hai vi lệnh , hoặc tới Decoder phức tạp ( chậm) được dùng cho những lệnh x86 mà được chuyển đổithành vài vi lệnh Tầng này được biết như là "Scan "
Decode : ở đây những lệnh x86 được chuyểnthành những vi lệnh là nhân CPU có thể hiểu được Trong phần này có 02 tầng
Pack : những cặp vi lệnh đã được giải mã được ghép thành một vi lệnh ở đây
Pack/Decode : một vài giải mã được làm ở đây trước khi vi lệnh được gửi tới Instruction Control Unit của AMD64 ( tương tự như ROB Reorder Buffer của Intel )
Dispatch : những vi lệnh được gửi tới Scheduler thích hợp trong tầng này
Schedule : những vi lệnh được lên danh sách để thực hiện một trong những Scheduler của CPU
AGU/ALU : những lệnh liên quan đến số nguyên và lên quan đến bộ nhớ được thực hiện ở đây
Data Cache : dú liệu được sinh ra trong Execution Unit được gửi tới bộ nhớ Cache L1 , những thanh ghi đầu tiên sẽ lưu được lưu trữ và lệnh đượcđánh dấu “executed” trong ROB Phần này giống như “Retirement” trongCPU của Intel
6 Bộ nhớ Cache và Fetch Unit
Trong cấu trúc AMD64 đường dữ liệu kết nối giữa bộ nhớ Cache L1 và L2 có
độ rộng 128-bit Trong bộ vi xử lí của Intel thuộc thế hệ thứ 7 ( Pentium 4 ) đường dữ liệu này có độ rộng 256-bit và trong CPU của Intel thuộc thhé hệ thứ
6 (Pentium Pro, Pentium II, Pentium III ) đường này rộng 64-bit
Trang 16Bộ nhớ cache lệnh L1 của CPU AMD64 bao gồm mạch logic Pre-decode , mỗi một byte lưu trữ bên trong bộ nhớ cache L1 có một vài bit để đánh dấu bắt đầu
và kết thúc mỗi lệnh Những lệnh x86 không có độ dài cố định ( chúng có thể
có từ 1 đến 15 byte ) , quá trình xử lí để tách đâu là điểm đầu và đâu là điểm cuối là rất quan trong để CPU giải mã ( Decoder )
Cache lệnh L1 cung cấp 76 bit phụ tới Fetch Unit trong đó : 52 bit là Pre-decode, 08 bit chẵn lẻ và 16 phần chọn rẽ nhánh Những bit chọn rẽ nhánh được CPU
sử dụng để ccó gắng dự đoán trước những rẽ nhánh bên trong chương trình
Do đó trên thực tế Cache L1 có dung lượng lớn hơn 64KB như thông báo vì có thêm những thông tin lưu trữ Pre-decode và thông tin rẽ nhánh
Trang 17Nó sẽ được tính là 102 KB gồm : 64KB cache lệnh + 4KB parity + 26 KB decode + 8KB dữ liệu rẽ nhánh
Pre-Cấu trúc AMD64 dùng 2048 đầu vào BTB (Branch Target Buffer) , có cuìng kích thước với cấu trúc thế hệ trước CPU của AMD , K7 BTB là bộ nhớ nhỏ
mà chứa danh sách tất cả những rẽ nhánh được nhận biết bên trong chương trình
BTB của Pentium 4 có 4096 đầu vào trong khi những bộ vi xử lí thuộc thế hệ thứ 6 của Intel phần đệm này có 512 đầu vào
Thanh ghi rẽ nhánh khác BHT (Branch History Table) , được AMD gọi
là GHBC (Global History Bimodal Counter) , có 16384 đầu vào trong cấu trúc AMD64 , trong khi Pentium 4 của Intel có 4096 đầu vào , có cùng kích thước với BHT của cấu trúc K7 của AMD Thanh ghi này có 02-bit dùng để theo vết những rẽ nhánh có điều kiện " có khả năng nhất " , "có khả năng" , " không có khả năng" và "không có khả năng nhất "
kế cho PC bởi vì nó không chạy được những chương trình thông thường như : Windows , OFFICE
Do đo giải pháp được tất cả bộ vi xử lí trên thị trường ngày nay của AMD và Intel là dùng bộ giải mã ( Decoder ) Bên trong CPU có những lệnh như là RISC , những đằng trước của Decoder chỉ có những lệnh CISC
Những lệnh x86 CISC được gọi là " lệnh " , những lệnh bên trong của RISC gọi
là "vi lệnh " hoặc : “micro-op”, “µops” , “ROP”
Cấu trúc AMD64 có kiểu lệnh thứ ba gọi là Macro-op hoặc "MOP" , nó là lệnh được tạo ra từ Giải mã lệnh AMD64 thực hiện bên trong bằng những Macro-op Khi những Macro-op được đưa tới những Scheduler thích hợp , nó đẩy nhanh giải mã thành những vi lệnh và sau đó những vi lệnh này được thực hiện
Nếu chúng ta chú ý nhớ rằng một cái gì đó trong cấu trúc mới của Intel cũng được sử dụng kiểu Macro-op trên chính là đặc điểm Macro-fusion ( ghép hai vi lệnh thành một vi lệnh trong một thanh ghi có độ rộng gấp đôi ) Những bộ vi
xử lí có sử dụng Macro-fusion chỉ làm việc với những lệnh rẽ nhánh , còn trong AMD64 dùng Macro-op được dùng trong tất cả các lệnh
Trang 18Những vi lệnh RISC không thể truy cập trực tiếp , do chúng ta không tạo ra những phần mềm viết trên tập lệnh này , do đó những lệnh phải đi qua phần Decoder Mỗi một CPU có tập vi lệnh RISC riêng và không tương thích với những vi lệnh từ CPU khác Có nghĩa là vi lệnh của AMD65 khác với vi lệnh của Pentium 4 , khác với cấu trúc vi lệnh của K7
Tuỳ thuộc vào độ phức tạp của lệnh x86 , nó có thể chuyển đổi thành một vài vi lệnh RISC
Trong cấu trúc AMD64 , những vi lệnh x86 có thể được chuyển đổi thành nhữngMacro-op được sử dụng trong 03 phần khác nhau :
Dùng Decoder đơn giản , gọi là DirectPath Single , mà chuyển một lệnh x86 thành một lệnh Macro-op
Cũng dùng Decoder đơn giản , gọi là DirectPath Double , chuyển đổi 01 lệnh x86 thành 02 Macro-op
Hoặc dùng Decoder phức tạp , gọi là DirectPath Vector , chuyển 01 lệnh x86 thành vài lệnh Macro-op
Ở đây Decoder của AMD64 làm việc như thế nào ?
Trong tầng Pick , hoặc gọi là Scan , CPU tìm kiếm và tách những lệnh hiện thời trong Instruction Byte Buffer , quyết định phần nào sẽ được
dùng DirectPath hoặc VectorPath
Sau đó đến tầng giải mã Decode , được phân thành 02 bước , ở đây những lệnh x86 hiện tại được chuyển đổi thành những Macro-op Tầng này tương đương với tầng Aligh của CPU K7 Tốc độ giải mã lớn nhất ở đầu ra là 06 Macro-op / chu kì đồng hồ : 03 macro-op cho DirectPath và 03 macro-op cho VectorPath
Những Macro-op đi tới tầng Pack ( tương đương với tầng Decode 1 của K7 ) , ở
đó những lệnh Macro-op được gói lại với nhau , 03 Macro-op được gửi tới tầng tiếp theo - Pack/Decode - sau đó những Macro-op được gửi tới Instruction Control Unit ( tương đương với Reorder Buffer (ROB) của Intel
Trang 198 Dispatch và Schedule
Như chúng ta đã đề cập Instruction Control Unit là ROB (Reorder Buffer) của
bộ vi xử lí AMD64 Ở đó những Macro-op được "nhặt" và gửi tới phần
lên công việc OOO ( Out-Of-Order ) , có nghĩa là thực hiện công việc không theo thứ tự lệnh xuất hiện trong chương trình Ví dụ nếu chương trình như sau :Interger
Interger
Interger
Interger
FP
Trang 20FP
Cấu trúc AMD64 có 03 Execution Unit thực hiện những phép tính liên quan đến
số nguyên và cũng có 03 Execution Unit thực hiện những phép tính liên quan đến dấu phảy động Nếu nó không thực hiện OOO thì những phần liên quan đếndấu phảy động sẽ nghỉ khi chạy chương trình này khi lệnh trước cũng là lệnh liên quan đến số nguyên không thể thực hiện cùng một lúc bởi vì cũng chỉ có 03 Execution Unit đang được sử dụng Từ khi có sự cải tiến kiểu thực hiện OOO , lệnh thứ năm cũng là lệnh dấu phảy động (FP) đầu tiên ,có thể được gửi cùng thực hiện một lúc cùng với lệnh Interger đầu tiên , công việc này tăng hiệu suất của CPU
Trên thực tế trong AMD64 có 03 FPU nên cả hai lệnh FP đã có trong chương trình trên sẽ được chuyển đi để thực hiện lệnh trong cùng một lúc Mục đích của
nó là làm cho CPU luôn luôn hoạt động trong tất cả thời gian
ROB ( Reorder Buffer ) có sẵn trong cấu trúc AMD64 , nó có 72 đầu vào và mộtđiều khá thú vị là mỗi một Execution Unit liên quan đến số nguyên có một vị trí
cố định Scheduler trong đó ( 8 đầu vào / ALU ) Những Execution Unit của FP chỉ duy nhất một khối Scheduler và có 36 đầu vào Do đó tổng cộng trong AMD64 có 04 Scheduler , tương đương với Pentium 4
ROB cũng cung cấp cho Register Renaming Cấu trúc lệnh CISC x86 có 08 thanh ghi 32-bit (EAX, EBX, ECX, EDX, EBP, ESI, EDI và ESP) Số này là quá ít , đặc biệt khi CPU thực hiện công việc kiểu OOO , nó sẽ phá huỷ nội dung của các thanh ghi và làm hỏng chương trình
Do đó ở tầng này bộ vi xử lí sẽ thay đổi tên và nội dung của những thanh ghi được dùng trong chương trình thành một trong 96 thanh ghi , trogn khi Pentium
4 có 128 thanh ghi Thế hệ thứ 6 bộ vi xử lí của Intel (Pentium II , Pentium III) chỉ có 40 thanh ghi trong
Một điều chú ý đó là một thủ thuật nhỏ trong cấu trúc AMD64 chỉ cần 96 thanh ghi trong Chúng tạo một cách đơn giản là một trường kết quả trong một hay
72 đầu vào của ROB để lưu trữ kết quả mỗi lệnh ( Pentium 4 không có việc này
; Pentium 4 cần chỉ định một thanh ghi bên trong để lưu trữ kết quả mỗi khi lệnhđược thực hiện ) Thêm vào đó File thanh ghi của nó ( hoặc IFFRF, Integer Future File and Register File, AMD gọi như vậy) có 40 đầu vào ( 16 trong số đó
để lưu trữ giá trị “correct” cho mỗi thanh ghi x86 , chúng có thể không dùng )
==> 72 + 40 -16 = 96