Bên trong cấu trúc AMD Bulldozer

AMD đã tiết lộ cấu trúc bộ vi xử lí mới sẽ bắt đầu được dùng trong những chiếc CPU mới của hãng này bắt đầu từ năm 2011.

1.     Giới thiệu:

AMD đã tiết lộ cấu trúc bộ vi xử lí mới sẽ bắt đầu được dùng trong những chiếc CPU mới của hãng này bắt đầu từ năm 2011. Cấu trúc này được gọi là Bulldozer hoàn toàn khác so với kiến trúc AMD64 hiện tại đang được AMD sử dụng kể từ lần ra mắt trong Athlon 64 hồi năm 2003. Trong bài này, chúng tôi sẽ giải thích chi tiết cho bạn về kiến trúc mới này và hoạt động của nó.

Cấu trúc Bulldozer sẽ thừa hưởng một số tính năng có trong cấu trúc AMD64, chẳng hạn như tích hợp Mạch điều khiển bộ nhớ và sử dụng bus HyperTransport để kết nối giữa CPU và chipset.

Bulldozer là tên mã được đặt cho kiến trúc này chứ không phải là cho một bộ vi xử lý cụ thể. Như thông lệ, đầu tiên AMD sẽ phát hành bộ vi xử lý nhằm vào thị trường máy chủ dựa trên kiến trúc mới này, sau đó là thị trường máy để bàn cao cấp, rồi đến các sản phẩm chủ đạo cho hệ thống để bàn , và cuối cùng là dành cho một thị trường giá rẻ.

Mặc dù không hề nói chi tiết về những CPU sẽ được phát hành nhưng AMD lại đề cập rằng những CPU đầu tiên cho máy để bàn dựa trên cấu trúc Bulldozer sẽ cần khe cắm mới được gọi là AM3+ mà cũng tương thích với bộ vi xử lý Socket AM3 hiện tại. Tuy nhiên, CPU dùng Socket AM3+ sẽ không tương thích với Motherboard Socket AM3.

Cấu trúc Bulldozer sẽ trang bị công nghệ tương tự với công nghệ Intel Turbo Boost, cho phép CPU tự Overclock nếu bạn đang chạy các chương trình chuyên sâu về CPU và nếu sự tản nhiệt vẫn đảm bảo trong thông số kỹ thuật.

Trước khi nói về những phần bên trong của kiến trúc Bulldozer, đầu tiên chúng ta hãy nói về tập lệnh mà cấu trúc này hỗ trợ.

2.     Tập lệnh

Ngoài việc tương thích với các tập lệnh x86 chuẩn, Bulldozer còn hỗ trợ những tập lệnh bổ sung dưới đây:

Ø  SSE4.1 và SSE4.2

Ø  AVX (Advanced Vector Extensions) cùng với 2 lệnh là XOP và FMA4

Ø  AES (Advanced Encryption Standard)

Ø  LWP (Light Weight Profiling)

 

Nhưng điều đó có nghĩa là gì? Chúng ta hãy cùng tìm hiểu.

SSE4.1 và SSE4.2

 Cuối cùng thì AMD CPU cũng sẽ hỗ trợ các lệnh SSE4. Những CPU của AMd hiện tại không hỗ trợ những tập lệnh này, những lệnh này giúp tăng tốc độ cho các ứng dụng truyền thông (xử lý hình ảnh và video). AMD CPU hiện tại hỗ trợ cho tập lệnh độc quyền mang tên SSE4a, không hề giống với SSE4.

 AVX (Advanced Vector Extensions)

 Cách đây không lâu, AMD đề xuất tập lệnh SSE5. Bởi vì Intel đã quyết định tự tạo ra tập lệnh AVX cũng gần tương tự như SSE5 nên AMD đã bổ sung tập lệnh này và Bulldozer.

Các lệnh AVX sẽ có mặt trong các CPU sắp ra mắt của Intel dựa trên cấu trúc Sandy Bridge, và sử dụng cùng khái niệm SIMD (Single Instruction Multiple Data) được giới thiệu với tập lệnh MMX và được dùng trong các lệnh SSE (Streaming SIMD Extensions) .

