Hiện tại và tương lai dành cho GP-GPU

Cách đây chưa lâu card đồ hoạ 3D chỉ có công dụng duy nhất là làm tăng tốc độ khung/giây trong các game 3D ưa thích của bạn.

Tất nhiên, các công ty đồ hoạ cũng phải khắc phục một số vấn đề về chất lượng hình ảnh như độ chính xác trong quá trình xử lý màu và khả năng chống răng cưa ( AA ) hoặc bộ lọc vô đẳng hướng ( AF ) , nhưng tất cả những việc này cũng nhằm tăng tốc độ game và nâng cao chất lượng hình ảnh . Thực ra cũng có một số card đồ hoạ được thiết kế cho dân 3D chuyên nghiệp—CAD/CAM hay vẽ kỹ thuật… Nhưng tất cả đều là một dạng tái tạo hình ảnh 3D nào đó.  

Card đồ hoạ lần đầu thực hiện một chức năng “ngoài 3D” khi khái niệm tăng tốc video ra đời. Ban đầu quá trình này rất đơn giản, chỉ gồm một phần giải mã video MPEG rồi chuyển dần sang tăng tốc MPEG2 trong DVD. Nhưng giờ đây tính năng này đang phát triển rất nhanh. Các loại card đồ hoạ hiện đại giúp đẩy nhanh quá trình giải mã sử dụng những codec phức tạp như VC-1 và H.264 (cả hai đều dùng trong phim định dạng Blu-ray), cũng như quá trình giảm tiếng ồn, quản lý độ tương phản, và nhiều quá trình khác nữa. Nhiều tính năng trong số này được xử lý nhờ bộ phận video chuyên biệt trong GPU.  

Sự ra đời của DirectX 10 với Pixel Shader /  Vertex Shader  hợp nhất và tính năng phân phối đã đem đến một thế hệ phần cứng mới linh hoạt hơn và dễ dàng đảm nhiệm các nhiệm vụ hơn. Quá trình nghiên cứu việc áp dụng công nghệ xử lý song song vào GPU đã được tiến hành suốt nhiều năm qua. Mang tên "GP-GPU" (GPU cho mục đích sử dụng chung), và đã sẵn sàng gia nhập thị trường chủ đạo. Dưới đây là một số điều bạn có thể trông đợi:  

Thị trường hiện tại: CUDA và Stream SDK

Hiện tại, có hai tiêu chuẩn chính cho việc phát triển GP-GPU: CUDA và Stream SDK. CUDA là viết tắt của “Cấu trúc thiết bị hợp nhất tính toán” của Nvidia, một kiểu lập trình C sử dụng driver CUDA (với driver đồ hoạ của Nvidia) đề xử lý và thực thi mã lệnh trên GPU Nvidia. CUDA được hỗ trợ trên tất cả các card thuộc serie GeForce 8-, 9-, và GTX200, và có quan hệ mật thiét với cấu trúc GPU của Nvidia. Driver CUDA cũng có thể được dùng trên các thiết bị của hãng khác, nhưng sẽ không đạt được hiệu quả tối ưu và có thể gây ra một số vấn đề về mặt pháp lý.  

CUDA khá đơn giản, như mọi ngôn ngữ xử lý dòng khác. Nó dựa trên ngôn ngữ C và có mở rộng đôi chút, vì thế cũng khá quen thuộc với các nhà phát triển. Tuy việc viết những mã có tính song song cao và quản lý dữ liệu để đạt được hiệu quả tối ưu trên bộ nhớ GPU không hề đơn giản, nhưng kết quả lại rất tuyệt vời. Còn trong môi trường xử lý tính toán tốc độ cao (HPC - high performance computing), nơi những siêu máy tính chỉ chuyên tâm vào những nhiệm vụ nhất định với các phần mềm chuyên dụng, CUDA rất được trọng dụng. Nhiều mẫu phân tích tài chính, phần mềm khảo sát dầu mỏ và khí ga, mô hình y khoa, thiết kế động lực học, cùng nhiều công việc khó khăn khác đều sử dụng CUDA cùng với GPU Nvidia để để đạt tốc độ cao hơn so với khi chạy trên CPU. 

 

