Sự phát triển của card màn hình phần 2

Trong phần nầy, chúng ta sẽ tiếp tục tìm hiểu sự phát triển của card màn hình kể từ khi Nvidia chính thức xâm lăng thế giới đồ họa 3D cùng sự ra đời của kiến trúc CUDA và StreamSDK.

Tags: card màn hình
Bước phát triển kế tiếp của GPU là việc công bố chip Geforce3 vào năm 2001. Đây là chip đồ họa đầu tiên giới thiệu tính năng lập trình tùy chọn, được thêm vào bên cạnh những dòng xử lý đồ họa cố định thông thường. Bộ xử lý đổ bóng pixel và đỉnh chóp (vertex & pixel shader) ra đời. Direct3D 8 là bộ API đồ họa đầu tiên có phần tùy biến trong 1 dòng xử lý cố định khác.
Card màn hình Nvidia Geforce 3
GPU Geforce3 Nvidia

Mặc dù những bộ xử lý đổ bóng pixel và đỉnh chop vẫn còn rất hạn chế vào thời đó, nhưng hình mẫu đó vẫn còn được sử dụng cho tới ngày nay. Đỉnh chóp và pixel không thể nhân bản, lặp lại hay thêm vào trong tiến trình xử lý nhưng có thể bị hủy dưới một vài tình huống và điều kiện. Mỗi đỉnh chóp hay pixel trên lý thuyết có thể được xử lý độc lập với nhau, nhưng tất cả đều thông qua 1 mã lập trình thực thi giống nhau, giống như kiểu bộ xử lý stream truyền thống. Các chương trình pixel và đỉnh chóp trong Direct3D 8 được viết bằng hợp ngữ pseudo-assembly hỗ trợ véc tơ đặc biệt (4D), véc tơ vô hướng và các thao tác tải vân.

ATI Radeon 8500 thêm vào 2 phần mở rộng trong Direct3D 8.1. Đó là bộ đổ bóng pixel phiên bản 1.1, 1.2, 1.3 và 1.4 và bộ đổ bóng đỉnh chóp phiên bản 1.1 dành cho API có thay đổi một ít hợp ngữ và thêm vào các chỉ dẫn mới, cho phép chương trình dài hơn và nhiều thao tác xử lý vân hơn. Một điểm mốc khác nữa về khả năng lập trình của GPU hỗ trợ Direct3D 9 và Direc3D 9C: chương trình xử lý pixel và đỉnh chóp nâng cấp bộ đổ bóng pixel lên phiên bản 2.2, 2+ và 3.0. Hơn nữa, nhờ vào bản chất có thể lắp ghép với các chương trình xử lý tương tự của phiên bản trước, phần mở rộng này thêm vào ngôn ngữ cấp cao C-Style/Renderman, 1 dạng ngôn ngữ lập trình tương tự HLSL (High Level Shader Language) cho phép viết ra những chương trình xử lý đỉnh chóp và pixel trừu tượng, dễ đọc và tái sử dụng được.
Card màn hình sử dụng GPU Radeon 8500
Card đồ họa sử dụng Radeon 8500

Để đạt điều này, những chương trình này bổ sung kiểu biên dịch mã áp dụng cho CPU, tuy nhiên chưa đạt độ “chin muồi” như của CPU. Vào thời đó, với sự suy yếu của SGI, OpenGL tách riêng và ít nhiều trở thành 1 lực lượng dẫn đầu với những thay đổi căn bản và quan trọng trong ngành công nghiệp này và đưa ra OpenGL 1.5 và OpenGL 2.0, 1 loại ngôn ngữ lập trình đổ bóng chung cấp cao dành cho trình xử lý pixel và đỉnh chóp (common high level shading language for vertex and pixel programs), gọi là ngôn ngữ GLSL (OpenGL Shading Language).
Bộ đổ bóng đỉnh chóp Vertex Shader
Mô hiình minh họa Vertex Shader

Năm 2006, Microsoft lại lần nữa thay đổi căn bản API đồ họa bằng việc cho ra đời Direct3D 10 API, chỉ sử dụng với Vista. Ý định của Microsoft là hợp nhất các phiên bản trình đổ bóng khác nhau và khả năng của GPU vào chung 1 thứ bằng cách “ép” các nhà sản xuất sử dụng 1 lõi đổ bóng hợp nhất. Có nghĩa là cả tiến trình xử lý dòng lệnh đỉnh chóp và pixel do 1 bộ xử lý đơn lập trình được đảm trách thay vì sử dụng nhiều bộ xử lý như trong Direct3D 9. Điều này mang lại thuận tiện là: bất kỳ nơi nào trong máy tính cần xử lý đồ họa phức tạp thì mọi nguồn lực đồ họa sẽ tự dồn về đó để xử lý. Về lý thuyết, cơ chế này giúp loại bỏ tình trạng thắt cổ chai. Dĩ nhiên, sự thống nhất chỉ nằm trên giấy tờ. Thêm vào đó Direct3D 10 thêm vào 1 tầng lập trình khác gọi là geometry shader vào dòng lệnh và 1 mẫu bộ nhớ ảo mới.
Sử dụng GLSL và không dùng GLSL
So sánh 2 kiểu xử lý có và không sử dụng GLSL

Trong khi đó 2 nhà sản xuất chính trên thị trường là NVIDIA và AMD/ATI giới thiệu những bộ API của chính họ (CUDA của NVIDIA và CAL/CTM và nay là StreamSDK của AMD/ATI) vượt qua được tình trạng black box (Trong khoa học và kỹ thuật, black box là 1 thiết bị, hệ thống hay vật thể mà ta chỉ có thể biết được đầu vào, đầu ra có gì và hoàn toàn không biết gì về tiến trình xử lý bên trong nó, black box liên quan tới nhiều thứ: transistor, thuật toán hay tư tưởng con người. Đối lập với nó là white box, clear box hay glassbox), đồng thời khuôn mẫu về khả năng lập trình GPU từ các bộ API này mang lại cũng giúp đỡ các lập trình viên rất nhiều, giúp họ giao tiếp với những tính năng phần cứng cấp thấp.
Kiến trúc CUDA
Các hãng này đang muốn tăng trưởng thị trường GPGPU (general purpose GPU)/ HPC nên họ cho lập trình viên tận dụng tối đa sức mạnh của các GPU hiện đại trong khi mức giá và sự phức tạp khi thao tác với mã lập trình giảm đi rất nhiều.
(phần 3)