Khái niệm này bao gồm việc sử dụng một Thanh ghi lớn duy nhất để lưu trữ nhiều dữ liệu kích thước nhỏ và sau đó xử lý tất cả những dữ liệu này bằng một lệnh duy nhất, nhờ vậy mà tăng tốc được quá trình xử lý.

Tập lệnh AVX bổ sung 12 lệnh mới và tăng kích thước các Thanh ghi XMM từ 128-bit lên 256-bit.

Trong Bulldozer, AMD quyết định bổ sung một số lệnh mới mà đã có trong đề xuất ban đầu của tập lệnh SSE5 . Vì vậy, việc AVX trong cấu trúc Bulldozer hoàn chỉnh hơn trong cấu trúc của Intel. Những lệnh bổ sung này XOPFMA4.

Trong bài thuyết trình về Bulldozer, AMD đã công bố tập lệnh AVX cũng có lệnh con FMAC (Fused Multiply Accumulate), nhưng lệnh này chỉ là một phần của các lệnh XOP.

 AES ( Advanced Encryption Standard)

 Tập lệnh này đã sẵn được sử dụng trong CPU Intel mới, được dựa trên cấu trúc "Westmere" và những cấu trúc mới hơn (ngoại trừ Core i3), bao gồm 6 lệnh mới xử lý các công việc mã hoá . Intel gọi tập lệnh này là AES-NI.

 LWP (Light Weight Profiling)

 Ví dụ các lệnh LWP cho phép các chương trình dễ dàng theo dõi hiệu suất phần mềm, điều này giúp các nhà phát triển điều chỉnh chương trình để đạt được hiệu suất tối đa. Tập lệnh bổ sung này có 6 lệnh mới.

 3.     Sơ đồ khối CPU

AMD đã quyết định thực hiện một phương pháp mới hoàn toàn đối với Bulldozer mới này. Họ quyết định tạo ra một module "Dual-Core" chia sẻ cho nhiều nguồn (front-end engine, floating-point unit, và cache  L2, xem hình 1) và vì thế mà không hoàn toàn độc lập với nhau.

  \"\"

Hình 1: Khối hình thành Bulldozer.

 Theo AMD thì Bulldozer được tạo ra nhằm tối ưu hoá CPU và đồng thời cũng giảm chi phí. Việc tối ưu hoá này có xuất phát từ việc những CPU đa lõi thông thường có chứa nhiều khối nhàn rỗi, và những khối này sẽ được kết hợp lại với nhau trong Bulldozer . Bởi vì nếu CPU có ít khối hơn thì kích cỡ cũng sẽ nhỏ đi, điều này giúp giảm số lượng vật liệu cần thiết để tạo nên CPU, nhờ đó mà giảm được chi phí. Có ít khối hơn cũng giúp tiết kiệm năng lượng và giảm thiểu lượng nhiệt phát sinh.

Vì vậy mặc dù AMD gọi một chiếc CPU có một trong những module này là CPU "Dual-Core" nhưng trong thực tế, CPU không phải là một sản phẩm có lõi kép thực sự , bởi vì không có 2 CPU hoàn chỉnh trong một sản phẩm. Cái tên "Dual-Core" trong trường hợp này chỉ được sử dụng cho mục đích tiếp thị để đảm bảo rằng khách hàng có thể hiểu được mặc dù CPU dựa trên Bulldozer không phải là mẫu lõi kép nhưng nó vẫn hoạt động với hiệu suất tương tự.

Hơn thế nữa, đối với việc tạo ra CPU "Quad-Core", AMD sẽ đặt 2 khối này lại với nhau, vì vậy về vật lí thì bộ vi xử lý này thực sự có 2 CPU bên trong (2 trong số các khối trong hình 1), đồng thời cho dù không phải là 4 nhưng AMD vẫn gọi nó là một sản phẩm "4 lõi". Trong hình 2, bạn có thể thấy 1 chiếc CPU "8 lõi" dựa trên cấu trúc Bulldozer trông như thế nào.

   \"\"

