Bên trong vi cấu trúc Intel Nehalem , phần 2

Vi cấu trúc Core cũng thêm Loop Stream Detector ( LSD ) , về cơ bản nó là bộ nhớ Cache chứa 18 lệnh nằm ở giữa Bộ phận Lấy dữ liệu ( Fetch ) và Bộ phận Giải mã ( Decode ) từ CPU .
Vi cấu trúc Core cũng thêm Loop Stream Detector ( LSD ) , về cơ bản nó là bộ nhớ Cache chứa 18 lệnh nằm ở giữa Bộ phận Lấy dữ liệu ( Fetch ) và Bộ phận Giải mã ( Decode ) từ CPU . Khi CPU đang chạy vòng lặp ( Loop – là một phần của chương trình được lặp đi lặp lại vài lần ) , CPU không cần lấy những lệnh yêu cầu một lần nữa từ Bộ nhớ Cache lệnh L1 : chúng đã sẵn sàng gần bộ phận Decode . Trên thực tế khi ấy CPU sẽ tắt Bộ phận Fetch và Dự đoán rẽ nhánh để tiết kiệm năng lượng .

 Với những bộ vi xử lí dựa vào Nehalem thì LSD được chuyển tới phái sau Bộ phận Decode . Do vạy thay vì giữ những lệnh x86 như trong những CPU Core 2 thì nó sẽ giữ những lệnh Micro-Ops ( 28 lệnh như vậy ) . Như vậy hiệu suất làm việc được cải tiến , bởi vì khi CPU đang chạy vòng lặp : chúng đã được giải mã rồi và những lệnh đó nằm bên trong LSD . Như vậy CPU giờ đây khi chạy vòng lặp nó có thể tắt thêm cả Bộ phận Decode bên cạnh Fetch và Bộ phận dự đoán rẽ nhánh và điều đó sẽ tiết kiệm điện năng hơn nữa .

\"\" 

Hình 6 : Vị trí của LSD trong những CPU Core và Nehalem

Cấu trúc Nehalem thêm một cổng Gửi dữ liệu ( Dispatch ) phụ và bây giờ có 12 Bộ phận thự hiện lệnh ( Execution Unit ) , xem hình dưới .  Với những CPU dựa vào cấu trúc này có thể có nhiều Vi lệnh được thực hiện cùng một lúc hơn so với những CPU trước kia .

 

 \"\"

Hình 7 : Những cổng Dispatch và những Bộ phận thực hiện lệnh ( Execution Unit )

Vi cấu trúc Nehalem cũng thêm hai bộ đệm phụ : TLB ( Translation Look-aside Buffer) thứ hai với 512-Entry và BTB ( Brach Target Buffer ) thứ hai . Việc tăng bộ đệm này khiến cho hiệu suất làm việc của CPU tăng lên .

TLB là bảng dùng để chuyển đổi giữa Địa chỉ Vật lí và những Địa chỉ Ảo  bằng Mạch điện bộ nhớ Ảo . Bộ nhớ Ảo là kỹ thuật mà CPU mô phỏng nhiều bộ nhớ RAM thành những File nằm trên ổ cứng ( hay còn gọi là Swap File ) để cho phép máy tính tiếp tục hoạt động ngay cả khi không có đủ bộ nhớ RAM . Trong trường hợp không đủ bộ nhớ RAM để lưu trữ , dữ liệu sẽ được lưu trữ tạm thời trên ổ cứng nên nó được mô phỏng như là bộ nhớ RAM để sử dụng .

Dự đoán Rẽ nhánh ( Branch Prediction ) là mạch điện mà có nhiệm vụ cố gắng phỏng đoán những bước tiếp theo của chương trình theo hướng tiến về phía trước , tải vào bên trong CPU những lệnh mà nó nghĩ rằng CPU sẽ tải theo bước tiếp theo . Nếu việc phỏng đoán là chính xác thì CPU sẽ không mất thời gian lãng phí để tải những lệnh này từ bộ nhớ vì chúng đã nằm bên trong CPU . Việc tăng kích thước ( hoặc thêm Bộ đệm thứ hai , trong những CPU Nehalem ) của BTB cho phép mạch điện này tải nhiều lệnh hơn và điều đó tăng việc phỏng đoán những bước tiến hành tiếp theo của CPU hơn và cũng đồng nghĩa với việc cải thiện hiệu suất làm việc của CPU .

Cải tiến Quản lí công suất

Những Transistor bên trong CPU làm việc như một cái Công tắc ( Switch ) với hai trạng thái

  • Dẫn điện , khi ấy nó làm việc như là Công tắc được đóng để cho phép dòng điện đi qua
  • Không dẫn điện , Công tắc mở không cho phép dòng điện đi qua .

