Cấu trúc bên trong của Pentium M

1. Giới thiệu   Pentium M dựa trên cấu trúc của Intel thuộc thế hệ thứ 6 ,P6, như Pentium Pro , Pentium II , Pentium III nhưng không phải là Pentium 4 như chúng ta suy nghĩ , chúng được hướng tới sản phẩm của máy tính xách tay .

Chúng ta có thể nghĩ Pentium M là nâng cao của Pentium III . Một điều chúng ta khôgn nên lộn xộn Pentium M là Pentium 4 M hoặc Pentium III M .

Những ý tưởng trong cấu trúc của Pentium M đã tạo nên vi cấu trúc Core nổi tiếng về sau .

 
Đã một vài lần Pentium M được gọi là Centrino . Centrino được gọi trong máy tính xách tay gồm : bộ vi xử lí Pentium M , Chipset từ Intel 855 hoặc 915 và có ntel/PRO wireless LAN . Do đó nếu bạn có máy tính xách tay dựa trên Pentium M nhưng lại không có Intel/PRO wireless LAN thì không được gọi là Centrino .
 
Chúng ta sẽ giải thích cấu trúc P6 và những cái mới giữa Pentium M và Pentium III . Để hiểu thêm bạn cũng có thể xem bài " CPU làm việc như thế nào " trước đã .
 
Trước khi nói thêm những vấn đề khác chúng ta sẽ xem sự khác nhau chính giữa bộ vi xử lí của Pentium M và Pentium III
 
  • Về bên ngoài , Pentium M làm việc như Pentium 4 , truyền bốn số liệu trong một chu kì đồng hồ . Công nghệ này được gọi là QDR (Quad Data Rate) , chúng ta có thể xem bảng dưới đây

     

    Real Clock

    Performance

    Transfer Rate

    100 MHz

    400 MHz

    3.2 GB/s

    133 MHz

    533 MHz

    4.2 GB/s

     

  • Bộ nhớ cache L1 : bộ nhớ cache lệnh L1 32KB , bộ nhớ cache dữ liệu L1 32 KB ( Pentium 3 thì mỗi phần chỉ có 16KB ).
  • Bộ nhớ cache L2 : 1MB cho kiểu 130nm ( nhân "Banias" ) hoặc 2MB cho kiểu 90nm ( nhân "Dothan") . Pentium III chỉ có tới 512KB . Celeron M mà có giá thấp hơn Pentium M có 512KB cache L2.
  • Hỗ trợ tập lệnh SSE2 .
  • Cải tiến phần dự đoán nhánh - Advanced branch prediction : mạch điện dự đoán phân nhánh được thiết kế lại ( dựa trên mạch dự đoán phân nhánh của Pentium 4 )  để tăng hiệu suất công việc.
  • Hợp nhất Micro-ops : phần giải mã lệnh hợp nhất hai Micro-ops thanh một Micro-ops để tiết kiệm năng lượng và nâng cao hiệu suất công việc .
  • Công nghệ Enhanced SpeedStep Technology : cho phép CPU giảm tốc độ xung nhịp trong khoảng thời gian nghỉ để tiết kiệm Pin .
  • Một vài đặc điểm để tiết kiệm năng lượng được thêm vào vi cấu trúc của Pentium M

2. Pipeline của Pentium M

Pipeline là danh sách của tất cả các tầng để một lệnh phải đi qua theo một thứ tự để thực hiện đầy đủ . Intel không giới thiệu Pipeline của Pentium M , nên chúng ta sẽ xem Pipeline của Pentium III . Pipeline của Pentium M có thể nhiều tầng hơn một ít so với Pipeline của Pentium III , nhưng theo phân tích Pipeline của Pentium III là một ý tưởng rất tuyệt vời trong cấu trúc của Pentium M .
 
Như chúng ta đã nói tới Pentium 4 có Pipeline là 20 tầng và trong Pentium 4 dựa trên nhân "Prescott" có 31 tầng .
 