Hình 2: CPU 8 lõi dựa trên cấu trúc Bulldozer.

 Bây giờ chúng ta hãy tìm hiểu kĩ hơn về các bộ phận Fetch và Decode được sử dụng trong Bulldozer.

 Các bộ phận Fetch và Decode

 Fetch chịu trách nhiệm việc nhận lệnh tiếp theo từ RAM hoặc cache nhớ để giải mã. Để biết thêm chi tiết, bạn nên đọc thêm bài hướng dẫn "CPU hoạt động như thế nào" và "Bộ nhớ cache hoạt động như thế nào".

  \"\" 

Hình 3: Các khối Fetch và Decode.

 Như đã nói trong phần trước, Fetch được chia sẻ bởi 2 "lõi" có sẵn trong mỗi module Bulldozer. Cache lệnh L1 cũng được chia sẻ cho 2 "lõi" bởi vì đây là một bộ phận cần thiết của Fetch, nhưng mỗi một "lõi" CPU lại có Cache dữ liệu L1 của riêng nó. Thật thú vị khi AMD đã từng thông báo rằng Cache lệnh L1 sử dụng trong Bulldozer là bộ nhớ Cache 64KB 2-way, và cùng cấu hình với cấu hình CPU sử dụng trong cấu trúc AMD64. Mặc dù vậy sự khác nhau ở chỗ trong khi CPU AMD64 có một bộ nhớ Cache L1 ở mỗi lõi thì những CPU Bulldozer lại có một bộ nhớ  Cache L1 ở mỗi cặp lõi. Tuy nhiên, Cache dữ liệu dùng trong mỗi  "lõi" sử dụng lại chỉ có 16KB, nó tương đối nhỏ hơn so với 64KB/ 1 lõi tỏng CPU dựa trên cấu trúc AMD64 .

Vào thời điểm này này, AMD đã không công bố kích cỡ BTB (Branch Target Buffers) của Bulldozer, đây là một bộ nhớ nhỏ liệt kê ra tất cả các nhánh được xác định trong chương trình, nó được sử dụng bởi cơ chế dự đoán rẽ nhánh của CPU.

Tuy nhiên, kích thước của TLB (Translation Look-aside Buffers) lại được công bố như trong hình 3. Những bộ đệm này đều là một bộ nhớ nhỏ để giúp chuyển đổi giữa các địa chỉ ảo và địa chỉ vật lí, chúng chủ yếu được sử dụng bởi các mạch bộ nhớ ảo (bộ nhớ ảo hay trao đổi File , chính là một kỹ thuật mà CPU mô phỏng nó có nhiều bộ nhớ RAM hơn lượng thực tế mà bạn đã cài đặt bằng cách dùng File nháp trong ổ cứng).

 Các chương trình PC được viết bằng việc sử dụng các lệnh x86, nhưng ngày nay CPU Execution lại chỉ hiểu được các lệnh như kiểu RISC. Vì vậy, nhiệm vụ của khối Decode chính là chuyển đổi các lệnh x86 của các chương trình thành các vi lệnh như RISC, là một loại lệnh mà khối Execution của CPU có thể hiểu được.

Bulldozer có 4 bộ giải mã ( Decoder ) nhưng tới thời điểm này, AMD vẫn không đưa ra thông tin về bộ giải mã nào có thể xử lý được loại lệnh nào. Thông thường, ít nhất một bộ giải mã có thể giải quyết được những lệnh riêng biệt đầy phức tạp dựa trên những vi lệnh ROM ( “Ucode” hoặc được đọc hoặc ghi là “µcode”, hoặc “microcode” ) . Việc giải mã những lệnh phức tạp này có thể tốn đến vài chu kì đồng hồ vì chúng phải chuyển đổi thành nhiều vi lệnh. Tuy nhiên, những chỉ lệnh đơn giản thường chỉ mất 1 chu kì đồng hồ chuyển đổi vì chúng sẽ được chuyển thành một vi lệnh duy nhất. Thông thường thì các nhà sản xuất bộ vi xử lý sẽ tối ưu hoá để CPU của họ có thể giải mã được hầu hết các lệnh chỉ bằng 1 chu kì xung nhịp đồng hồ.

 Các khối Execution

 Sau khi các lệnh được giải mã, chúng được gửi tới Scheduler tương ứng , Integer Scheduler hoặc Floating-Point Scheduler .