Cách làm của ATI cũng tương tự, nhưng có một số điểm khác. Lần thử nghiệm đầu tiên của công ty này trong lĩnh vực GP-GPU là qua driver CTM ( Close to the Metal ). Trong thực tế không ai muốn làm việc với mức độ quá thấp như trong CTM cả, vì thế ATI đã biến nó thành Stream SDK cùng với rất nhiều tính năng mới. Việc tiếp cận ở mức thấp được tiến hành qua một Lớp trừu tượng (CAL - Compute Abstraction Layer) thuận lợi hơn, và thư viện mã trong đó có Thư viện toán (ACML - Core Math Library ), thư viện hiệu suất APL (AMD Performance Library), và một thư viện chuyển mã video mang tên COBRA. Nhưng không may là không phải tất cả các thư viện này đều nằm sẵn trong SDK. Ví dụ ACML chỉ có vai trò tối ưu hoá các phép toán trên CPU AMD, và phiên bản có kèm ACML tối ưu chỉ được phát hành với số lượng thấp tuỳ theo yêu cầu.  

Mặc dù AMD chưa chiếm lĩnh được nhiều thị phần HPC như Nvidia, nhưng họ đã bắt đầu thu hút được sự chú ý của khách hàng và rất nhiều nhà cung cấp cũng đang cho ra đời các ứng dụng tương tự. Tuy nhiên, tiêu điểm của chúng ta ngày hôm nay không phải là các ứng dụng này, mà là phạm vi người sử dụng. Chúng ta đã có gì trong lĩnh vực này? 

Folding@Home

Đại học Stanford University đang sử dụng một trong những ứng dụng tính toán phổ biến nhất hiện nay mang tên Folding@Home (FAH), chuyên dùng để tính toán protein trên diện rộng, sử dụng hàng nghìn máy tính và máy chơi game PlayStation 3 trên toàn thế giới. Ý tưởng ở đây là hiểu rõ hơn cách các protein tự tập hợp , cũng như một số sai sót trong quá trình này -- được cho là nguyên nhân gây ra các chứng bệnh như Alzheimer và Parkinson.

Hiện tại phòng thí nghiệm Đại học Stanford đang phối hợp với ATI để sản xuất ra một phiên bản tăng tốc GPU dành cho phần mềm này của họ. Thế hệ thứ hai của ứng dụng này đã có bản beta miễn phí, và đang sử dụng CUDA đối với GPU Nvidia, hoặc CAL đối với card ATI.  

Theo trang web Client Stats thì khi bài báo này đang được viết, có khoảng 7600 GPU đang chạy ứng dụng FAH, tạo ra 840 teraflop năng lượng tính toán (đây không phải là một con số mang tính lý thuyết, mà là số năng lượng thực dùng để chạy các phép tính trong FAH), tức là trung bình khoảng 110 gigaflop mỗi GPU. Có vẻ PS3 vẫn đang dẫn đầu với tổng cộng 1,358 teraflop, nhưng đó là từ hơn 48,000 PS3 đang hoạt động. Mỗi PS3 tạo ra khoảng 28 gigaflop.  

Nói cách khác, một máy trạm GPU trung bình nhanh hơn 4 lần so với PS3, tính cả card đồ hoạ cũ và giá rẻ. Còn các loại card mới có tốc độ gấp từ 4 đến 6 lần. 

Hiện tại, card Nvidia vẫn tính toán nhanh hơn nhờ mã tối ưu hoá tốt hơn. Với driver mới nhất, các card GeForce đang được sử dụng ngày càng nhiều. Còn card ATI, vốn dựa trên driver CAL, vẫn chưa được tối ưu hoá một cách hiệu quả . Trên thực tế, Radeon HD 4800 có tới 800 SP ( Stream Processor ) , nhưng hiệu quả đạt được chỉ như một chiếc card thế hệ cũ với 320 bộ xử lý.  