Hình dưới đây chúng ta xem Pipeline 11 tầng của Pentium 3
 
  • IFU1 : tải một dòng (32 byte là 256 bit) từ cache lệnh L1 và lưu trữ chúng trong Instruction Streaming Buffer .
  • IFU2 : nhận dạng những lệnh bên trong 16 byte (128 bit) . Những lệnh x86 không có độ dài cố định , những đánh dấu trong tầng này ở đó xác định sự bắt đầu và kết thúc của lệnh trong 16 byte được tải . Nếu có bất kỳ lệnh rẽ nhánh nào bên trong 16 byte này , địa chỉ của nó được lưu trữ vào Branch Target Buffer (BTB) do đó CPU sau này có thể dùng thông tin này trong mạch dự đoán rẽ nhánh của nó .
  • IFU3 : những lệnh được đánh dấu sẽ được gửi tới phần giải mã lệnh (decoder unit) . Có ba giải mã lệnh ( instruction decoder units ) khác nhau sẽ được đề cập sau .
  • DEC1 : giải mã những lệnh x86 thành những vi lệnh RISC ( hay còn gọi là Micro-op ) .Trong CPU có ba phần giải mã lệnh (instructions decode units) khác nhau nên nó có thể thực hiện ba lệnh trong cùng một lúc .
  • DEC2 : gửi những Micro-op tới phần thứ tự lệnh đã được giải mã ( Decoded Instruction Queue ) ở đó có thể lưu trữ được nhiều hơn 6 Micro-op . Nếu lệnh chuyển đổi có nhiều hơn 6 micro-op thì tầng này phải lặp lại để giữ lại những micro-op còn lại .
  • RAT : trong vi cấu trúc P6 bổ sung việc thực hiện OOO (Out-Of-Order) , giá trị của thanh ghi được đưa ra có thể được sử đổi bằng lệnh thực hiện trước khi nó là “correct” ( trong tiến trình của chương trình gốc ) , nó có thể làm cho số liệu bị tranh chấp bởi chương trình khác . Để giải quyết vấn đề tranh chấp ở trong tầng này thanh ghi gốc được dùng bởi lệnh thay đổi một trong 40 thanh ghi bên trong vi cấu trúc P6 .
  • ROB : tầng này có ba Micro-op được tải vào Reorder Buffer (ROB). Nếu tất cả dữ liệu cần thiết để thực hiện lệnh của Micro-op được sẵn sàng  và nếu  Micro-op được sắp hàng ở Reservation Station mở ra , thì Micro-op sẽ được chuyển tới và sắp hàng ở đó .
  • DIS : nếu Micro-op không gửi để sắp hàng ở Reservation Station thì công việc diễn ra ở tầng này . Micro-op được gửi tới Execution unit thích hợp .
  • EX : Micro-op được thực hiện ở Execution unit thích hợp  . Thông thường mỗi Micro-op cần một chu kì đồng hồ để thực hiện lệnh .
  • RET1: kiểm tra ở Reorder Buffer nếu có bất kì Micro-op mà có thể có Flag là “executed” .
  • RET2: khi tất cả micro-op liên quan đến lệnh x86 trước đã được chuyển từ Reorder Buffer và tất cả micro-op liên quan tới lệnh x86 hiện tại đã được thực hiện , thì những micro-op đã được chuyển từ Reorder Buffer và những thanh ghi x86 được update (quá trình ngược làm việc lại với RAT ) . Quá trình lùi lại phải làm theo thứ tự . Cứ ba Micro-op được chuyển đi từ Reorder Buffer theo một chu kì đồng hồ .
3. Bộ nhớ Cache và Fetch Unit
 
Như chúng ta đẫ đề cập , Pentium M có bộ nhớ cache L2 là 1MB (130nm , nhân Banias ) hoặc 2MB (90nm , nhân Dothan ) , trong khi có bộ nhớ cache lệnh L1 là 32 KB và cache dữ liệu 32KB .
 
