
GPU ngày nay cấu tạo như thế nào?
Trước khi vào chi tiết, cần nói trước chúng ta chỉ bàn tới GPU RỜI của AMD, NVIDIA và Intel. GPU tích hợp (IGP) đi kèm các chip SoC tuy bản chất cũng có các thành phần tương tự nhưng sức mạnh thường không cao nên tạm bỏ qua.
Sơ đồ khối GPU Radeon R300 (DX 9). Đáng tiếc mình không tìm được bản vẽ nào cụ thể hơn về các khối chuyên môn 😔
Ở phía trên chúng ta đã thấy các công đoạn cơ bản để tạo ra một ảnh 3D (thành 2D) như thế nào. Có thể thấy toàn bộ quá trình này dù đã được đơn giản hoá vẫn có rất nhiều bước và mỗi bước cần một đơn vị chuyên trách để xử lý. Nên GPU nhìn chung là một thiết kế ASIC và từng thành phần trong GPU tự nó cũng là ASIC riêng. Đây là đặc trưng của GPU thời kỳ trước DX 10.
Việc mỗi công đoạn cần một đơn vị chuyên môn dẫn tới một bất cập là khi tăng sức mạnh xử lý hoặc vertex, hoặc geometry, hoặc texture, hoặc pixel đều dẫn tới tình trạng các công đoạn sau đó bị nghẽn cổ chai. Và khi đơn vị đó thảnh thơi nhàn rỗi thì các đơn vị khác phải cong đít lên chạy cho kịp. Kết quả là nhà sản xuất GPU bị kẹt ở cái thế rất khó tăng sức mạnh xử lý đồ hoạ vì để giữ được tính cân bằng thì khi tăng năng lực công đoạn A, họ phải tăng luôn các công đoạn còn lại để “bù đắp”. Nhìn chung rất khó để con chip đời sau mạnh hơn đời trước vì có quá nhiều thứ phải làm chỉ để tăng sức mạnh một cách nhỏ giọt.
Từ DX 11 trở đi, những thành phần có thể thay đổi cách làm việc (programmable) gọi chung là shader
Nhận ra sự bất cập này, ATI (trước khi AMD mua lại) đã đề xuất một hướng thiết kế GPU mới. Đó là những công đoạn nào có tính đơn giản và có thể thay đổi qua lại thì gom chung lại để xử lý trong cùng một đơn vị, gọi là unified shader. Từ đây khái niệm vertex shader, geometry shader, pixel shader đều được xem như nhau. Từ đó dẫn tới GPU sau này khi nói về sức mạnh xử lý, chúng ta sẽ hỏi nó có bao nhiêu nhân shader (hoặc SP, hoặc CUDA, hoặc ALU, tuỳ theo hãng, nhưng bản chất là một). Và đây chính là định nghĩa của GPU DX 10 – chúng phải có unified shader.
Sơ đồ khối Radeon HD 4870 và 5870 đều có unified shader (SP). Hãy chú ý phần vertex, geometry, pixel phía trên là nơi quản lý công việc. SP mới là nơi công việc được tiến hành
Tất nhiên không phải thành phần nào cũng có thể unified. Vẫn có những bộ phận phải đứng riêng vì tính chất của chúng khác hẳn nhau. Ví như tessellator trên DX 11, ray tracing trên DX 12, hoặc TMU, ROP, Display Engine. Chính vì thế mà kích thước GPU “phình to” lên cực nhanh so với CPU. Những con chip lớn nhất hiện nay phần lớn là GPU.
Quảng cáo
Sơ đồ khối GeForce GTX 480 với shader core chiếm phần lớn diện tích. Các thành phần chuyên môn vẫn có vị trí riêng trong toàn bộ cấu trúc
Và DX 11 cũng có thể xem là giai đoạn GPU của AMD và NVIDIA vẫn có những thành phần tương tự nhau – shader, tessellator, TMU, ROP. Nhưng từ đó trở về sau, nhiều thứ đã khác…
RT core và Tensor core
NR sẽ không thể ra đời nếu 2 thành phần trên không tồn tại. RT core hay ray tracing core là nhân tính toán ray trace được NVIDIA đưa vào kiến trúc GPU của họ bắt đầu từ dòng chip Turing (hoặc RTX 20). Đây cũng là cột mốc cho việc đổi tên sản phẩm từ GTX thành RTX của hãng này, trong đó thể hiện rằng sản phẩm này có năng lực ray trace (một điều tương tự như AMD có sản phẩm gắn mác Ryzen AI khác với Ryzen “thuần”).
Quảng cáo
Và cũng từ thế hệ RTX 20, NVIDIA còn có thêm thành phần khác là tensor core vốn phục vụ cho tăng tốc xử lý AI, chủ yếu dựa vào phép toán nhân ma trận. Một điểm cần lưu ý là RT core lẫn tensor core không có năng lực rasterization. Trong toàn bộ ống lệnh đồ hoạ 3D mà chúng ta nói ở phần trước, 2 đơn vị trên hoàn toàn không hỗ trợ được gì (ở đây được hiểu là tham gia vào quá trình raster). Đây cũng là lý do tại sao với phần lớn game 3D có trên thị trường, số lượng shader core (SP) vẫn quan trọng hơn cả.
Tuy vậy, giai đoạn này RT core và tensor core không được sinh ra cho mục đích NR. Xét riêng về năng lực đồ hoạ, chúng có những vai trò khác (dĩ nhiên chức năng chính của tensor core vẫn là tính toán AI, nhưng loạt bài này nói về đồ hoạ nên mình sẽ không nói tới AI).
Frame “real” vs. “fake”
Nếu quan tâm nhiều tới GPU, hẳn gần đây bạn sẽ nghe nhiều người nhắc tới “fake frame”. Sự xuất hiện của cụm từ này bắt nguồn từ tính năng frame generation có trên DLSS của NVIDIA lẫn FSR của AMD. Nhưng do AMD tương đối chậm chân hơn NVIDIA về đồ hoạ trong những năm qua (vì AMD lo tập trung làm CPU hơn) nên mình sẽ bỏ qua phe đỏ trong bài này.
Thực tế mà nói, “fake frame” mới xuất hiện từ RTX 40 trở đi, có nghĩa nó là một tính năng mới có sau này của DLSS chứ không phải có sẵn từ đầu. Vì sao lại như thế?
DLSS hay Deep Learning Super Sampling về bản chất là cách NVIDIA “tận dụng” tensor core để “làm việc có ích” khi xử lý đồ hoạ 3D. Như đã nói tensor core không có năng lực raster, có nghĩa thực chất nó không giúp gì được trong việc dựng hình, chiếu sáng, đổ bóng… Nôm na là “vô dụng”. Nhưng NVIDIA cũng không thể loại tensor core ra khỏi dòng sản phẩm GeForce vì vốn dĩ chúng đã là một phần của kiến trúc chip AI của hãng này. Vì thế họ đã “nghĩ ra việc mà làm” cho đống nhân xử lý không-raster này. Cụ thể là xử lý hậu kỳ (post processing).
Frame generation (“fake frame”) về căn bản, cái tên này có gây chút hiểu nhầm. Nó là việc tensor core dựa trên những frame (khung hình) được tạo ra từ ống lệnh 3D trước đó (sản phẩm của shader core), rồi bắt đầu “nội suy”, “thêm mắm dặm muối” cho ra frame thứ cấp. Nôm na nó giống như việc bạn copy văn mẫu từ đứa bạn chuyên văn viết ra từ trước, rồi “mông má” lại cho nó có tý khác biệt vậy. Gần gũi hơn thì nó y hệt việc bạn chụp ảnh bằng camera (raster) rồi sau đó đắp 7749 lớp filter lên để tạo ra những tấm ảnh khác có chung 1 nguồn. Generation ở đây nói cho đúng là re-generation (từ frame ban đầu).
Bên cạnh frame generation, DLSS còn có các tính năng khác như khử răng cưa (anti aliasing), tăng độ phân giải (upscale), tái tạo hình ảnh… mà về bản chất, đều là thuật toán xử lý hậu kỳ. Trong đó tính năng được “ca tụng” nhiều nhất là tăng độ phân giải, vì nó giúp phần tăng lượng fps cuối cùng xuất ra tới màn hình. Cụ thể các shader core thay vì render ra 1 frame có độ phân giải gốc (native) là 1080p, 1440p hay 2160p, thì dựa trên hệ số upscale, shader core nay chỉ cần render ra 1 frame có độ phân giải thấp hơn, tensor core sẽ “bùa chú” thêm số pixel còn thiếu. Ví dụ màn hình của bạn là 1440p, hệ số upscale là 2x, thì thực tế shader core chỉ render ra frame có độ phân giải 720p. Vì render ở độ phân giải thấp hơn, nên lượng fps đạt được cao hơn chủ yếu nhờ shader core không phải phí nhiều sức để làm ra 1 frame như trước nữa.
Dĩ nhiên việc dựa vô tensor core để tái tạo frame không phải không có nhược điểm. Trước hết frame được làm ra không phải “real frame”. Thứ tensor core tác động tới là nội dung của từng pixel, dựa vô các mô hình AI mà nó đã/đang có. Tự thân tensor core không vẽ ra điểm, không đổ bóng hay vật liệu nên chúng không “hiểu được” frame tiếp theo sẽ như thế nào. Do đó ở các thế hệ DLSS/FSR/XeSS đầu tiên, frame được tái tạo có chất lượng rất tệ với đầy hiện tượng bóng ma (ghost), nhiễu (noise), sai màu, lệch chi tiết… Đặc biệt nếu game yêu cầu tốc độ chuyển cảnh nhanh thì tình trạng lại càng rõ, khiến cho người chơi tinh mắt cảm thấy khó chịu và thuật ngữ “fake frame” ra đời như để châm biếm đống frame “có tiếng mà không có miếng này”.
Dù sao thì “fake frame” nói riêng và các mô hình AI nói chung đều có điểm chung là thuở đầu “ngây dại” mắc rất nhiều lỗi. Về sau này thì tập dữ liệu cũng như thuật toán xử lý đã được cải tiến nhiều nên chất lượng cũng tăng lên rõ rệt. DLSS 4 hiện được đánh giá có chất lượng gần tương đương “real frame” được render bằng shader core. Một trong các thay đổi chủ yếu là việc chuyển từ mô hình CNN (convolutional neural network) sang Transformer có độ thành thục cao hơn trước.
Công nghệ đồ họa NVIDIA RTX Neural Rendering – Cơ bản render, 3D graphics pipeline
Công nghệ đồ họa NVIDIA RTX Neural Rendering – Ray tracing, path tracing và rasterization
Nguồn: Tinhte.vn