Bản thân máy khách GPU2 Folding@Home và driver CAL/CUDA của các nhà sản xuất đồ hoạ vẫn cần tối ưu hoá thêm. Cả tốc độ, tính năng hiển thị và độ ổn định của những sản phẩm này sẽ còn tiếp tục được cải thiện trong vài tuần sắp tới. Hiện tại còn quá sớm để so sánh cấu trúc của các card đồ hoạ với nhau chỉ dựa trên FAH. Nhưng ứng dụng Client hiện tại vẫn khá ổn định và có tốc độ cao, vì vậy nếu có thể bạn vẫn nên sử dụng. 

 

Mã hoá video

Có lẽ đây một trong những công việc đau khổ nhất đối với người dùng PC hiện đại: bạn vừa download được một video mới từ mạng Internet hoặc từ chiếc camera của bạn, và bạn muốn ghi nó ra đia DVD hoặc đưa vào chiếc iPhone hoặc Zune của mình. Vậy là bạn liền khởi động công cụ chuyển mã video hoặc trình biên tập video iTunes và bắt đầu chờ đợi… Suốt 15 phút, máy tính của bạn trở nên không thể sử dụng được trong lúc thanh trạng thái chầm chậm bò qua cửa sổ. Hay tệ hơn là phải mất hàng tiếng sau đó đoạn video độ nét cao hay có format cao cấp như H.264 mới hoàn thành quá trình chuyển mã.

Mặc dù card đồ hoạ đã có tốc độ giải mã video khá cao, nhưng quá trình chuyển mã thì chỉ mới bắt đầu. Một chiếc card đồ hoạ giá $200 có thể giúp việc chuyển mã video nhanh hơn thời gian thực, đôi khi nhanh hơn rất nhiều, kéo 15 phút chờ đợi dài dằng dặc xuống còn 1 phút hoặc thậm chí thấp hơn. Quá trình chuyển mã qua đêm giờ đây chỉ còn là một thoáng chốc. 

Nvidia đang hợp tác với Elemental Technologies về một số sản phẩm mã hoá video bằng card GeForce. RapiHD là một plug-in dành cho Adobe Premiere Pro CS3 giúp thực hiện nhiều tính năng như: chuyển đổi kích thước và chuyển mã video, giải mã và mã hoá audio và video, cũng như tính năng chụp ảnh video trên GPU. Với người dùng nghiệp dư với túi tiền không mấy hào phóng, công ty này sẽ ra mắt bộ chuyển mã BadaBOOM. Hiện tại chưa có giá cố định, nhưng theo kế hoạch sẽ tương đương với các phần mềm người dùng nghiệp dư khác (từ $20–50).

Trong bản beta sử dụng, các tuỳ chọn chỉ bao gồm chuyển mã sang các format cầm tay phổ biến (PSP, iPhone, iPod, Zune). Một nhược điểm khác là hiệu suất thấp của nó – ví dụ như bạn không thể chuyển một chip AVCHD độ nét cao sang một clip H.264 độ nét tương tự để ghi ra đĩa Blu-ray. Nhưng tốc độ thì không có gì để phàn nàn: để chuyển 1 lip MPEG dài 1phút 50 giây với độ phân giải 720p sang dạng iPhone MP4 chất lượng cao, chúng tôi chỉ mất 30 giây. Ngay cả bộ mã hoá CPU được tối ưu hoá đối với CPU 4 nhân cũng mất đến 4 lần khoảng thời gian như vậy.  

 

Tất nhiên, Nvidia không phải là nhà sản xuất bộ chuyển mã tốc độ cao duy nhất. CyberLink cũng hỗ trợ tăng tốc GPU trên card đồ hoạ ATI trong PowerDirector 7 và đạt kết quả khá tốt. Thậm chí bạn có thể chuyển mã cùng một lúc nhiều file với tốc độ không thể tin được. Theo chúng tôi được biết, các plug-in dành cho những sản phẩm chuyên nghiệp như Adobe Premiere đang trong quá trình hoàn thiện, mặc dù tên hãng sản xuất và ngày phát hành vẫn được giữ kín. 