Fetch Unit được chia thành 3 tầng , như chúng ta đã nói ở Phần 1 . Hình dưới đây chúng ta xem Fetch Unit của Pentium M
 
 
Fetch Unit tải một dòng gồm 32 byte (256 bit) vào Instruction Streaming Buffer .
Sau đó Instruction Length Decoder nhận dạng biên giới của lệnh trong 16 byte (128 bit ) , tìm điểm bắt đầu và kết thúc một lệnh . Những lệnh x86 không có độ dài cố định nên tầng này đánh dấu vị trí bắt đầu và kết thúc bên trong 128 bit đã được tải . Nếu có bất kì lệnh rẽ nhánh bên trong 128 bit nó sẽ lưu trữ địa chỉ vào Branch Target Buffer (BTB), do đó CPU có thể dùng những thông tin này về sau trong mạch điện Dự báo rẽ nhánh . BTB có 512 đầu vào .
 
Sau đó tầng Decoder Alignment Stage đánh dấu những lệnh được gửi đi tới Instruction Decoder Unit (IDU) . Có ba IDU khác nhau , chúng ta sẽ giải thích tiếp theo .
 
4. Instruction Decoder và Register Renaming
 
Từ cấu trúc P6 của bộ vi xử lí Pentium Pro dùng cấu trúc ghép CISC/RISC . Bộ vi xử lí phải chấp nhận lệnh CISC , cũng được gọi là lệnh x86 , hầu hết những phần mềm có sẵn đều sử dụng loại lệnh này . Bộ vi xử lí chỉ có RISC không chạy được những phần mềm như Windows , Office ...
 
Do đó giải pháp dùng trong tất cả bộ vi xử lí hiện nay của AMD và Intel đều dùng bộ giải mã CISC/RISC (CISC/RISC Decoder) . Bên trong bộ vi xử lí chỉ xử lí lệnh RISC , nhưng đầu vào chỉ có lệnh CISC x86 .
Lệnh CISC x86 được gọi là "lệnh" , những lệnh RISC bên trong gọi là "vi lệnh" hoặc “micro-ops” hoặc “µops”.
 
Những vi lệnh RISC bằng cách nào đi nữa cũng không thể truy cập trực tiếp , do đó chúng ta không thể lập phần mềm dựa trên lệnh này để bỏ qua phần Decoder . Mỗi một bộ vi xử lí dùng những lệnh RISC và chúng không tương thích với bộ vi xử lí khác . Có nghĩa là vi lệnh của Pentium M khác vi lệnh của Pentium 4 và cũng khác vi lệnh của Athlon64 .
 
Phụ thuộc vào độ phức tạp của lệnh x86 mà nó được chuyển đổi thành vài vi lệnh RISC .
 
Hình dưới đây cho chúng ta thấy phần giải mã lệnh ( Instruction Decoder ) của Pentium M.
 
 
Chúng ta thấy có 03 Decoder và Micro Instruction Sequencer (MIS) . Hai Decoder đã được giành cho những lệnh đơn giản mà đa phần được sử dụng . Những lệnh kiểu này thông thường được chuyển thành một vi lệnh . Một Decoder được giành cho lệnh x86 phức tạp , mà có thể chuyển đổi tới 04 vi lệnh . Nếu lệnh x86 quá phức tạp khi chuyển đổi nhiều hơn 04 vi lệnh , nó sẽ được gửi tới Micro Instruction Sequencer , ở đó bộ nhớ ROM sẽ bao gồm những danh sách của vi lệnh sẽ thay thế lệnh x86 .
 
