Skip to content
Book the Leap
Home Vol. 08 · Strategy Studio · Est. 2017

Frame Pacing Sample thể hiện CPU và GPU làm việc chồng lấp ra sao?

Tóm tắt

Frame Pacing Sample minh họa rằng CPU có thể chuẩn bị công việc cho khung hình kế tiếp trong khi GPU đang xử lý khung trước đó. Buffer và lịch trình giúp giải thích sự chồng lấp, nhưng cách triển khai mẫu thuộc môi trường Xbox GDK, không phải quy tắc chung cho mọi game hay API.

Điểm chính

  1. CPU và GPU là các giai đoạn khác nhau; trong một pipeline, chúng có thể làm việc trên những khung hình khác nhau cùng lúc.
  2. Microsoft mô tả Frame Pacing Sample như một mẫu Xbox GDK minh họa lịch trình khung hình và buffer trong môi trường đó. [1]
  3. Sự chồng lấp có thể hỗ trợ thông lượng nhưng không đồng nghĩa mọi thao tác đầu vào lập tức xuất hiện trên màn hình.
  4. Một sơ đồ mẫu giải thích quan hệ công việc, không chứng minh một trò chơi thương mại dùng cùng chính sách hoặc cùng độ sâu buffer.
  5. Cần tách khái niệm thông lượng, thời gian khung hình và độ trễ đầu vào khi diễn giải hiệu năng.

CPU và GPU không nhất thiết xử lý cùng một khung

CPU thường chuẩn bị lệnh, trạng thái hoặc dữ liệu để GPU thực hiện công việc đồ họa. Vì hai bộ xử lý có nhiệm vụ khác nhau, một hệ thống có thể tổ chức pipeline để CPU bắt đầu chuẩn bị công việc tiếp theo trong lúc GPU còn xử lý công việc đã gửi trước đó. Đây là ý nghĩa trực quan của sự chồng lấp: các giai đoạn hoạt động song song theo thời gian, không phải CPU và GPU cùng sửa một khung hình theo cùng cách.

Illustration: CPU và GPU không nhất thiết xử lý Decorative illustration for the section "CPU và GPU không nhất thiết xử lý"; visual only, carries no data.

Nếu buộc từng giai đoạn chờ nhau hoàn toàn, một đơn vị xử lý có thể nhàn rỗi trong khi giai đoạn kia hoàn thành. Tổ chức công việc theo hàng đợi có thể giúp tận dụng tài nguyên, nhưng cũng đặt ra câu hỏi về số khung đang chờ và thời điểm đầu vào được áp dụng. Thông lượng biểu thị lượng công việc hoàn tất theo thời gian; nó không tự cho biết một thao tác riêng lẻ mất bao lâu để trở thành hình ảnh.

Microsoft Frame Pacing Sample là ví dụ trong bộ Xbox GDK, dùng để minh họa các khái niệm lập lịch và buffer trong bối cảnh API đó. Hãy xem mã và phần giải thích đi kèm để hiểu những giả định của mẫu. [1] Không nên lấy một sơ đồ mẫu làm bằng chứng rằng engine khác có cùng số buffer, đồng bộ hoặc thứ tự gửi lệnh.

Buffer giúp phối hợp, không xóa mọi độ trễ

Buffer là vùng lưu trữ trung gian để các giai đoạn có thể trao đổi dữ liệu trong khi hoạt động theo nhịp khác nhau. Trong pipeline đồ họa, việc có khung đã chuẩn bị hoặc đang chờ có thể làm CPU và GPU ít phải đứng chờ nhau hơn. Nhưng khi thêm công việc vào hàng đợi, thời điểm trình bày khung và độ trễ cảm nhận cần được cân nhắc. Tác động cụ thể tùy cách ứng dụng tổ chức pipeline và chính sách trình bày.

Sơ đồ lịch trình thường dùng các ô hoặc hàng biểu diễn thời gian. Đọc trục thời gian, nhãn CPU/GPU và trạng thái buffer trước khi rút kết luận. Một ô CPU kéo dài không đồng nghĩa CPU luôn bận ở trò chơi khác; một khoảng trống cũng không nhất thiết chứng minh thiết bị không làm việc nếu sơ đồ chỉ thể hiện một tập sự kiện. Mẫu được thiết kế để giải thích một cách tiếp cận, không làm phép đo phổ quát.

Nếu nhiều khung đã được xếp trước, hình ảnh đang được xử lý có thể dựa trên trạng thái đầu vào lấy trước đó. Điều đó tạo ra lý do để quan tâm đến queue và nhịp trình bày, nhưng không cho phép suy ra con số độ trễ nếu chưa biết thời điểm lấy mẫu, tốc độ và các giai đoạn còn lại. Vì vậy, không đồng nhất ‘pipeline đầy’ với ‘đầu vào chắc chắn trễ’ trong mọi hoàn cảnh.