Chúng ta cũng không lấy làm ngạc nhiên nếu trong năm nay lại có thêm vài công cụ chuyển mã/mã hoá GPU ra đời.


Photoshop-ứng dụng cho mọi người

Mặc dù các hãng khác cũng có những plug-in khá tốt dành cho bản Premiere hiện tại, nhưng có vẻ như Adobe đang nghiêm túc xem xét GPU đối với các sản phẩm tương lai của họ.    

Flash Player 10 giúp bổ sung rất nhiều tính năng mới, trong đó có nhiều tính năng giúp tăng hiệu quả card đồ hoạ. Pixel Bender cho phép người dùng Flash sử dụng bộ lọc để điều chỉnh hình ảnh ứng dụng hoặc video. Một API 3D mới trong Flash giúp bạn dễ dàng vẽ và thao tác các đối tượng 3D. Tất cả các GPU hiện đại của Nvidia và ATI đều giúp tăng tốc ứng dụng này, cũng như tăng tốc độ tái tạo hình ảnh video để đạt chất lượng hình ảnh cao hơn. 

 

Tất nhiên, khi đã nhắc đến Adobe, không ai có thể quên được ứng dụng biên tập hình ảnh nổi tiếng Photoshop. Ứng dụng này phổ biến đến nỗi nó đã trở thành một động từ. Tin vui là phiên bản Photoshop tiếp theo sẽ còn cải thiện thêm nhiều tính năng nữa trên GPU của cả ATI lẫn Nvidia. Trong bản demo chiếu tại các buổi họp báo của hai công ty này, Adobe đã trình diễn khả năng phóng to, thu nhỏ, và quay những hình ảnh cực lớn với tốc độ rất cao của ứng dụng này. Việc xây dựng và điều chỉnh hình ảnh 3D trở nên nhanh chóng và gọn nhẹ, các hình chụp liền mạch có thể được xếp nối tiếp nhau trên một khối cầu 3D và trực tiếp thao tác. Còn rất nhiều tính năng hữu ích khác… nhưng hiện tại phiên bản Photoshop này vẫn đang trong giai đoạn phát triển, chưa rõ ngày phát hành nhưng có lẽ là vào khoảng cuối năm nay.     

Trận chiến hiệu ứng vật lý trong game 

Chắc bạn cũng biết Nvidia đã mua lại AGEIA và hiện đang quản lý middleware PhysX. Tất nhiên, điều đầu tiên họ làm là đưa lớp tăng tốc vẫn được sử dụng cho PhysX trên card AGEIA PPU sang card GeForce. Bản beta driver hiện tại của Nvidia có hỗ trợ lớp tăng tốc này trên các loại card GeForce 9800 GTX và GeForce GTX 260/280, cùng với phiên bản driver PhysX mới.   

 

Hiện tại có rất ít ứng dụng hỗ trợ hiệu ứng vật lý nâng cao phần cứng bằng middleware PhysX. Trong số đó có lẽ Unreal Tournament 3 là nổi tiếng nhất, nhưng toàn bộ các bản đồ và gameplay trong game đều đựơc thiết kế để phù hợp với hiệu ứng vật lý hạn chế. Vì thế nếu bạn muốn tăng hiệu ứng vật lý trong UT3, bạn cần chạy “bản đồ kích hoạt PhysX đặc biệt” có chứa các thành phần có thể tách rời. 

Một ứng dụng nổi tiếng khác có sử dụng PhysX là 3DMark Vantage. Khi sử dụng middleware PhysXtrong một bài kiểm định CPU đặc biệt, còn các bài kiểm tra tính năng đơn khác lại dùng DirectX với mã riêng của Futuremark. Với GPU và driver PhysX đã nói, lần kiểm tra này đạt tốc độ nhanh hơn hẳn: 130 phép tính/giây với card GeForce GTX 260, và 18 phép tính với card Core 2 Extreme QX9650.

 