Giải mã lệnh  (Instruction Decoder) có thể chuyển đổi 03 lệnh x86 trong một chu kì đồng hồ  , 01 phức tạp ở Decoder , 02 đơn giản ở Decoder 1 và Decoder 2 . Những lệnh sau khi chuyển đổi được chuyển tới Decoded Instruction Queue có thể sắp hàng 06 vi lệnh trong một chu kì đồng hồ .
Có thể diễn ra như sau : khi Decoder 0 gửi 04 vi lệnh và hai Decoder khác , mỗi decoder này gửi một vi lệnh - hoặc khi MIS được sử dụng . Những lệnh x86 rất phức tạp mà phải dùng tới Micro Instruction Sequencer có thể chậm vài chu kì đồng hồ để được giải mã , nó phụ thuộc vào có bao nhiêu vi lệnh được hình thành sau khi giải mã .
 
Pentium M dùng một khái niệm mới gọi là hợp nhất vi lệnh . Trong Pentium M phần Decoder Unit hợp nhất hai vi lệnh thành một . Chúng sẽ được tách ra chỉ khi thực hiện lệnh ở tầng thực hiện .
 
Trong cấu trúc P6 mỗi một vi lệnh dài 118-bit . Trong Pentium M thay thế làm việc 118-bit vi lệnh bằng làm việc vi lệnh có độ dài 236-bit , bằng hai lần vi lệnh 118-bit .
 
Đằng sau quan điểm trên là sự tiết kiệm năng lượng và tăng hiệu quả công việc . Khi gửi gửi vi lệnh có độ dài 236-bit nhanh hơn gửi hai vi lệnh có độ dài 118-bit . Cũng như thế CPU sẽ tiêu hao năng lượng ít hơn vì ít vi lệnh sẽ được quay vòng bên trong nó .
 
Vi lệnh được hợp nhất sẽ được gửi tới Register Allocation Table (RAT) . Cấu trúc CISC x86 chỉ có 08 thanh ghi 32-bit (EAX, EBX, ECX, EDX, EBP, ESI, EDI và ESP) . Số này là quá ít , đặc biệt trong trường hợp CPU thực hiện đoạn mã OOO sẽ làm hỏng nội dung của những thanh ghi dẫn đến làm hỏng chương trình đang chạy .
do đó tầng này có nhiệm vụ thay đổi tên và nội dung thanh ghi dùng trong chương trình thành một trong 40 thanh ghi bên trong ( mỗi thanh ghi có độ dài 80-bit ) cho phép lệnh chạy cùng thời gian với lệnh khác mà sử dụng cùng thanh ghi chuẩn hoặc thậm chí OOO , có nghĩa là nó cho phép lệnh thứ hai chạy trước lệnh thứ nhất thậm chí chúng trên cùng một thanh ghi chuẩn .
 
5. Reorder Buffer - ROB
 
Những lệnh x86 được chuyển đổi thành những vi lệnh thông qua những tầng của CPU theo một thứ tự như trong chương trình đang được chạy , chúng được chuyển vào bên trong ROB . Những vi lệnh có thể được tải và thực hiện OOO bằng những Execution Unit . Sau khi thực hiện xong , những lệnh được chuyển quay trở lại ROB .
Tại tầng Retirement , những vi lệnh đã thực hiện được kéo ra khỏi ROB theo thứ tự như chúng đã vào , có nghĩa là chúng chuyển ra khỏi thứ tự .
 
Hình dưới đây có thể cho chúng ta hình ảnh tốt hơn về công việc
 
 
Để đơn giản hoá chúng ta hiểu về ROB là  Reservation Station và những Execution Unit .
 
6. Reservation Station và Execution Unit
 