Thông lượng khác với độ trễ

Thông lượng cho biết số lượng công việc hoặc khung hoàn tất trong một khoảng thời gian. Độ trễ hỏi thời gian từ một sự kiện đầu vào đến kết quả mà người dùng nhìn thấy. Một hệ thống có thể duy trì thông lượng ổn định trong khi vẫn có một khoảng chờ giữa thao tác và hình ảnh; ngược lại, một khung phản hồi nhanh không đảm bảo mọi khung sau đó đều đều. Đây là hai câu hỏi khác nhau, nên hãy dùng phép đo tương ứng.

Illustration: Thông lượng khác với độ Decorative illustration for the section "Thông lượng khác với độ"; visual only, carries no data.

Frame pacing còn liên quan tính đều đặn của thời điểm khung được trình bày. Tốc độ khung trung bình không cho biết mọi khoảng cách giữa các khung đều bằng nhau. Khi người chơi nhận thấy giật, cần xem phân bố thời gian khung và thời điểm trình bày nếu công cụ hỗ trợ, thay vì chỉ dựa vào FPS trung bình. Cũng cần ghi rõ phần mềm đo và đại lượng mà nó thực sự báo.

Mẫu Xbox GDK giúp minh họa quan hệ giữa các giai đoạn trong một thiết kế cụ thể. Việc một cơ chế tồn tại trong mẫu không chứng minh trò chơi bạn đang chạy sử dụng nó, cũng không nói driver hay phần cứng khác sẽ áp dụng cùng cách. Giới hạn này đặc biệt quan trọng khi chuyển bài học từ ví dụ lập trình sang kết luận về thiết bị của người dùng.

Cách dùng mẫu để học mà không khái quát quá mức

Khi đọc sample, trước tiên xác định API, nền tảng, phiên bản SDK và mục tiêu của ví dụ. Sau đó theo dõi sơ đồ và đoạn mã để hiểu thời điểm CPU gửi công việc, lúc GPU thực hiện và buffer tham gia ở đâu. Nếu có thay đổi cấu hình hoặc nhánh thực thi, ghi riêng các điều kiện đó. Không bỏ qua phần mô tả giới hạn của mẫu để rồi trình bày nó như lời khuyên áp dụng cho mọi thiết bị.

Muốn kiểm tra game thực tế, chọn cảnh có thể lặp lại, giữ nguyên thiết lập, ghi thời gian khung qua nhiều lượt và quan sát công cụ phù hợp. Nếu mục tiêu là độ trễ đầu vào, dùng cách đo được thiết kế cho đại lượng đó; chỉ nhìn sơ đồ hay FPS không đủ. Nêu rõ điều gì là tài liệu mẫu, điều gì là phép đo tự thực hiện và điều gì vẫn chưa biết.

Bạn có thể lựa chọn xem livestream thể thao hôm nay trực tuyến tại KLIVE khi muốn theo dõi nội dung thể thao; liên kết này không phải một nguồn benchmark GPU hay xác nhận hiệu năng của mẫu Xbox GDK.

Khi muốn tìm hiểu thêm nội dung thể thao sau chủ đề kỹ thuật, bạn có thể tham khảo Lựa chọn xem livestream thể thao hôm nay trực tuyến; hãy xác nhận trực tiếp trên trang.

Nguồn tham khảo

  1. Microsoft — Frame Pacing Sample

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

CPU và GPU có thể làm việc đồng thời không?

Có thể, trong pipeline CPU có thể chuẩn bị công việc trong khi GPU xử lý công việc đã gửi trước đó; chi tiết tùy ứng dụng.

Frame Pacing Sample có đại diện mọi trò chơi không?

Không. Đây là mẫu Microsoft dành cho Xbox GDK; API và chính sách trong mẫu thuộc phạm vi nền tảng đó.

Thông lượng cao có nghĩa độ trễ đầu vào thấp không?

Không nhất thiết. Thông lượng và độ trễ là các đại lượng khác nhau, cần phép đo tương ứng.

Buffer có luôn làm trải nghiệm nhanh hơn không?

Không thể kết luận chung. Buffer giúp phối hợp công việc nhưng hàng đợi và lịch trình trình bày cũng ảnh hưởng thời điểm phản hồi.

Strategy is a craft, not a deliverable. Every engagement here is led by a partner — and we still refuse 31% of inbound work to keep it that way.

— Frog Sink House, Portland & Lisbon
Continue the conversation

Ninety minutes with a partner. No deck, no junior team, no follow-up funnel.