Một số người nói rằng như vậy là gian lận. Và trên thực tế, Futuremark quy định cấm sử dụng driver đồ hoạ nào làm ảnh hưởng đến kết quả kiểm định CPU. Ngoài ra, một GPU duy nhất chỉ dùng để tăng hiệu ứng vật lý trong một bài kiểm định không gặp áp lực về đồ hoạ, vì thế nó không thể hiện được chính xác những tiến bộ về mặt vật lý đạt được trên card đồ hoạ trong một game chạy cả PhysX và đồ hoạ.

Nhưng mặt khác, đây không phải là một driver chuyên về 3DMark Vantage—nó giúp tăng tốc bất kỳ game hay ứng dụng nào hỗ trợ tăng tốc phần cứng PhysX PPU. Vì thế đây là một thước đo “hợp lệ” về khả năng tăng tốc vật lý. Nếu không, driver giúp tăng tốc PhysX đã không được đệ trình lên Futuremark vào thời điểm viết bài báo này, vì thế họ không hề bình luận về việc nó có “hợp lệ” hay không. Và kết quả đạt được cao hơn hẳn so với 3Dmarkscore với thiết lập Entry hoặc Performance, nhưng lại thấp hơn nhiều ở thiết lập High hoặc Extreme, nơi CPU có vai trò thấp hơn.  

Vậy phải chăng ATI hoàn toàn bị lép vế so với Nvidia trong lĩnh vực hiệu ứng vật lý? Cũng không hẳn. Bởi Havok cũng không hề kém cạnh, nếu không muốn nói là còn nổi bật hơn trong lĩnh vực middleware vật lý. Công ty này vừa được Intel mua lại, nhưng lại rất hứng thú hợp tác với AMD. Mới đây, Havok đã công bố bắt tay với AMD nhằm tối ưu hoá middleware vật lý của họ cho bộ xử lý AMD, trong đó có card đồ hoạ TI. Tuy nhiên phải một thời gian dài nữa họ mới ra mắt được một giải pháp thực sự như Nvidia. 

Và đây là một tin đồn khá thú vị: một hacker của trang NGOHQ.com đã nghiên cứu driver ATI và driver PhysX của Nvidia và làm nó chạy được trên một loại card serie Radeon HD 3800. Nếu đây là sự thực thì việc chạy PhysX trên phần cứng của ATI cũng không có gì khó khăn lắm. 

Nhưng chắc chắn mọi chuyện không đơn giản như vậy. Hẳn Nvidia cũng muốn thu được lợi nhuận lớn nếu chứng minh được rằng PhysX có thể được áp dụng rộng rãi, và sẵn sàng tăng giá trị cho card đồ hoạ của mình bằng cách chỉ hỗ trợ chúng mà thôi. Còn AMD/ATI lại chẳng có lý do gì để tăng hỗ trợ cho PhysX- một middleware của đối thủ cạnh tranh cả. Hoặc cũng có thể vấn đề phí bản quyền cũng khiến việc này chẳng mang lại lợi lộc gì cho ATI. Chúng ta chẳng thể nào biết được. 

Điều duy nhất nên biết là: tình hình thị trường hiện tại không tốt cho người dùng. Trong tương lai gần, sẽ có rất nhiều game gia nhập thị trường sử dụng middleware PhysX, và cũng có rất nhiều game sử dụng middleware Havok. Thật tệ bởi bạn chỉ có thể tăng hiệu ứng vật lý trên card đồ hoạ của ATI hoặc Nvidia. Điều này cũng giống như việc mua một chiếc CPU: một loại game có thể chạy nhanh gấp 10 lần trên CPU AMD, nhưng một loại khác lại có thể chạy nhanh gấp 10 lần nếu bạn chọn CPU Intel. Tất cả là do vấn đề bản quyền và hỗ trợ phần mềm.   

Các tiêu chuẩn chung