Cấu trúc Bulldozer chỉ có một khối Floating-Point được chia sẻ giữa 2 "lõi". Mặt khác, nó lại có 2 khối Interger hoàn toàn độc lập và do đó được gọi là "lõi".

  \"\"

Hình 4: Các khối Execution

 Mỗi một Interger Engine đều có 4 đơn vị Execution đó là:

 

Ø  EX, MUL: có thể thực hiện bất kì một loại lệnh số nguyên nào, bao gồm cả phép tính nhân, nhưng không làm phép chia.

Ø  EX, DIV: có thể thực hiện được bất cứ loại lệnh số nguyên nào, bao gồm cả phép chia, nhưng không làm phép nhân.

Ø  AGen: hay được gọi là AGU hoặc Address Generation Unit được sử dụng để tạo ra các địa chỉ mà CPU nhận hoặc lưu trữ dữ liệu.

 Ngoài ra còn có đơn vị Load/Store ("Ld/ST") chịu trách nhiệm nhận hoặc lưu trữ vào bộ nhớ một dữ liệu mà một lệnh yêu cầu. Thông thường, bộ này đặt cạnh các bộ phận được liệt kê ở trên nhưng , AMD lại đề riêng.

 Cấu trúc Bulldozer sử dụng một cơ chế thực thi lệnh không đúng trình tự ( out-of-order execution engine - OOO ) , giống như những CPU AMD64 và CPU Intel kể từ Pentium Pro ( cấu trúc P6). Bởi vì không phải tất cả các bộ phận thực thi ( Excution ) lệnh đều có thể xử lý được tất cả các loại lệnh, vì vậy nếu không có cơ chế OOO thì đôi khi một số khối Execution sẽ rơi vào trạng thái nhàn rỗi.

Khi một lệnh tiếp theo được thực hiện là một phép chia số nguyên, nhưng khối có thể giải quyết được  lệnh này lại đang bận giải quyết một chỉ lệnh khác, thì thay vì chờ đợi đến lúc khối đó rỗi, Scheduler  sẽ tìm kiếm một lệnh có thể thực hiện ngay, tất nhiên nếu có các khối rỗi. Vì vậy, vai trò của Scheduler chính là giữ cho tất cả các khối Execution càng bận càng tốt.

 Sau khi các lệnh số nguyên được giải quyết, chúng được gửi tới bộ phân Retire , tại đây CPU sắp xếp lại vị trí đúng cho chúng.

 Floating-point Unit cũng có 4 khối Execution đó là:

 

Ø  MMX: có thể thực hiện được tất cả các chỉ lệnh dấu phẩy động cơ bản (các lệnh x87), gồm cả MMX.

Ø  128-bit FMAC: có thể thực hiện được tất cả các lệnh dấu phẩy động.

 \"\" 

Hình 5: Khối dấu phẩy động

 Bộ nhớ  Cache L2

 Cứ 2 "lõi" trong cấu trúc Bulldozer đều có bộ nhớ  Cache L2 dùng chung . Cache nhớ L3 cũng sẵn sàng để chia sẻ giữa tất cả các "lõi".

Bộ nhớ  Cache L2 với liên kết 16-way và TLB (Translation Look-aside Buffer) 1024-entry.

  \"\"

Hình 6: Cache nhớ L2

 Quản lý năng lượng

 AMD đã bổ sung thêm một số tính năng thú vị để quản lý năng lượng trong Bulldozer, và tính năng quan trọng nhất chính là "Power Gating", giúp tiết kiệm năng lượng bằng cách cắt giảm năng lượng từ những khối CPU không hoạt động. Đồng thời, CPU cũng sẽ tắt hoàn toàn bất cứ một "lõi" CPU nào không hoạt động.

AMD cũng bổ sung một tính năng để đo đạc các hoạt động của CPU nhằm đánh giá năng lượng hao phí. AMD đang bổ sung thêm một công nghệ tương tự với Turbo Boost của Intel, giúp tự động tăng tốc CPU nếu sự tản nhiệt vẫn đảm bảo trong thông số kỹ thuật.

  \"\"

Hình 7: Quản lý năng lượng

\"\"\"\"\"\"