FullOfLove
01-11-2008, 10:04 PM
[04/10/2007 11:15]
Lần này chúng ta sẽ cùng tìm hiểu một ứng dụng cổ điển hơn đối với x86 nhưng lại có tốc độ cao hơn. Đây là lần đầu tiên AMD đạt được bước tiến mới như vậy kể từ phiên bản 3Dnow mới nhất được thiết lập vài năm trước. Lần này, AMD đã ngừng phát triển 3Dnow và thay vào đó tập trung vào hỗ trợ bộ chỉ lệnh SSE của Intel, sản phẩm đã giành phần thắng trong cuộc cạnh tranh khốc liệt trước đây. Kết quả của sự hỗ trợ này là SSE5, một sản phẩm phá vỡ mọi chuẩn mực của SSE do Intel sản xuất. Đây là một phần trong nỗ lực của AMD nhằm thâm nhập vào quá trình phát triển các phiên bản tiếp theo của SSE, và với SSE5, họ đã chứng tỏ với chúng ta rằng họ đang rất cố gắng chuẩn bị cho SSE5 và cả các sản phẩm sau này. Cái tên Intel có vẻ như đã vắng bóng trên hầu hết các sản phẩm hiện nay, vì thế chúng ta hẳn sẽ nhanh chóng được nghe ý kiến của họ không lâu sau khi AMD lấn sân sang lĩnh vực phát triển SSE.
Còn về SSE5, hiện nay nhiều ý kiến cho rằng đây là một chuẩn mực đối với một ngành công nghiệp mà cứ 2 năm lại cho ra đời một thế hệ SSE mới. Với tốc độ tăng trưởng chậm chạp của xung nhịp và tốc độ xử lí những lệnh trong một chu kì xung nhịp hiện nay, AMD đang tìm các cách khác để tăng tốc độ bộ xử lý của họ. Một trong số những cách như vậy là tăng thêm nhân cho bộ xử lý để có tốc độ cao hơn - một điều mà Intel đã áp dụng đối với Conroe. Và hiện tại, AMD cũng đang thực hiện cách làm này đối với loại nhân Barcelona mới nhất và những sản phẩm dựa trên Barcelona.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh1.png
Để tăng hiệu suất xử lí với lệnh, bằng cách làm tốc độ thực hiện lệnh nhanh hơn, hoặc thiết kế hẳn những lệnh mới mới, cách này chính là trường hợp của loại SSE truyền thống và cũng là cách mà AMD đang áp dụng đối với SSE5 hiện nay. Trong các thế hệ SSE gần đây nhất, AMD đã thiết kế các lệnh mới có khả năng làm tăng tốc độ trong việc thực hiện các tính năng chuyên sâu. Còn trong SSE5, AMD lại tập trung vào việc phát triển cả ba lĩnh vực: ứng dụng an ninh, ứng dụng truyền thống máy tính, và giờ đây là ứng dụng đa truyền thông. Đối với các lệnh hiện tại, có vô số các lĩnh vực có thể phát triển, nhưng đây là ba lĩnh vực mà AMD tin rằng sẽ phát triển mạnh nhất nhờ các instructions do họ chọn lựa.
Cũng cần chú ý rằng tuy SSE5 được công bố cùng ngày với việc ra mắt Barcelona, nhưng SSE5 sẽ không hiện diện trong Barcelona hay bất kỳ các sản phẩm kế nhiệm nào của nó. AMD sẽ bắt đầu tích hợp hỗ trợ SSE5 trong nhân Bulldozer, dự tính phát hành vào năm 2009. Việc công bố dự án vào thời điểm này được thực hiện khá sớm so với các ứng dụng SSE khác để các nhà phát triển có đủ thời gian tìm hiểu và hỗ trợ chúng trước khi Bulldozer ra mắt. AMD hy vọng sẽ giải quyết được vấn đề con gà/ quả trứng đã xảy ra với các phiên bản SSE trước đây.
Nhưng không may là loại hỗ trợ SSE5 này của AMD lại không thể hỗ trợ các phiên bản SSE khác. Trước đây, SSE hoàn toàn tương thích với các ứng dụng cũ, ví dụ nếu một bộ xử lý hỗ trợ SSE3, nó cũng sẽ hỗ trợ được SSE2, SSE1, và MMX. Ứng dụng SSE mới của Intel mang tên SSE4 sẽ được phát hành cùng với Penryn vào cuối năm nay, nhưng AMD sẽ chỉ hỗ trợ một phần tập lệnh SSE4 trong Bulldozer mà thôi.
Chúng ta sẽ thất vọng vì cách làm này của AMD. Một số câu lệnh của SSE4 rất tốt, còn một số khác thì không. Theo AMD thì họ tin tưởng rằng tập hợp lệnh trong SSE4 mà họ sử dụng sẽ là những câu lệnh tốt nhất trong số đó. Nhưng chúng ta vẫn hy vọng rằng họ nên sử dụng tất cả các câu lệnh, và việc đặt tên ứng dụng này là SSE5 và tích hợp nó với Bulldozer đã chứng tỏ rất rõ rằng sản phẩm này cũng tương thích với các ứng dụng trước đó. Còn nếu đây chỉ là một phần bổ sung cho bộ câu lệnh SSE, thì AMD nên đặt cho nó một cái tên khác để tránh hiểu lầm.
Cuối cùng, chúng tôi được biết loại chip sắp phát hành của AMD sẽ hỗ trợ toàn bộ SSE4, nhưng không rõ là bao giờ. Có một điều chắc chắn là nó sẽ không có mặt trong Bulldozer, đồng nghĩa với việc hỗ trợ SSE4 sẽ không xảy ra cho đến khi phiên bản Bulldozer tiếp theo ra mắt, tức là chúng ta sẽ phải đợi đến năm 2010.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh2.png
Tập lệnh SSE5
Trong khi việc mở rộng tập lệnh x86 với các phiên bản SSE đời mới đã trở thành công việc thường xuyên trong ngành công nghiệp máy tính, thì rất nhiều trong số các phiên bản này thực ra chỉ là bản tái tạo lại các bộ xử lý x86 mà thôi. Mặc dù với mục đích chung là thiết kế CPU, x86 không hề có bất kỳ giới hạn nào (cứ cho là bạn có đủ thời gian để làm tất cả các phép tính cần thiết), nhưng lại có một số điểm yếu tồn tại từ nhiều năm nay. Nền tảng của việc nhận dạng và sửa chữa những điểm yếu này nằm trong những việc mà bộ xử lý – thông thường hoặc chuyên dụng – đang thực hiện rất tốt, còn x86 thì không. Cho đến giờ, mỗi phiên bản SSE đều đã được bổ sung thêm một số tính năng của các bộ xử lý này để khắc phục các nhược điểm của chúng.
Theo lời AMD, SSE5 bao gồm 46 câu lệnh “nền tảng” độc nhất, trong đó có các câu lệnh có nhiều phiên bản khác nhau tuỳ vào loại dữ liệu khác nhau. Nếu tính tất cả các phiên bản này, số lượng tổng cộng câu lệnh trong SSE5 là 170, trong khi ở tập lệnh x86 nguyên bản chỉ có 80 câu lệnh.
Với SSE5, AMD đang tập trung vào 5 nhóm câu lệnh là:
Câu lệnh nhân hỗn hợp (FMACxx)
Câu lệnh nhân số nguyên (IMAC, IMADC)
Câu lệnh di chuyển hoán vị và điều kiện
Câu lệnh so sánh và kiểm tra vector
Câu lệnh điều chỉnh chính xác, làm tròn và chuyển đổi Như đã nói ở trên, nhiều câu lệnh trong số này chỉ là các tính năng bổ sung nằm ở các sản phẩm khác. Đặc biệt, DSP vẫn tiếp tục là nguồn lệnh chính của các phiên bản SSE mới nhất, phần lớn trong số các lệnh này cho phép máy tính xử lý dữ liệu chuyên nghiệp với tốc độ kiểu DSP.
Ngoài ra, AMD còn đặc biệt chú ý tới nhược điểm của nhân x86 là cách tạo lập và sử dụng câu lệnh. Một câu lệnh đơn dạng nhị phân cho bộ xử lý x86 (hoặc hầu hết các bộ xử lý khác) gồm có hai phần: Opcode và toán hạng kết hợp với nhau. Opcode là phần nằm trong câu lệnh cho biết điều gì cần phải làm, còn toán hạng là các dữ liệu cần xử lý cùng với tất cả các dữ liệu khác mà bộ xử lý sử dụng để giải quyết câu lệnh. Theo đúng mặc định của x86, có 2 byte dành cho Opcode, còn lại là dành cho toán hạng, trong khi phần lớn các câu lệnh đều sử dụng toán hạng từ 0 đến 2 dữ liệu.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh3.png
Trong SSE5, AMD sẽ thay đổi cả Opcode lẫn toán hạng, đặc biệt là toán hạng để giúp các câu lệnh có tốc độ cao hơn. Còn đối với Opcode, AMD đang dành thêm 1 byte thứ 3 cho phần này - điều cần thiết để xây dựng câu lệnh mới, và cung cấp một số cách sử dụng những tính năng toán hạng mới này. Đối với toán hạng, SSE5 sẽ bao gồm nhiều câu lệnh cần sử dụng toán hạng lớn hơn 2 dữ liệu; trong đó kích cỡ toán hạng không thành vấn đề bởi sẽ có các toán hạng phụ thêm. Một trong số những cách để tăng tốc độ là xử lý trên nhiều dữ liệu hơn trong một câu lệnh cho trước, tức là cần đến toán hạng lớn hơn 2 dữ liệu.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh4.png
Phép tính MADD
Vậy thì tầm quan trọng của việc sử dụng các toán hạng 3+ là gì? Nói ngắn gọn,đó là: MADD, Multiply-ADDition operations (phép tính nhân-cộng) như C=(A*B)+C. Toán ma trận là nền tảng căn bản của việc xử lý dữ liệu và hình ảnh, và một trong số những phép tính cơ bản trong việc xử lý ma trận là phép nhân hai số rồi cộng với số thứ ba, tức là cần đến 3 toán hạng. Các GPU hiện đại đều vận dụng rất tốt nguyên tắc MADD này với các bộ xử lý có khả năng thực hiện một côn số khổng lồ các câu lệnh trong một khoảng thời gian rất ngắn, và việc thực hiện tốt MADD là một trong số những nguyên nhân giúp GPU có tốc độ xử lý dữ liệu nhanh đến chóng mặt.
Do các bộ xử lý x86 đếu không có khả năng MADD, nên bất cứ khi nào CPU cần thực hiện một phép tính dạng MADD, nó sẽ thực hiện hai (thậm chí còn nhiều hơn nữa) phép tính cộng và nhân riêng biệt. Vì thế cũng không có gì ngạc nhiên khi tính năng được ưa thích nhất của SSE5 do AMD phát triển là khả năng sử dụng câu lệnh với toán hạng 3+ bởi việc gộp hai câu lệnh làm một có thể làm tăng gấp đôi tốc độ trong một số trường hợp. Hơn nữa, việc sử dụng các câu lệnh như vậy còn giúp giảm số phép tính tải hoặc lưu trữ cần thiết, giúp tiết kiệm rất nhiều thời gian.
AMD đã cung cấp cho biết một trường hợp như vậy: một phép tính nhân ma trận 4x4 được mã hoá trong SSE3 và được tối ưu hoá trong SSE5. Mã SSE3 cần đến 34 câu lệnh, trong khi mã SSE5 thực hiện được phép tính này trong 20 câu lệnh. Giờ đây chỉ còn vấn đề về tốc độ xử lý mã hơn là số câu lệnh (trong ví dụ này, SSE5 không hẳn có tốc độ xử lý tăng 41% so với SSE3) bởi thời gian thực hiện và ngưng hoạt động của một câu lệnh có thể dao động tuỳ vào từng câu lệnh, nhưng cũng không thể phủ nhận rằng mã SSE5 có sự cải tiến rõ ràng về tốc độ.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh5.png
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh6.png
Còn về tốc độ thực tế của SSE5, AMD cho biết họ đã phát hiện ra rằng một phép biến đổi hàm Cosin rời rạc - một phép tính rất quan trọng trong việc mã hoá hình ảnh và video – có thể thực hiện nhanh hơn đến 30% nếu dùng SSE5 thay vì SSE3. Ngoài ra, quá trình mã hoá cũng ấn tượng không kém với khả năng tăng tốc độ lên 5 lần đối với một số loại mã nhất định, mặc dù chúng ta có quyền nghi ngờ rằng con số thực tế sẽ nhỏ hơn. Dù thế nào đi chăng nữa thì lời hứa về các cải tiến tốc độ khác của AMD vẫn còn đó, cho dù nó còn tuỳ thuộc rất nhiều vào khả năng tận dụng tốc độ SSE5 của người lập trình cũng như vào thư viện toán học được tối ưu hoá của AMD.
Việc này cũng không bao hàm các câu lệnh không thuộc nhóm MADD/MAC. Tất cả các ví dụ của AMD trên đây đều liên quan tới các cải tiến đối với nhóm lệnh này, trong khi chúng tôi lại không có nhiều thông tin về tốc độ xử lý câu lệnh hoán vị, vector, hay câu lệnh chính xác. Chắc chắn chúng cũng tương tự như vậy, chỉ có điều tốt hơn tới mức độ nào mà thôi.
Cuối cùng, đây là một thời điểm đáng chú ý trong việc đánh giá các dự đoán về CPU và GPU đang tiến triển ra sao. Mặc dù AMD không đặc biệt nhắm đến GPU với SSE5, nhưng như đã đề cập từ trước, GPU đặc biệt xử lý rất nhanh các phép tính MADD, trong khi đó SSE5 lại đang hỗ trợ CPU trong lĩnh vực này. VIệc này sẽ không loại trừ GPU, nhưng cũng làm giảm ưu điểm của GPU. Khi các phiên bản SSE mới vẫn tiếp tục xuất hiện và bổ sung các tính năng tương tự như DSP và GPU, chúng cũng dần xoá bỏ khoảng cách giữa CPU và GPU cho đến khi hai khái niệm này nhập làm một.
Kết luận
Khác với Lightweight Profiling Proposal của AMD, giờ đây chúng ta không còn tìm kiếm một ý tưởng có khả năng thực hiện trong tương lai nữa, mà là một khả năng chắc chắn sẽ xảy ra. Trong khi AMD vẫn đang thu nhận phản hồi về đề xuất trước đó của họ, thì chúng ta đang thẳng tiến với SSE5. Một bộ gia tốc phần mềm SSE5 có thể sẽ xuất hiện giúp các nhà phát triển thử nhiệm mã tối ưu hoá của SSE5 và xem khả năng hoạt động của nó ra sao, để rồi sau một năm họ có thể cầm trong tay các bộ xử lý mẫu để kiểm tra mã hoá của mình. Kể từ năm 2008 trở đi, hỗ trợ SSE5 sẽ được tích hợp vào GCC cùng với thư viện phần mềm tối ưu hoá của AMD. Hiện AMD đang rất nỗ lực quảng bá cho ứng dụng SSE5 của mình.
Cũng cần chú ý rằng hiện vẫn tồn tại một số vấn đề tiềm ẩn. Đầu tiên là gã khổng lồ nặng kí có tên Intel. Với điều kiện bình thường, hỗ trợ của Intel đặc biệt quan trọng cho sự phát triển của bất cứ ứng dụng mở rộng nào, trừ AMD64/x86-64,sản phẩm xuất hiện khi nó đã trở nên thích hợp hơn nhiều đối với ngành công nghiệp máy tính hơn là loại IA64 của chính Intel. Nói ngắn gọn, chúng tôi tin rằng AMD sẽ không thể thành công với SSE5 nếu như Intel không muốn tích hợp nó vào các bộ xử lý của họ; tất nhiên tốc độ là rất quan trọng, nhưng đây không phải là trường hợp của AMD64, khi mà AMD có đủ thuận lợi về kỹ thuật và vị thế để đạt được những gì họ muốn. Không có sự hỗ trợ của Intel, các nhà phát triển sẽ chỉ tạo ra được một phiên bản ít quen thuộc nhất mà thôi, hoặc tệ hơn, là sẽ chỉ tập trung vào các phiên bản do Intel phát triển trong khi hai đại gia về CPU đang cạnh tranh khốc liệt, một điều có vẻ mang lại bất lợi nhiều hơn cho AMD, đậc biệt là với thất bại của họ trong việc tích hợp hỗ trợ SSE4 vào Bulldozer.
Ngoài ra, mặc dù AMD sẽ hỗ trợ SSE5 trong GCC, và có thể trong cả Visual Studio Compiler nữa, thì việc Intel không thể hỗ trợ SSE5 ở mức độ phần cứng cũng đồng nghĩa với việc họ sẽ không đưa chúng vào các chương trình biên dịch của mình. Các chương trình biên dịch của Intel gần như đã trở thành huyền thoại trong việc tối ưu hoá mã trong đúng trường hợp (và qua mặt AMD), với những nhà phát triển làm việc trên những ứng dụng chuyên về tính toán có vẻ không hứng thú với việc rời bỏ những chương trình này.
Vấn đề cuối cùng là về thiết bị phần cứng của AMD. Hiện tại chưa thể dự đoán được điều gì sẽ xảy ra trong 2 năm tới, nhưng chúng ta còn quan tâm tới việc này hơn cả Intel. SSE5 phụ thuộc vào Bulldozer, và AMD sẽ cần ra mắt Bulldozer đúng hẹn nếu như muốn giới thiệt SSE5 một cách thành công. Bất kỳ sự chậm trễ nào cũng có thể khiến SSE5 bở lỡ cơ hội tham gia vào vòng quay trong quá trình phát triển phần mềm.
Nhưng dù thế nào đi nữa, chúng ta cũng không nên xem thường SSE5 bởi theo chúng tôi, đây là phiên bản mở rộng bộ lệnh x86 quan trọng nhất kể từ SSE2, và đặc biệt, các câu lệnh mới như MADD có thể giúp tăng tốc độ đúng theo những gì AMD mong muốn, trong khi vẫn tránh được sự cần thiết phải tăng tốc độ xung nhịp cũng như những vấn đề liên quan. Nhưng hiện tại, chúng ta vẫn phải chờ đến khi Bulldozer ra mắt mới có thể biết được khả năng tăng tốc độ thực sự ra sao.
http://www.tuvantinhoc1088.com/index.asp?fref=news&ChannelID=6&ArticleID=5247
Lần này chúng ta sẽ cùng tìm hiểu một ứng dụng cổ điển hơn đối với x86 nhưng lại có tốc độ cao hơn. Đây là lần đầu tiên AMD đạt được bước tiến mới như vậy kể từ phiên bản 3Dnow mới nhất được thiết lập vài năm trước. Lần này, AMD đã ngừng phát triển 3Dnow và thay vào đó tập trung vào hỗ trợ bộ chỉ lệnh SSE của Intel, sản phẩm đã giành phần thắng trong cuộc cạnh tranh khốc liệt trước đây. Kết quả của sự hỗ trợ này là SSE5, một sản phẩm phá vỡ mọi chuẩn mực của SSE do Intel sản xuất. Đây là một phần trong nỗ lực của AMD nhằm thâm nhập vào quá trình phát triển các phiên bản tiếp theo của SSE, và với SSE5, họ đã chứng tỏ với chúng ta rằng họ đang rất cố gắng chuẩn bị cho SSE5 và cả các sản phẩm sau này. Cái tên Intel có vẻ như đã vắng bóng trên hầu hết các sản phẩm hiện nay, vì thế chúng ta hẳn sẽ nhanh chóng được nghe ý kiến của họ không lâu sau khi AMD lấn sân sang lĩnh vực phát triển SSE.
Còn về SSE5, hiện nay nhiều ý kiến cho rằng đây là một chuẩn mực đối với một ngành công nghiệp mà cứ 2 năm lại cho ra đời một thế hệ SSE mới. Với tốc độ tăng trưởng chậm chạp của xung nhịp và tốc độ xử lí những lệnh trong một chu kì xung nhịp hiện nay, AMD đang tìm các cách khác để tăng tốc độ bộ xử lý của họ. Một trong số những cách như vậy là tăng thêm nhân cho bộ xử lý để có tốc độ cao hơn - một điều mà Intel đã áp dụng đối với Conroe. Và hiện tại, AMD cũng đang thực hiện cách làm này đối với loại nhân Barcelona mới nhất và những sản phẩm dựa trên Barcelona.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh1.png
Để tăng hiệu suất xử lí với lệnh, bằng cách làm tốc độ thực hiện lệnh nhanh hơn, hoặc thiết kế hẳn những lệnh mới mới, cách này chính là trường hợp của loại SSE truyền thống và cũng là cách mà AMD đang áp dụng đối với SSE5 hiện nay. Trong các thế hệ SSE gần đây nhất, AMD đã thiết kế các lệnh mới có khả năng làm tăng tốc độ trong việc thực hiện các tính năng chuyên sâu. Còn trong SSE5, AMD lại tập trung vào việc phát triển cả ba lĩnh vực: ứng dụng an ninh, ứng dụng truyền thống máy tính, và giờ đây là ứng dụng đa truyền thông. Đối với các lệnh hiện tại, có vô số các lĩnh vực có thể phát triển, nhưng đây là ba lĩnh vực mà AMD tin rằng sẽ phát triển mạnh nhất nhờ các instructions do họ chọn lựa.
Cũng cần chú ý rằng tuy SSE5 được công bố cùng ngày với việc ra mắt Barcelona, nhưng SSE5 sẽ không hiện diện trong Barcelona hay bất kỳ các sản phẩm kế nhiệm nào của nó. AMD sẽ bắt đầu tích hợp hỗ trợ SSE5 trong nhân Bulldozer, dự tính phát hành vào năm 2009. Việc công bố dự án vào thời điểm này được thực hiện khá sớm so với các ứng dụng SSE khác để các nhà phát triển có đủ thời gian tìm hiểu và hỗ trợ chúng trước khi Bulldozer ra mắt. AMD hy vọng sẽ giải quyết được vấn đề con gà/ quả trứng đã xảy ra với các phiên bản SSE trước đây.
Nhưng không may là loại hỗ trợ SSE5 này của AMD lại không thể hỗ trợ các phiên bản SSE khác. Trước đây, SSE hoàn toàn tương thích với các ứng dụng cũ, ví dụ nếu một bộ xử lý hỗ trợ SSE3, nó cũng sẽ hỗ trợ được SSE2, SSE1, và MMX. Ứng dụng SSE mới của Intel mang tên SSE4 sẽ được phát hành cùng với Penryn vào cuối năm nay, nhưng AMD sẽ chỉ hỗ trợ một phần tập lệnh SSE4 trong Bulldozer mà thôi.
Chúng ta sẽ thất vọng vì cách làm này của AMD. Một số câu lệnh của SSE4 rất tốt, còn một số khác thì không. Theo AMD thì họ tin tưởng rằng tập hợp lệnh trong SSE4 mà họ sử dụng sẽ là những câu lệnh tốt nhất trong số đó. Nhưng chúng ta vẫn hy vọng rằng họ nên sử dụng tất cả các câu lệnh, và việc đặt tên ứng dụng này là SSE5 và tích hợp nó với Bulldozer đã chứng tỏ rất rõ rằng sản phẩm này cũng tương thích với các ứng dụng trước đó. Còn nếu đây chỉ là một phần bổ sung cho bộ câu lệnh SSE, thì AMD nên đặt cho nó một cái tên khác để tránh hiểu lầm.
Cuối cùng, chúng tôi được biết loại chip sắp phát hành của AMD sẽ hỗ trợ toàn bộ SSE4, nhưng không rõ là bao giờ. Có một điều chắc chắn là nó sẽ không có mặt trong Bulldozer, đồng nghĩa với việc hỗ trợ SSE4 sẽ không xảy ra cho đến khi phiên bản Bulldozer tiếp theo ra mắt, tức là chúng ta sẽ phải đợi đến năm 2010.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh2.png
Tập lệnh SSE5
Trong khi việc mở rộng tập lệnh x86 với các phiên bản SSE đời mới đã trở thành công việc thường xuyên trong ngành công nghiệp máy tính, thì rất nhiều trong số các phiên bản này thực ra chỉ là bản tái tạo lại các bộ xử lý x86 mà thôi. Mặc dù với mục đích chung là thiết kế CPU, x86 không hề có bất kỳ giới hạn nào (cứ cho là bạn có đủ thời gian để làm tất cả các phép tính cần thiết), nhưng lại có một số điểm yếu tồn tại từ nhiều năm nay. Nền tảng của việc nhận dạng và sửa chữa những điểm yếu này nằm trong những việc mà bộ xử lý – thông thường hoặc chuyên dụng – đang thực hiện rất tốt, còn x86 thì không. Cho đến giờ, mỗi phiên bản SSE đều đã được bổ sung thêm một số tính năng của các bộ xử lý này để khắc phục các nhược điểm của chúng.
Theo lời AMD, SSE5 bao gồm 46 câu lệnh “nền tảng” độc nhất, trong đó có các câu lệnh có nhiều phiên bản khác nhau tuỳ vào loại dữ liệu khác nhau. Nếu tính tất cả các phiên bản này, số lượng tổng cộng câu lệnh trong SSE5 là 170, trong khi ở tập lệnh x86 nguyên bản chỉ có 80 câu lệnh.
Với SSE5, AMD đang tập trung vào 5 nhóm câu lệnh là:
Câu lệnh nhân hỗn hợp (FMACxx)
Câu lệnh nhân số nguyên (IMAC, IMADC)
Câu lệnh di chuyển hoán vị và điều kiện
Câu lệnh so sánh và kiểm tra vector
Câu lệnh điều chỉnh chính xác, làm tròn và chuyển đổi Như đã nói ở trên, nhiều câu lệnh trong số này chỉ là các tính năng bổ sung nằm ở các sản phẩm khác. Đặc biệt, DSP vẫn tiếp tục là nguồn lệnh chính của các phiên bản SSE mới nhất, phần lớn trong số các lệnh này cho phép máy tính xử lý dữ liệu chuyên nghiệp với tốc độ kiểu DSP.
Ngoài ra, AMD còn đặc biệt chú ý tới nhược điểm của nhân x86 là cách tạo lập và sử dụng câu lệnh. Một câu lệnh đơn dạng nhị phân cho bộ xử lý x86 (hoặc hầu hết các bộ xử lý khác) gồm có hai phần: Opcode và toán hạng kết hợp với nhau. Opcode là phần nằm trong câu lệnh cho biết điều gì cần phải làm, còn toán hạng là các dữ liệu cần xử lý cùng với tất cả các dữ liệu khác mà bộ xử lý sử dụng để giải quyết câu lệnh. Theo đúng mặc định của x86, có 2 byte dành cho Opcode, còn lại là dành cho toán hạng, trong khi phần lớn các câu lệnh đều sử dụng toán hạng từ 0 đến 2 dữ liệu.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh3.png
Trong SSE5, AMD sẽ thay đổi cả Opcode lẫn toán hạng, đặc biệt là toán hạng để giúp các câu lệnh có tốc độ cao hơn. Còn đối với Opcode, AMD đang dành thêm 1 byte thứ 3 cho phần này - điều cần thiết để xây dựng câu lệnh mới, và cung cấp một số cách sử dụng những tính năng toán hạng mới này. Đối với toán hạng, SSE5 sẽ bao gồm nhiều câu lệnh cần sử dụng toán hạng lớn hơn 2 dữ liệu; trong đó kích cỡ toán hạng không thành vấn đề bởi sẽ có các toán hạng phụ thêm. Một trong số những cách để tăng tốc độ là xử lý trên nhiều dữ liệu hơn trong một câu lệnh cho trước, tức là cần đến toán hạng lớn hơn 2 dữ liệu.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh4.png
Phép tính MADD
Vậy thì tầm quan trọng của việc sử dụng các toán hạng 3+ là gì? Nói ngắn gọn,đó là: MADD, Multiply-ADDition operations (phép tính nhân-cộng) như C=(A*B)+C. Toán ma trận là nền tảng căn bản của việc xử lý dữ liệu và hình ảnh, và một trong số những phép tính cơ bản trong việc xử lý ma trận là phép nhân hai số rồi cộng với số thứ ba, tức là cần đến 3 toán hạng. Các GPU hiện đại đều vận dụng rất tốt nguyên tắc MADD này với các bộ xử lý có khả năng thực hiện một côn số khổng lồ các câu lệnh trong một khoảng thời gian rất ngắn, và việc thực hiện tốt MADD là một trong số những nguyên nhân giúp GPU có tốc độ xử lý dữ liệu nhanh đến chóng mặt.
Do các bộ xử lý x86 đếu không có khả năng MADD, nên bất cứ khi nào CPU cần thực hiện một phép tính dạng MADD, nó sẽ thực hiện hai (thậm chí còn nhiều hơn nữa) phép tính cộng và nhân riêng biệt. Vì thế cũng không có gì ngạc nhiên khi tính năng được ưa thích nhất của SSE5 do AMD phát triển là khả năng sử dụng câu lệnh với toán hạng 3+ bởi việc gộp hai câu lệnh làm một có thể làm tăng gấp đôi tốc độ trong một số trường hợp. Hơn nữa, việc sử dụng các câu lệnh như vậy còn giúp giảm số phép tính tải hoặc lưu trữ cần thiết, giúp tiết kiệm rất nhiều thời gian.
AMD đã cung cấp cho biết một trường hợp như vậy: một phép tính nhân ma trận 4x4 được mã hoá trong SSE3 và được tối ưu hoá trong SSE5. Mã SSE3 cần đến 34 câu lệnh, trong khi mã SSE5 thực hiện được phép tính này trong 20 câu lệnh. Giờ đây chỉ còn vấn đề về tốc độ xử lý mã hơn là số câu lệnh (trong ví dụ này, SSE5 không hẳn có tốc độ xử lý tăng 41% so với SSE3) bởi thời gian thực hiện và ngưng hoạt động của một câu lệnh có thể dao động tuỳ vào từng câu lệnh, nhưng cũng không thể phủ nhận rằng mã SSE5 có sự cải tiến rõ ràng về tốc độ.
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh5.png
http://tuvantinhoc1088.com/my_documents/my_pictures/Giainghia/SSE5/hinh6.png
Còn về tốc độ thực tế của SSE5, AMD cho biết họ đã phát hiện ra rằng một phép biến đổi hàm Cosin rời rạc - một phép tính rất quan trọng trong việc mã hoá hình ảnh và video – có thể thực hiện nhanh hơn đến 30% nếu dùng SSE5 thay vì SSE3. Ngoài ra, quá trình mã hoá cũng ấn tượng không kém với khả năng tăng tốc độ lên 5 lần đối với một số loại mã nhất định, mặc dù chúng ta có quyền nghi ngờ rằng con số thực tế sẽ nhỏ hơn. Dù thế nào đi chăng nữa thì lời hứa về các cải tiến tốc độ khác của AMD vẫn còn đó, cho dù nó còn tuỳ thuộc rất nhiều vào khả năng tận dụng tốc độ SSE5 của người lập trình cũng như vào thư viện toán học được tối ưu hoá của AMD.
Việc này cũng không bao hàm các câu lệnh không thuộc nhóm MADD/MAC. Tất cả các ví dụ của AMD trên đây đều liên quan tới các cải tiến đối với nhóm lệnh này, trong khi chúng tôi lại không có nhiều thông tin về tốc độ xử lý câu lệnh hoán vị, vector, hay câu lệnh chính xác. Chắc chắn chúng cũng tương tự như vậy, chỉ có điều tốt hơn tới mức độ nào mà thôi.
Cuối cùng, đây là một thời điểm đáng chú ý trong việc đánh giá các dự đoán về CPU và GPU đang tiến triển ra sao. Mặc dù AMD không đặc biệt nhắm đến GPU với SSE5, nhưng như đã đề cập từ trước, GPU đặc biệt xử lý rất nhanh các phép tính MADD, trong khi đó SSE5 lại đang hỗ trợ CPU trong lĩnh vực này. VIệc này sẽ không loại trừ GPU, nhưng cũng làm giảm ưu điểm của GPU. Khi các phiên bản SSE mới vẫn tiếp tục xuất hiện và bổ sung các tính năng tương tự như DSP và GPU, chúng cũng dần xoá bỏ khoảng cách giữa CPU và GPU cho đến khi hai khái niệm này nhập làm một.
Kết luận
Khác với Lightweight Profiling Proposal của AMD, giờ đây chúng ta không còn tìm kiếm một ý tưởng có khả năng thực hiện trong tương lai nữa, mà là một khả năng chắc chắn sẽ xảy ra. Trong khi AMD vẫn đang thu nhận phản hồi về đề xuất trước đó của họ, thì chúng ta đang thẳng tiến với SSE5. Một bộ gia tốc phần mềm SSE5 có thể sẽ xuất hiện giúp các nhà phát triển thử nhiệm mã tối ưu hoá của SSE5 và xem khả năng hoạt động của nó ra sao, để rồi sau một năm họ có thể cầm trong tay các bộ xử lý mẫu để kiểm tra mã hoá của mình. Kể từ năm 2008 trở đi, hỗ trợ SSE5 sẽ được tích hợp vào GCC cùng với thư viện phần mềm tối ưu hoá của AMD. Hiện AMD đang rất nỗ lực quảng bá cho ứng dụng SSE5 của mình.
Cũng cần chú ý rằng hiện vẫn tồn tại một số vấn đề tiềm ẩn. Đầu tiên là gã khổng lồ nặng kí có tên Intel. Với điều kiện bình thường, hỗ trợ của Intel đặc biệt quan trọng cho sự phát triển của bất cứ ứng dụng mở rộng nào, trừ AMD64/x86-64,sản phẩm xuất hiện khi nó đã trở nên thích hợp hơn nhiều đối với ngành công nghiệp máy tính hơn là loại IA64 của chính Intel. Nói ngắn gọn, chúng tôi tin rằng AMD sẽ không thể thành công với SSE5 nếu như Intel không muốn tích hợp nó vào các bộ xử lý của họ; tất nhiên tốc độ là rất quan trọng, nhưng đây không phải là trường hợp của AMD64, khi mà AMD có đủ thuận lợi về kỹ thuật và vị thế để đạt được những gì họ muốn. Không có sự hỗ trợ của Intel, các nhà phát triển sẽ chỉ tạo ra được một phiên bản ít quen thuộc nhất mà thôi, hoặc tệ hơn, là sẽ chỉ tập trung vào các phiên bản do Intel phát triển trong khi hai đại gia về CPU đang cạnh tranh khốc liệt, một điều có vẻ mang lại bất lợi nhiều hơn cho AMD, đậc biệt là với thất bại của họ trong việc tích hợp hỗ trợ SSE4 vào Bulldozer.
Ngoài ra, mặc dù AMD sẽ hỗ trợ SSE5 trong GCC, và có thể trong cả Visual Studio Compiler nữa, thì việc Intel không thể hỗ trợ SSE5 ở mức độ phần cứng cũng đồng nghĩa với việc họ sẽ không đưa chúng vào các chương trình biên dịch của mình. Các chương trình biên dịch của Intel gần như đã trở thành huyền thoại trong việc tối ưu hoá mã trong đúng trường hợp (và qua mặt AMD), với những nhà phát triển làm việc trên những ứng dụng chuyên về tính toán có vẻ không hứng thú với việc rời bỏ những chương trình này.
Vấn đề cuối cùng là về thiết bị phần cứng của AMD. Hiện tại chưa thể dự đoán được điều gì sẽ xảy ra trong 2 năm tới, nhưng chúng ta còn quan tâm tới việc này hơn cả Intel. SSE5 phụ thuộc vào Bulldozer, và AMD sẽ cần ra mắt Bulldozer đúng hẹn nếu như muốn giới thiệt SSE5 một cách thành công. Bất kỳ sự chậm trễ nào cũng có thể khiến SSE5 bở lỡ cơ hội tham gia vào vòng quay trong quá trình phát triển phần mềm.
Nhưng dù thế nào đi nữa, chúng ta cũng không nên xem thường SSE5 bởi theo chúng tôi, đây là phiên bản mở rộng bộ lệnh x86 quan trọng nhất kể từ SSE2, và đặc biệt, các câu lệnh mới như MADD có thể giúp tăng tốc độ đúng theo những gì AMD mong muốn, trong khi vẫn tránh được sự cần thiết phải tăng tốc độ xung nhịp cũng như những vấn đề liên quan. Nhưng hiện tại, chúng ta vẫn phải chờ đến khi Bulldozer ra mắt mới có thể biết được khả năng tăng tốc độ thực sự ra sao.
http://www.tuvantinhoc1088.com/index.asp?fref=news&ChannelID=6&ArticleID=5247