Rõ ràng là bối cảnh GP-GPU hiện tại không có lợi lắm cho việc phát triển phần mềm cá nhân. Thị trường sản phẩm tốc độ cao cần rất nhiều thiết bị để chạy phần mềm riêng của họ. Vì thế cũng chẳng mấy quan trọng nếu môi trường lập trình GP-GPU sử dụng phần cứng của quá nhiều nhà cung cấp, bởi việc phát triển phần mềm cá nhân cần vươn tới thị trường lớn nhất gồm các sản phẩm phần cứng tiềm năng cho khách hàng. Đối với họ, điều quan trọng nhất là những tiêu chuẩn hoạt động được trên tất cả các nhãn hiệu phần cứng khác nhau. Sự cạnh tranh giữa CUDA của Nvidia và Stream Computing SDK của ATI đồng nghĩa với việc hoặc bạn sẽ phải phát triển phần mềm dựa trên cả hai, hoặc sẽ bỏ lỡ một thị trường tiềm năng.   

May mắn là hiện tại đã có sẵn một số tiêu chuẩn như vậy. Apple vừa bắt đầu nghiên cứu Khronos Group, chuyên quản lý các tiêu chuẩn audio OpenGL, OpenGL ES, và OpenSL ES nhằm phát triển một API đồng nhất mang tên OpenCL (hay "Ngôn ngữ máy tính mở”). Mục tiêu của họ là xây dựng tiêu chuẩn lập trình dành cho việc tính toán dữ liệu song song trên nhiều thiết bị, trong đó có GPU và CPU. Có vẻ như tất cả các công ty đều sẽ có phần, bởi ngay từ đầu dự án này đã thu hút được sự tham gia của Nvidia, AMD, Apple, IBM, Intel, ARM, và rất nhiều công ty khác.

Hiện chưa có nhiều thông tin về OpenCL bởi nó mới đang trong giai đoạn bắt đầu. Ý tưởng đằng sau dự án này là tạo ra một ngôn ngữ nền tảng C để các nhà phát triển GPU và CPU viết driver. Hãng phát triển ứng dụng có thể viết một ứng dụng lập trình dạng OpenCL rồi chạy ứng dụng này trên bất kỳ phần cứng nào miễn là có driver OpenCL.

Nhưng theo lịch sử đã cho thấy thì quá trình chuyển đổi này khá chậm. Hiện cuộc đua tăng tốc GPU đã bắt đầu, và OpenCL sẽ chẳng có tác dụng gì nếu phải mất 18 tháng nữa tiêu chuẩn này mới được thông qua và ra mắt thị trường. Nhưng mặt khác, Apple đang rất nóng lòng đưa tiêu chuẩn này trở thành tính năng chủ chôt strong OS X 10.6 ("Snow Leopard"), vì thế có thể họ sẽ đẩy nhanh tiến độ công việc. 

Một tiêu chuẩn nữa rất đáng chú ý là DirectX. DirectX 11 sẽ có thêm một số tính năng mới, một trong số đó là một chức năng mang tên "Compute Shader." Lại một lần nữa, DX11 còn lâu mới xuất hiện và chúng tôi cũng chưa có nhiều thông tin về Compute Shader và về cách các lập trình viên sử dụng tính năng này. Chắc chắn tiêu chuẩn này sẽ chỉ dành cho Windows như công nghệ DirectX hiện tại, nhưng điều này khó có thể ngăn Direct3D thống trị thị trường đồ hoạ cá nhân. Câu hỏi ở đây là liệu compute shader trong DX11 có đủ rộng để hoạt động cả trên các ứng dụng phi đồ hoạ hay không? Liệu mẫu lập trình có dễ sử dụng và chạy được trên nhiều ứng dụng hay không? Khi nào thì nó sẽ có mặt trên thị trường? Liệu nó sẽ được sử dụng trên Windows 7, hay liệu người dùng Windows Vista có thể download và sử dụng DX11 hay không?

Vẫn còn rất nhiều điều cần giải đáp về cả OpenCL và DirectX 11,nhưng những câu hỏi này sẽ không còn một khi các tiêu chuẩn trên đã hình thành. Tin tốt lành là cả Nvidia và AMD/ATI đều rất hăng hái trong việc hỗ trợ các tiêu chuẩn này.