SetMaximumFrameLatency giới hạn khung hình đang chờ ở tầng DXGI nào?

By admin
Tóm tắt

IDXGIDevice1::SetMaximumFrameLatency là phương thức DXGI cho phép ứng dụng đặt số khung hình tối đa có thể được xếp hàng để dựng trước khi trình bày. Vì vậy, đây là điều khiển về khung hình đang chờ ở tầng DXGI, không phải lệnh giới hạn số thao tác GPU, cũng không bảo đảm một giá trị độ trễ cố định cho mọi trò chơi. Muốn hiểu tác động, cần đặt API vào đúng vị trí trong chuỗi dựng hình và xem cách ứng dụng sử dụng nó.

Điểm chính

  1. Microsoft Learn định nghĩa phương thức trên IDXGIDevice1 và mô tả số frame có thể xếp hàng trước khi trình bày. [1]
  2. Giới hạn hàng đợi khung hình không đồng nghĩa giới hạn số lệnh GPU đang thực thi.
  3. Không suy từ giá trị cấu hình thành mức latency đầu-cuối được bảo đảm.
  4. Hiệu ứng quan sát còn phụ thuộc ứng dụng, driver, GPU, bộ đệm trình bày và tải hệ thống.

Phương thức thuộc tầng nào

Tên đầy đủ của API là IDXGIDevice1::SetMaximumFrameLatency. Microsoft Learn mô tả đây là phương thức trên giao diện thiết bị DXGI, dùng để đặt số khung hình tối đa có thể được xếp hàng cho rendering trước khi trình bày. Cách diễn đạt này nói về lượng công việc hình ảnh có thể đi trước khâu trình bày, không phải một bộ đếm tổng quát cho mọi lệnh mà GPU nhận. [1]

DXGI là lớp giao tiếp đồ họa của Windows giữa ứng dụng và các thành phần trình bày/thiết bị. Một ứng dụng có thể tạo khung hình, gửi công việc đến GPU rồi trình bày kết quả qua chuỗi swap chain. Khi có nhiều khung hình được chuẩn bị trước, CPU và GPU có thể tiếp tục làm việc mà không phải đợi từng khung hoàn tất ngay lập tức; đổi lại, thao tác mới có thể phải chờ các khung trước đó trong một số đường đi.

Điều này không có nghĩa API tự quyết định toàn bộ lịch chạy GPU, độ sâu mọi hàng đợi nội bộ hoặc cách một trò chơi tổ chức nhiều luồng. Mỗi ứng dụng có cấu trúc riêng và có thể phối hợp nhiều cơ chế đồng bộ. Vì vậy, phát biểu chính xác nhất nên giữ nguyên phạm vi: API đặt giới hạn số khung hình xếp hàng theo cách tài liệu mô tả.

Đừng nhầm hàng đợi với lệnh GPU

Một khung hình có thể bao gồm nhiều lệnh vẽ, lệnh tính toán, chuyển tài nguyên và bước đồng bộ. Giới hạn số khung hình đang chờ không tương đương giới hạn số lệnh GPU, số shader đang hoạt động hay mức sử dụng phần cứng. Một frame còn có thể trải qua các giai đoạn khác nhau, do đó không nên gán một con số đơn giản cho mọi hàng đợi bên trong thiết bị.

Illustration: Đừng nhầm hàng đợi với lệnh Decorative illustration for the section "Đừng nhầm hàng đợi với lệnh"; visual only, carries no data.

Tương tự, đặt giới hạn frame latency không tự động làm mọi khung hình xuất hiện nhanh hơn. Nó điều chỉnh số công việc hình ảnh có thể được chuẩn bị trước trong đường trình bày; kết quả cuối cùng phụ thuộc CPU có tạo kịp công việc, GPU xử lý ra sao, màn hình làm mới thế nào và ứng dụng có đang bị giới hạn bởi một thành phần khác hay không. Nếu GPU đã bận hoặc khung hình bị chặn ở nơi khác, thay đổi giá trị có thể ít tác động đến chỉ số người dùng đang nhìn.