Như chúng ta đã đề cập trước đó , Pentium M dùng hợp nhất vi lệnh ( có nghĩa là mang hai vi lệnh cùng một lúc ) từ Decode Unit tới vị trí cổng Dispatch ( cổng gửi đi ) trên Reservation Station . Reservation Station sẽ gửi đi mỗi một vi lệnh riêng biệt ( giải hợp nhất ).
Pentium M có 5 cổng gửi đi ( Dispatch Port ) được đánh số thứ tự từ 0 đến 4 . Mỗi một cổng được nối tới một hoặc nhiều Execution Unit , bạn có thể xem hình dưới đây :
 
 
  • IEU - Instruction Execution Unit : những lệnh thông thường được thực hiện ở đây . Nó cũng được gọi là ALU (Arithmetic and Logic Unit) . Những lệnh thông thường như là những lệnh về số nguyên .
  • FPU - Floating Point Unit : những lệnh toán phức tạp được thực hiện . Ngày trước phần này được gọi là “math co-processor”.
  • SIMD : những lệnh SIMD được thực hiện như MMX, SSE và SSE2.
  • WIRE : những chức năng hỗn hợp khác .
  • JEU - Jump Execution Unit: sử lí những rẽ nhánh cũng được gọi là Branch Unit .
  • Shuffle : thực hiện những kiểu lệnh SSE được gọi là “shuffle”.
  • PFADD : thực hiện những kiểu lệnh SSE gọi là PFADD (Packed FP Add) và những lệnh COMPARE, SUBTRACT, MIN/MAX , CONVERT . Nó có thể bắt đầu thực hiện một vi lệnh mới ở mỗi một chu kì đồng hồ thậm trí nếu nó không hoàn thành thực hiện vi lệnh trước . Phần này trễ 03 chu kì đồng hồ của xung nhịp .
  • Reciprocal Estimates : thực hiện hai lệnh của tập lệnh SSE , một lệnh gọi là RCP (Reciprocal.Estimate) và một lệnh khác gọi là RSQRT (Reciprocal Square Root Estimate).
  • Load : phần này xử lí những lệnh mà yêu cầu dữ liệu được đọ từ bộ nhớ hệ thống RAM .
  • Store Address : phần này xử lí những lệnh mà yêu cầu dữ liệu để ghi vào bộ nhớ hệ thống RAM . Phần này cũng được biết như là AGU, ( Address Generator Unit ) . Những lệnh dùng cả hai  Store Address và phần Store Data cùng một thời gian.
  • Store Data : phần này xử lí những lệnh mà yêu cầu dữ liệu để ghi vào bộ nhớ hệ thống RAM . Những lệnh dùng cả hai  Store Address và phần Store Data cùng một thời gian .
Một điều chúng ta nên nhớ rằng những lệnh phức tạp có thể mất vài chu kì đồng hồ để xử lí .
Lấy ví dụ ở cổng 0 , ở đó là vị trí của FPU . Trong khi FPU đang xử lí lệnh rất phức tạp mất vài chu kì đồng hồ để thực hiện , thì cổng 0 không bị ngăn lại , nó sẽ giữ và gửi những lệnh đơn giản tới IEU trong khi FPU bận .
 
Do đó mặc dầu tốc độ gửi lớn nhất là 05 vi lệnh trong một chu kì đồng hồ nhưng trên thực tế CPU có thể có 12 vi lệnh đang được thực hiện cùng một lúc .
 
Như chúng ta đã đề cập những lệnh yêu cầu CPU đọc những dữ liệu được lưu trữ tại địa chỉ trong bộ nhớ hệ thống RAM , Store Address Unit và Store Data Unit sẽ được sử dụng cùng một lúc , một để tính toán địa chỉ và một để đọc dữ liệu .
 
Trên thực tế đó là nguyên nhân tại sao mà cổng 0 và cổng 1 lại có nhiều Execution Unit gắn vào . Nếu chúng ta chú ý , Intel đặt trên cùng một cổng một ALU cùng với một FPU , đo đó trong khi FPU bận xử lí số liệu thì ALU vẫn có thể nhận vi lệnh để thực hiện lệnh ==>> đó chính là quan điểm luôn luôn giữ cho hệ thống cùng làm việc trên tất cả thời gian .
 