Có một vấn đề đó là khi Switch làm việc ở trạng thái Không dẫn điện , theo lí thuyết chúng sẽ không cho phép bất kì dòng điện nào đi qua , nhưng thực tế vẫn còn có dòng diện có cường độ nhỏ đi qua . Dòng điện này gọi là hiện tượng dò điện và nếu cộng tất cả những dòng điện dò này lại thì sẽ có một kết quả khá lớn và như vậy sẽ gây lãng phí điện năng vào tạo ra những nhiệt lượng không cần thiết . Một trông những thchs thức trong thiết kế CPU hiện nay đó là cố gắng loại trừ dòng điện dò .

Nehalem có Bộ phận điều khiển năng lượng PCU ( Power Control Unit ) bên trong để quản lí năng lượng tốt hơn ( xem Hình 8 ) . Bộ phận này làm giảm lượng điện dò và cũng cho phép “Turbo Mode” mới . Về cơ bản CPU có thể cung cấp những điện áp và tần số làm việc khác nhau cho mỗi lõi , cho những Bộ phận bên ngoài lõi , cho Bộ phận điều khiển bộ nhớ , cho bộ nhớ Cache và cho những Bộ phận I/O .

Những CPU trước kia của Intel , tất cả lõi phải chạy cùng một tốc độ xung nhịp nhưng trong Nehalem mõi lõi có thể được lập trình để chạy những tốc độ xung nhịp khác nhau để tiết kiệm năng lượng .

 \"\"

Hình 8 : Bộ phận điều khiển năng lượng - PCU

Vì tích hợp PCU nên bây giờ nó có thể tắt bất kì lõi nào bên trong CPU , đó là một đặc điểm mà những CPU Core 2 không làm được . Như vậy trong thực tế bây giờ CPU có thể cho bất kì lõi nào thành trạng thái nguồn C6 ( “Deep Power Down” ) mà không cần phụ thuộc vào những lõi khác . Như vậy điều đó sẽ cho phép tiết kiệm năng lượng khi đang chạy PC trong khi đó một hoặc nhiều lõi được nghỉ thậm trí là tắt hẳn nguồn .

Turbo Mode

 Bộ phận điều khiển năng lượng tích hợp bên trong CPU làm việc như là bộ cảm biến năng lượng cho mỗi lõi . Do đó bộ vi xử lí sẽ biết mỗi lõi sử dụng bao nhiêu điện năng và có bao nhiêu nhiệt lượng toả ra . Điều đó cho phép thêm tính năng “Turbo Mode” trong bộ vi xử lí Nehalem .

Turbo Mode cho phép CPU tăng tốc độ xung nhịp của đồng hồ của lõi đang làm việc . Ý tưởng này hoàn toàn không có gì mới mẻ và Core i7 không phải là bộ vi xử lí đầu tiên sử dụng nó  vì một số bộ vi xử lí Xeon dựa vào cấu trúc NetBurst – cấu trúc của bộ vi xử lí Pentium 4 – có đặc tính này với tên gọi “Foxton Technology” . Nhưng trong những bộ vi xử lí thế hệ trước đó thì công nghệ này chỉ dùng khi những lõi khác đang nghỉ mà thôi .

Những Turbo Mode trong Nehalem lại làm việc theo cách khác . CPU liên tục theo dõi nhiệt độ và công suất tiêu thụ của nó . CPU sẽ Overclock những lõi đang được kích hoạt làm việc cho tới khi CPU đạt được giá trị TDP cho phép , mà dựa vào hệ thống làm mát mà bạn đang sử dụng .

Ví dụ nếu bạn nói rằng Bộ phận tản nhiệt của CPU có khả năng tản nhiệt tới 130W ( bạn sẽ khai báo thông số này bên trong BIOS ) , thì CPU sẽ tăng ( hoặc giảm ) xung nhịp của nó do đó năng lượng hiện thời toả ra từ CPU sẽ đạt bằng với khả năng mà Bộ phận tản nhiệt của CPU có thể đạt được . Do đó nếu thay thế bằng Bộ phận tản nhiệt tốt hơn , bạn sẽ vào Setup của Motherboard cấu hình lại giá trị TDP mới để cho phép Turbo Mode tự động tăng tốc độ xung nhịp của CPU .

Lưu ý rằng CPU không cần thiết ShutDown những lõi không sử dụng để làm việc với chế độ Turbo Mode . Nhưng kỹ thuật Overclock động này lại dựa vào Bộ phận làm mát của CPU có khả năng tản nhiệt được đến đâu và việc ShutDown những lõi không sử dụng đến sẽ giảm công suất tiêu thụ và nhiệt lượng từ CPU và như vậy sẽ cho phép Overclock được với tốc độ cao hơn .

\"\"
 
Turbo Mode mới này là sự mở rộng của công nghệ SpeedStep , do đó nó được xem như là sự cải tiến tính năng của SpeedStep .

Nó chỉ làm việc với những lõi bên trong CPU nên Bộ phận điều khiển bộ nhớ và Bộ nhớ Cache không chịu tác động của công nghệ này .

Có vẻ như Turbo Mode sẽ chỉ có trong những Model “Extreme Edition” mà thôi .