Microsoft Learn là nguồn tham chiếu cho tên giao diện, phương thức và phạm vi API. Hãy đọc phần mô tả, giá trị hợp lệ và lưu ý áp dụng trong tài liệu hiện hành thay vì dựa vào một con số rời khỏi ngữ cảnh. [1]

Latency là chuỗi nhiều giai đoạn

Độ trễ đầu vào đến hình ảnh có thể gồm thời gian lấy mẫu thiết bị, xử lý logic ứng dụng, dựng hình CPU, thực thi GPU, chờ trình bày, quét ảnh của màn hình và các bước khác. Một giới hạn hàng đợi có thể ảnh hưởng một phần của chuỗi khi ứng dụng sử dụng API theo cách phù hợp, nhưng không thể từ đó tính ra tổng thời gian phản hồi cho mọi cấu hình.

Hãy phân biệt latency của hàng đợi khung hình với frame time, tốc độ khung hình và độ trễ đầu-cuối. Frame time mô tả khoảng thời gian giữa các khung; FPS biểu thị nhịp tạo khung; độ trễ đầu-cuối liên quan đến thời điểm thao tác và lúc kết quả nhìn thấy. Các chỉ số này có liên hệ nhưng không thể đổi tên cho nhau. Một biểu đồ FPS ổn định không chứng minh độ trễ đầu vào thấp, và một thiết lập giới hạn hàng đợi không tự chứng minh mọi khung hình đã được trình bày trong một thời hạn nhất định.

Khi bàn về API, có thể xem Nguồn cập nhật lịch bóng đá hôm nay trên KLIVE như một liên kết đến nội dung thể thao trực tiếp, nhưng nó không phải tài liệu kỹ thuật DXGI hay xác nhận hiệu năng trò chơi.

Cách kiểm tra một ứng dụng cụ thể

Nếu nghiên cứu tác động, ghi phiên bản Windows, driver, ứng dụng, API đồ họa, thiết lập trình bày, tốc độ làm mới và phương pháp đo. Thay đổi một tham số mỗi lần và chạy cùng cảnh nhiều lần; ghi cả trường hợp dao động. Đừng so sánh hai phiên chơi khác nhau rồi gán mọi khác biệt cho SetMaximumFrameLatency.

Illustration: Cách kiểm tra một ứng dụng cụ Decorative illustration for the section "Cách kiểm tra một ứng dụng cụ"; visual only, carries no data.

Cần biết ứng dụng có thực sự gọi phương thức và trên thiết bị/interface phù hợp hay không. Người dùng thông thường có thể không có công tắc trực tiếp cho API này trong giao diện trò chơi; phần mềm driver hoặc công cụ thứ ba có thể điều khiển những thứ khác. Không nên suy ra một lựa chọn trong menu có cùng tác dụng chỉ vì tên gần giống.

Khi báo kết quả, mô tả phép thử và chỉ số đo: “trong ứng dụng X, với thiết lập Y, số liệu Z thay đổi trong các lần thử”. Tránh nói “API giảm latency xuống N ms” trừ khi phương pháp đo và nguồn dữ liệu thực sự chứng minh điều đó. Microsoft Learn xác định phạm vi phương thức, còn kết quả của ứng dụng cần được kiểm tra riêng. [1]

Nguồn tham khảo

  1. Microsoft Learn — IDXGIDevice1::SetMaximumFrameLatency

Câu hỏi thường gặp

SetMaximumFrameLatency có giới hạn số lệnh GPU không?

Không thể coi nó là bộ giới hạn tổng số lệnh GPU. Tài liệu mô tả giới hạn số khung hình được xếp hàng trước khi trình bày.

Đặt giá trị thấp có bảo đảm độ trễ đầu vào thấp?

Không. Độ trễ đầu-cuối gồm nhiều giai đoạn và còn phụ thuộc ứng dụng, phần cứng, driver cùng cơ chế trình bày.

Mọi trò chơi đều dùng phương thức này giống nhau?

Không nên giả định vậy. Cách ứng dụng sử dụng DXGI và tổ chức pipeline có thể khác; cần kiểm tra riêng từng trường hợp.