Sau khi mỗi một vi lệnh được thực hiện , nó sẽ quay trở về tới Reorder Buffer (ROB) ở đó Flag của nó thiết lập là “executed” . Sau đó ở tầng Retirement Stage , những vi lệnh mà có flag là “executed” sẽ được chuyển khỏi ROB ( có nghĩa là chúng đã được giải mã xong ) và những thanh ghi x86 được update ( bước ngược lại của Register Renaming Stage) . Có thể có tới 03 vi lệnh chuyển khỏi ROB trong một chu kì đồng hồ . Sau quá trình trên lệnh đã được thực hiện hoàn tất .
 
7. Công nghệ Enhanced SpeedStep
 
Công nghệ SpeedStep được tạo ra nhằm tăng cường khả năng sử dụng Pin được lâu dài , nó là công nghệ đầu tiên được giới thiệu trong Pentium M .
Kiểu đầu tiên của công nghệ SpeedStep cho phép CPU chuyển giữa hai tần số làm việc :
 
Đầu tiên của công nghệ SpeedStep được giới thiệu trong bộ vi xử lí , cho phép CPU làm việc với hai tốc độ xung nhịp .
Low Frequency Mode (LFM) kiểu làm việc của CPU với tốc độ xung nhịp thấp cho phép thời gian sử dụng Pin trang máy tính xách tay tăng lên .
High Frequency Mode (HFM) kiểu làm việc của CPU với tốc độ xung nhịp theo đúng tính năng kĩ thuật của nó , làm cho máy tính chạy nhanh hơn nhưng thời gian sử dụng Pin giảm xuống .
Trong hệ thống cho phép người sử dụng thay đổi tỉ lệ giữa LFM và HFM .
Pentium M giới thiệu tính năng mới hơn so với SpeedStep là công nghệ Enhanced SpeedStep . Công nghệ này tiến xa hơn một chút là cho phép làm việc với một vài tốc độ xung nhịp khác nhau giữa LFM ( giá trị LFM cố định 600MHz ) và HFM ( CPU chạy đúng với tốc độ của xung nhịp ).
 
Bảng dưới đây cho bạn biêt thực tế về điện áp làm việc tương ứng tốc độ xung nhịp của Pentium M 1.6Ghz sử dụng công nghệ 130nm khi có Enhanced SpeedStep.
 

 

Voltage

Clock

1.484 V

1.6 GHz

1.42 V

1.4 GHz

1.276 V

1.2 GHz

1.164 V

1 GHz

1.036 V

800 MHz

0.956 V 

600 MHz

 

Mỗi một kiểu Pentium M sẽ có một bảng về quan hệ giữa điện áp với tốc độ xung nhịp giống như trên . Bạn cần chú ý rằng khi máy tính của bạn không cần sử dụng nhiều đến công suất tính toán thì tốc độ xung nhịp giảm xuống , đồng thời điện áp nuôi giảm xuống và mức tiêu hao năng lượng giảm xuống .

Công nghệ Enhanced SpeedStep làm việc dưới sự theo dõi của MSRs (Model Specific Registers) từ CPU gọi là Performance Counters . Theo những thông tin này mà CPU có thể giảm tốc độ xung nhịp và điện áp nuôi tuỳ thuộc quá trình sử dụng CPU .
Nếu bạn sử dụng CPU ít thì sẽ giảm điện áp và tốc độ xung nhịp . Nếu bạn sử dụng CPU nhiều nó sẽ tăng điện áp và tốc độ xung nhịp .
 
Enhanced SpeedStep là một trong vài kiểu cải tiến để tăng hiệu quả sử dụng Pin trong vi cấu trúc Pentium M .
 
Một trong những ví dụ đã được thực hiện trong những Execution Unit . Đối với một số bộ vi xử lí khác nguồn cung cấp cùng một lúc cho tất cả Execution Unit và không thể ngắt nguồn này khi Execution nghỉ như Pentium 4 .
Đối với Pentium M những Execution Unit được cung cấp nguồn theo những đường khác nhau và sẽ ngắt nguồn này khi Execution Unit tương ứng không làm việc .
 
 
\"\"