\"\"

 

Những đặc điểm khác

Những đặc điểm chính có trong lõi Nehalem mới đã được đề cập bên trên và bây giờ chúng tôi sẽ tiếp tục giải thích một chút về hai đặc điểm quan trọng đó là : HyperThreading và Tối ưu hoá những lệnh SSE-Unaligned

  • Công nghệ HyperThreading cho phép mỗi lõi CPU được công nhận như là 02 CPU . Như vậy nếu bạn có Core i7 với 04 lõi thì hệ điều hành sẽ nhận dạng thành 08 lõi .  Công nghệ này dựa trên thực tế khi lõi CPU đang làm việc thì sẽ có những mạch điện nào đó bên trong nó lại đang ở trạng thái nghỉ và như vậy nó có thể được sử dụng tránh lãng phí thời gian . Ban đầu công nghệ này được phát hành cho những CPU Pentium 4 , thuộc những CPU thế hệ thứ 6 .

Bây giờ bên trong Nehalem nó lại được gọi là SMT ( Simultaneous Multi-Threading ) . SMT không thể cung cấp cùng một hiệu suất như là lõi thực , có nghĩa là CPU có 08 lõi thực sẽ chạy nhanh hơn CPU có 04 lõi và đi kèm theo SMT khi làm việc với cùng tốc độ xung nhịp và dựa trên cùng một cấu trúc . Tuy nhiên theo một khía cạnh nào đó thì hiệu suất những CPU có hỗ trợ SMT vẫn cao hơn những CPU không có SMT mà có cùng lõi thực và có cùng tốc độ xung nhịp cũng như có cùng cấu trúc .

\"\" 

  • Có hai kiểu lệnh SSE mà truy cập bộ nhớ đó là : AlignedUnaligned ( hay còn được gọi là Misaligned ) . Những lệnh Aligned yêu cầu dữ liệu vừa với địa chỉ 16 Byte ( 128-bit ) , trong khi đó những lệnh Unaligned lại không phải như vậy . Xem Hình 9 để minh hoạ

 \"\"

Hình 9 : Những lệnh Aligned và Unaligned

            Điều này nghe có vẻ khó hiểu vì thế tốt hơn cả cứ để nguyên theo tiếng Anh .

Chúng ta tưởng tượng một hệ thống sử dụng cấu hình Bộ nhớ Dual-Channel . Bộ phận điều khiển bộ nhớ sẽ truy cập bộ nhớ 128-bit cùng một lúc . Do đó bộ nhớ sẽ được chia thành những khối 128-bit ( 16 Byte ) . Như vậy theo lí thuyết Địa chỉ mà bạn yêu cầu phải bắt đầu tại điểm khởi đầu của mỗi Khối , nên có thể Đọc ( hoặc Ghi ) 128-bit và nhận những gì bạn muốn ngay khi có yêu cầu . Điều đó chính là những yêu cầu Aligned trình bày theo hình trên trong Hình 9 .

Nhưng giả sử khi đưa ra một lệnh Đọc dữ liệu từ Bộ nhớ nhưng thay vì dùng địa chỉ đầu tiên bên trong Khối bạn lại yêu cầu địa chỉ nằm giữa Khối . Lúc đó yêu cầu dữ liệu 128-bit của bạn sẽ xảy ra : một nửa của Dữ liệu sẽ nằm trên khối đầu tiên và một nữa Dữ liệu lại nằm trên Khối tiếp theo , như hình cuối trong Hình 9 . Và như thế dữ liệu bạn yêu cầu sẽ bị chia thành hai Khối khác nhau và Bộ phận điều khiển bộ nhớ sẽ phải đọc hai Khối bộ nhớ mà không phải chỉ Đọc một khối như trong ví dụ trước . Trong lần Đọc đầu tiên bạn sẽ nhận lại được một nửa dữ liệu mà bạn muốn và lần Đọc thứ hai bạn sẽ nhận được phần dữ liệu còn lại .

Mặc dù những yêu cầu Aligned có hiệu suất làm việc cao hơn nhưng chúng lại gây nhiều khó khăn cho những nhà lập trình vì họ đâu có biết cấu trúc của Bộ nhớ . Bởi thế nên hầu hết những nhà lập trình cuối cùng lại hay sử dụng những lệnh Unligned .

Những bộ vi xử lí Intel trước kia cũng đã tối ưu hoá những lệnh Aligned và Unaligned nhưng khi dịch lại thành nhiều lệnh Micro-Ops , nói một cách khác những lệnh Unaligned dễ hơn cho nhà lập trình nhưng lại chạy chậm hơn . Những CPU dựa vào Nehalem đã tối ưu hoá những lệnh Unaligned nên chúng bằng với tốc độ như những lệnh Aligned .

Trong Hình 10 có tóm tắt điều này

 \"\"

Hình 10 : Nehalem tối ưu hoá những lệnh Unaligned SSE

 

\"\"\"\"