• Thứ Sáu, 09/01/2004 11:33 (GMT+7)

    Công nghệ Hyper-Threading cho máy chủ và trạm làm việc cao cấp

    Internet, thương mại điện tử và phần mềm ứng dụng doanh nghiệp đang ngày càng đòi hỏi nhiều năng lực tính toán của các máy chủ hơn. Để nâng cao tốc độ, phần mềm cần phải được “phân luồng” - các chỉ thị sẽ được chia thành nhiều dòng lệnh để có thể xử lý đồng thời trên nhiều bộ xử lý. Intel đã đưa ra công nghệ “phân luồng” cho phép nâng cao tốc độ và khả năng tính toán song song cho những ứng dụng đa luồng. Công nghệ mới của Intel mô phỏng mỗi bộ vi xử lý vật lý như là hai bộ vi xử lý luận lý (logic), tài nguyên vật lý được chia sẻ và có cấu trúc chung giống hệt nhau cho cả hai bộ xử lý lôgic. Hệ điều hành và phần mềm ứng dụng sẽ “tưởng” như đang chạy trên hai hay nhiều bộ xử lý, kết quả là tốc độ xử lý trung bình có thể tăng lên xấp xỉ 40% đối với một bộ xử lý vật lý, Intel gọi công nghệ này là Hyper-Threading (HT - tạm dịch là siêu luồng).

    Công nghệ siêu luồng cho phép các phần mềm ứng dụng được viết cho những máy chủ đa luồng có thể thực hiện các chỉ thị song song đồng thời trên mỗi bộ xử lý riêng, bằng cách này sẽ cải thiện tức thì tốc độ giao dịch cũng như thời gian đáp ứng và các yêu cầu đặc thù khác của phần mềm nghiệp vụ và thương mại điện tử. Công nghệ này tương thích với các phần mềm ứng dụng và hệ điều hành sẵn có trên các máy chủ, nó cho phép hỗ trợ nhiều người dùng hơn và tăng khối lượng công việc được xử lý trên một máy chủ. Với các máy trạm cao cấp, công nghệ siêu phân luồng cũng sẽ tăng đáng kể tốc độ các phần mềm ứng dụng đòi hỏi năng lực tính toán cao, ví dụ như phần mềm thiết kế 3 chiều, xử lý ảnh hay video… Trong thời gian tới sẽ xuất hiện ngày càng nhiều phần mềm được thiết kế đặc biệt và tối ưu hoá cho công nghệ này.

    Từ tháng 1-2002, công nghệ siêu luồng đã được Intel đưa vào các bộ vi xử lý Xeon đời mới, khởi đầu với các bộ xử lý có tốc độ 1,8GHz và 2,0GHz với 512KB cache thứ cấp, sản xuất bằng công nghệ 0,13 micron (Xeon 1,7GHz, 1,8GHz, 2,0GHz với 256KB cache thứ cấp được sản xuất bằng công nghệ 0,18 không hỗ trợ siêu luồng). Tại thời điểm đầu tiên khi Intel giới thiệu bộ xử lý Xeon cùng với chipset 860, chỉ có một số rất ít các nhà sản xuất hàng đầu như IBM, Compaq, Dell, SuperMicro, Tyan… hỗ trợ bộ vi xử lý này, số lượng sản phẩm cũng rất ít. Tuy nhiên tới thời điểm hiện nay, khi có thêm các chipset hỗ trợ bộ xử lý Xeon như E7500 và Serverworks GC, nhiều nhà sản xuất khác đã có sản phẩm hỗ trợ bộ xử lý Xeon. Đặc biệt SuperMicro đã gần như “bỏ rơi” Pentium III với việc cho ra đời tới hơn 20 loại motherboard hỗ trợ bộ xử lý Xeon, chứng tỏ Xeon với công nghệ siêu luồng là sự thay thế xứng đáng.

    Tuy nhiên đối với đa số người dùng, nhất là người dùng máy tính để bàn thì công nghệ HT còn khá xa lạ. Bài viết này giúp các bạn hiểu rõ hơn về công nghệ siêu luồng, nhất là khi Intel chuẩn bị đưa ra bộ xử lý Pentium 4 dành cho desktop áp dụng công nghệ siêu luồng (tốc độ khởi điểm là 3,06GHz).

     

    Công Nghệ Hyper--Threading Và Simultaneous Multi-Threading (Smt)
    Intel phát triển SMT từ một công nghệ gốc có tên mã là Jackson, nó được giới thiệu tại diễn đàn các nhà phát triển Intel Development Forum với một cái tên gần gũi hơn là Hyper-Threading – công nghệ siêu luồng. Trước khi có thể hiểu về cách thức hoạt động của công nghệ này, chúng ta cần phải tìm hiểu cơ bản về nó, đặc biệt là về chuỗi lệnh và cách chúng hoạt động.

    Cái gì làm cho một ứng dụng có thể chạy? Làm thế nào CPU biết các chỉ dẫn để thực hiện và thực hiện với dữ liệu nào? Tất cả những thông tin này có chứa trong mã biên dịch của ứng dụng mà bạn đang chạy mỗi khi bạn nạp ứng dụng đó vào. Û́ng dụng lần lượt gửi các chuỗi lệnh báo cho CPU biết phải làm gì để đáp ứng, và đối với CPU chuỗi lệnh sẽ là một tập các chỉ thị cần phải thực thi. CPU biết chính xác các chỉ thị này nằm ở đâu nhờ thanh ghi gọi là Program Counter (PC). PC luôn chỉ đến vị trí trong bộ nhớ nơi mà các chỉ thị cần thực hiện tiếp theo đã được lưu giữ, như vậy một khi chuỗi lệnh được gửi đến CPU thì địa chỉ trong bộ nhớ của chuỗi lệnh này đã được nạp sẵn vào PC, vì vậy CPU biết bắt đầu thực hiện từ đâu. Sau mỗi chỉ thị, PC sẽ tăng lên và quá trình tiếp tục đến hết chuỗi lệnh. Khi chuỗi lệnh được thực hiện xong, PC sẽ bị ghi đè bởi chỉ thị tiếp theo. Chuỗi lệnh có thể bị ngắt bởi một yêu cầu khác, khi đó CPU sẽ lưu giá trị hiện tại của PC trong ngăn xếp (stack) và nạp giá trị mới vào PC, tuy nhiên hạn chế là tại mỗi thời điểm chỉ có thể có duy nhất một chuỗi lệnh được thực thi. Một hướng giải quyết chung cho vấn đề này là sử dụng hai hay nhiều CPU, nếu tại mỗi thời điểm một CPU chỉ có thể thực thi một chuỗi lệnh thì hai hay nhiều CPU sẽ thực thi được hai hay nhiều chuỗi lệnh. Tuy vậy, lại có nhiều vấn đề nảy sinh với cách giải quyết này, trước hết là nhiều CPU sẽ tốn nhiều tiền, quan trọng hơn nữa là việc quản lý hai hay nhiều CPU để chúng chia sẻ tốt tài nguyên chung. Ví dụ, cho tới trước khi chipset AMD 760MP được đưa ra, tất cả các nền tảng x86 đa bộ xử lý chỉ hỗ trợ việc chia băng thông sẵn có giữa các CPU, điều quan trọng nhất là các ứng dụng và hệ điều hành cần phải có khả năng hỗ trợ tính năng này. Hiện nay, để giải quyết nhanh các chuỗi lệnh phức tạp, phần cứng nói chung phải nhờ vào phương án xử lý đa luồng, hệ điều hành phải hỗ trợ xử lý đa luồng, và phải tăng tốc độ một cách thật sự, giống như có nhiều bộ xử lý (trong hầu hết các trường hợp). Công nghệ siêu luồng của Intel giải quyết vấn đề bằng cách thực hiện nhiều hơn một chuỗi lệnh tại cùng một thời điểm.

     

    Các bộ vi xử lý hoạt động không hiệu quả!
    Thuật ngữ hiệu quả có vẻ như là một vòng luẩn quẩn, giống như con người chỉ sử dụng một phần nhỏ sức mạnh bộ não của mình, CPU cũng vậy.

    Lấy Pentium 4 làm ví dụ, CPU này có tổng cộng 7 đơn vị thực thi, hai trong số đó có thể thực hiện hai vi lệnh mỗi xung nhịp (gọi là double pumped ALUs). Nhưng ngay cả như vậy thì bạn cũng không thể tìm được phần mềm nào tận dụng hết các đơn vị thực thi đó. Hầu hết các phần mềm cho máy tính cá nhân đang sử dụng chỉ làm việc với một ít phép tính số nguyên như nạp và lưu trữ mà không hề động đến đơn vị thực thi dấu chấm động. Còn một số phần mềm kiểu như Maya thì chỉ tập trung vào mỗi đơn vị xử lý dấu chấm động mà không sử dụng đến đơn vị xử lý số nguyên. Ngay cả ứng dụng chủ yếu sử dụng phép tính số nguyên cũng không tận dụng tất cả các đơn vị xử lý số nguyên, đặc biệt là đơn vị xử lý số nguyên “chậm”, một thành phần trong CPU chuyên dùng cho phép “dịch chuyển” hay “xoay”.

    Để minh hoạ rõ hơn hãy thử đặt giả thiết một CPU với 3 đơn vị thực thi: một đơn vị số nguyên, một đơn vị dấu chấm động và một đơn vị nạp/lưu trữ (đơn vị dùng để đọc/ghi bộ nhớ). Giả sử CPU có thể thực hiện mọi lệnh trong vòng một chu kỳ xung nhịp và đồng thời giải quyết nhiều mệnh lệnh tới cả ba đơn vị thực thi. Bây giờ hãy đưa cho CPU một chuỗi lệnh như các chỉ dẫn sau đây:

    1+1

    10+1

    Store Previous Result

    Biểu đồ dưới đây sẽ giúp minh họa mức độ của các đơn vị thực thi, màu xám biểu thị đơn vị thực thi không sử dụng, màu xanh cho biết đơn vị thực thi hoạt động.

    Bạn có thể thấy rằng trong mỗi xung nhịp sẽ chỉ có 33% trong số các đơn vị được sử dụng, và trong các phép toán này hoàn toàn không sử dụng đơn vị xử lý dấu chấm động FPU. Theo Intel thì hầu hết các mã lệnh IA-32 x86 chỉ sử dụng khoảng 35% số các đơn vị thực thi của Pentium 4.

    Thử gửi một chuỗi lệnh khác đến các đơn vị thực thi của CPU, lần này là các  lệnh tải, cộng và lưu trữ theo thứ tự:

    Một lần nữa bạn thấy rằng cũng chỉ sử dụng có 33% số các đơn vị thực thi. Thuật toán xử lý song song mà chúng tôi cố gắng chỉ ra ở đây được gọi là ILP (instruction level parallelism), ở đó các chỉ dẫn phức tạp được thực hiện đồng thời bởi vì CPU có khả năng “điền đầy” các đơn vị xử lý song song, tức là có nhiều hơn 33% số đơn vị xử lý được sử dụng. Đáng tiếc là trên thực tế hầu hết các mã lệnh x86 không phải là ILP, vì vậy bạn phải tìm những cách khác để tăng hiệu quả. Ví dụ, hệ thống của bạn có 2 CPU và chúng có thể thực hiện các chuỗi lệnh đồng thời, cách này được biết đến như là xử lý song song theo luồng để tăng cường hiệu năng, tuy nhiên lại rất tốn kém.

    Vậy có cách nào khác để sử dụng tốt hơn sức mạnh thực thi vốn có của bộ xử lý x86?

     

    Giới Thiệu Công Nghệ Hyper---Threading
    Có một vài nguyên nhân làm cho các đơn vị thực thi không được sử dụng thường xuyên. Nói chung, CPU không thể lấy dữ liệu nhanh như nó mong muốn do tắc nghẽn đường truyền (memory bus và front-side-bus), dẫn đến sự giảm sút hoạt động của các đơn vị thực thi. Ngoài ra, một nguyên nhân khác đã được đề cập là có quá ít ILP trong hầu hết các chuỗi lệnh thực thi.

    Hiện thời cách mà đa số các nhà sản xuất CPU dùng để cải thiện hiệu năng trong các thế hệ CPU của họ là tăng tốc độ xung nhịp và tăng độ lớn của bộ nhớ đệm (cache). Nhưng cho dù cả hai cách này cùng được sử dụng thì vẫn không thực sự sử dụng hết được tiềm năng sẵn có của CPU. Nếu có cách nào đó cho phép thực thi được nhiều chuỗi lệnh đồng thời mới có thể tăng hiệu quả sử dụng tài nguyên của CPU. Đó chính là cái mà công nghệ siêu luồng của Intel đã làm được, bản chất của nó là chia sẻ tài nguyên để sử dụng hiệu quả hơn các đơn vị thực thi lệnh đã có sẵn trên các CPU đó.

    Hyper threading - siêu luồng là một cái tên “tiếp thị” cho một công nghệ nằm ngoài “vương quốc” x86, là một phần nhỏ của SMT. Ý tưởng đằng sau SMT rất đơn giản: một CPU vật lý sẽ xuất hiện trên hệ điều hành như là hai CPU và hệ điều hành không thể phân biệt được. Trong cả hai trường hợp nhiệm vụ của hệ điều hành chỉ là gửi hai chuỗi lệnh tới “hai” CPU và phần cứng sẽ đảm nhiệm những công việc còn lại.

    Trong các CPU sử dụng công nghệ Hyper-Threading, mỗi CPU logic sở hữu một tập các thanh ghi, kể cả thanh ghi đếm chương trình PC riêng (separate program counter), CPU vật lý sẽ luân phiên các giai đoạn tìm/giải mã giữa hai CPU logic và chỉ cố gắng thực thi những thao tác từ hai chuỗi lệnh đồng thời theo cách hướng tới những đơn vị thực thi ít được sử dụng.

    Khi giới thiệu tại diễn đàn các nhà phát triển, công nghệ này được trình diễn trên bộ xử lý Xeon cùng với phần mềm dựng hình (rendering) của Maya, trong thí nghiệm đó một bộ xử lý Xeon với công nghệ siêu luồng đã chạy nhanh hơn 30% so với bộ xử lý Xeon thông thường. Lợi ích về tốc độ ấn tượng đến nỗi chẳng ai buồn để ý rằng thực tế công nghệ này đã có sẵn trên tất cả các lõi (nhân) của CPU Pentium 4 và Xeon, nhưng chỉ đơn giản là đã bị chính Intel vô hiệu hoá. Những ai đã mua CPU Xeon đời mới (0,13 micron) cho các workstation/server nên nâng cấp BIOS và có thể sẽ rất ngạc nhiên với tuỳ chọn thú vị: cho phép hay vô hiệu hoá Hyper-Threading. Hiện tại Intel đang mặc định vô hiệu hoá công nghệ này đối với các CPU dành cho máy tính để bàn, nhưng trong tương lai rất gần nó sẽ được kích hoạt bởi tuỳ chọn đặc biệt trong BIOS của các nhà sản xuất bo mẹ.

    Có thể bạn sẽ hỏi rằng tại sao Intel lại mặc định vô hiệu hoá một công nghệ “hay” như vậy, tại sao nó lại không được sử dụng trong tất cả các bộ xử lý mới của Intel? Để có được câu trả lời, chúng ta hãy xem xét kỹ hơn.

     

    Hyper----Threading: Không Phải Là Hoàn Hảo

    Bạn còn nhớ ví dụ về hai chuỗi lệnh trước đây không? Bây giờ giả thiết rằng CPU đơn giản trước đây của bạn cũng có các đặc tính của Hyper-Threading và hãy xem cái gì sẽ xảy ra khi thực thi đồng thời hai chuỗi lệnh đó:
    Những ô màu xanh thẫm hiển thị một chỉ dẫn từ chuỗi lệnh thứ nhất đang được thực hiện, trong khi những ô màu lá cây hiển thị một chỉ dẫn từ chuỗi lệnh thứ hai đang được thực hiện. Các ô màu xám hiển thị những đơn vị thực hiện không được sử dụng, trong khi các ô màu đỏ hiển thị xung đột khi mà cả hai chỉ dẫn đều cố gắng sử dụng cùng một đơn vị thực hiện.

    Rõ ràng là không như bạn trông đợi, việc thực hiện song song hai chuỗi lệnh với công nghệ siêu luồng lại thực hiện chậm hơn so với một CPU thông thường. Nguyên nhân thật ra cực kỳ đơn giản: bạn đang cố gắng đồng thời thực hiện hai chuỗi lệnh quá đơn giản, tất cả đều là trùng lặp với lệnh add, load, store. Nếu bạn chạy các ứng dụng đòi hỏi nhiều năng lực tính toán động cùng với các ứng dụng số nguyên thì kết quả sẽ khác đi, vấn đề là bạn sử dụng ứng dụng loại nào nhiều hơn trên máy tính để bàn? Hiện tại các ứng dụng văn phòng trên máy tính để bàn hầu như chỉ sử dụng số nguyên (và trong tương lai chắc cũng vẫn chỉ sử dụng số nguyên). Vì vậy lợi ích mà công nghệ siêu luồng đem lại thấp (và đôi khi còn kém hơn không dùng công nghệ siêu luồng). Trên thực tế, nếu bạn kích hoạt tính năng “siêu luồng” trên máy tính desktop của mình, bạn có thể chẳng được gì ngoại trừ phải trả giá bằng việc giảm tốc độ tới 10%. Tuy nhiên người dùng các ứng dụng tính toán phức tạp (kiểu như rendering của Maya, 3DS) thì sẽ được hưởng lợi rất nhiều từ công nghệ này. Ngoài ra công nghệ này cũng tăng tốc đáng kể cho các máy chủ, nhất là các máy chủ web server.
    Bạn có thể tham khảo kết quả khảo sát thử nghiệm của ETesting Labs:
    www.intel.com/eBusiness/products/server/processor/Xeon/bm020902.htm.

    Lợi Ích Của Công Nghệ Hyper----Threading
    Có phải Intel đã tạo ra hyper-threading chỉ để cho các CPU máy chủ? Tất nhiên là không. Intel không định lãng phí bất kỳ không gian trống nào trong CPU của họ, kể cả trong trường hợp này. Thực ra kiến trúc NetBurst của Pentium 4 và Xeon hiện nay hoàn chỉnh với lõi SMT. Hãy quay trở lại ví dụ trước đây, giờ bạn cho nó thêm một đơn vị thực hiện -  một ALU thứ 2 và thực hiện hai chuỗi lệnh trên:

    Ái chà! Với một ALU thứ 2, xung đột duy nhất mà bạn gặp phải là lần lưu trữ cuối cùng. Bạn nên biết rằng CPU Pentium 4 được thiết kế với ba đơn vị số nguyên (hai ALU và một đơn vị xử lý số nguyên khác chậm hơn cho phép dịch/xoay). Quan trọng hơn nữa là mỗi ALU của Pentium 4 có thể thực hiện hai vi lệnh trong cùng một xung nhịp, nghĩa là trong hai chỉ dẫn add (phép cộng) mỗi chỉ dẫn có thể từ hai chuỗi lệnh khác nhau, được thực hiện đồng thời trong một xung nhịp duy nhất trên Pentium 4/Xeon.

    Nhưng điều đó vẫn chưa giải quyết được vấn đề của bạn, cho thấy rằng việc tăng thêm các đơn vị xử lý để tăng hiệu quả với công nghệ siêu luồng lại tốn kém đứng từ quan điểm vật lý (sẽ phải làm cho CPU phình to ra với nhiều transistor hơn, tiêu tốn nhiều điện năng hơn; hoặc phải giảm kích thước CPU với các công nghệ chế tạo mới). Thay vào đó, Intel đang khuyến khích các nhà phát triển tối ưu hoá công nghệ Hyper-Threading. Chẳng hạn sử dụng lệnh “dừng” (HALT) một trong các bộ xử lý logic, như vậy sẽ tối đa được tốc độ cho các ứng dụng không sử dụng được công nghệ Hyper-Threading, CPU còn lại chỉ hoạt động như là hệ thống một CPU. Khi một ứng dụng có thể sử dụng lợi ích từ Hyper-Threading, bộ xử lý logic thứ hai lại tiếp tục được hoạt động.

     

    Kết Luận
    Mặc dù bạn cảm thấy rất bị thuyết phục khi công nghệ Hyper Threading hiện diện trên tất cả các nhân của CPU Pentium 4/Xeon hiện nay, nhưng nó không phải là tất cả những gì bạn mong muốn. Lý do đơn giản là công nghệ thường ở phía trước rất xa, trước khi người dùng có thể nhìn thấy được ưu điểm của nó trên các nền tảng, kể cả máy tính để bàn. Sự hỗ trợ của nhà phát triển rõ ràng có thể mở ra một hướng phát triển mạnh cho Pentium 4/Xeon và các bộ xử lý trong tương lai.

    Dù còn nhiều hạn chế, Hyper Threading cũng đã làm được nhiều điều cho thị trường trước khi một bộ xử lý khác của AMD với hai nhân (dual-core) có tên gọi là Sledge Hammer ra đời. Cho tới khi những công nghệ mới như Bumpless Build-Up Layer Packaging hoàn thiện, chi phí để sản xuất CPU nhiều nhân có thể sẽ quá cao do sự phức tạp của công nghệ. Tuy nhiên bộ xử lý nhiều nhân hơn chắc chắn sẽ cho tốc độ cao hơn, vì trên thực tế chúng có nhiều đơn vị thực hiện hơn, tránh được những vấn đề mà hyper-threading đang gặp phải.

    Trước mắt, bạn hãy tạm hài lòng với Hyper-Threading và chờ xem bao giờ thì Intel sẽ quyết định đưa các công nghệ này vào bộ xử lý cho máy để bàn.


    Nguyễn Liên Phương

    E-mail: phuongln@hn.vnn.vn

    ID: A0211_60