Phân tích lịch biểu của luồng

Bạn cần xem xét một số điều để xác định xem các luồng quy trình trò chơi có được sử dụng và lên lịch phù hợp để đạt được hiệu suất tốt nhất hay không.

  • Tốc độ khung hình
  • Đa luồng và song song luồng
  • Đối tượng tương đồng của CPU

Đa luồng

Nhiều trò chơi và công cụ phát triển trò chơi sử dụng đa luồng để phân chia hoạt động của CPU thành các tác vụ logic, có thể chạy khá độc lập. Một cấu hình điển hình là một luồng trò chơi cho logic đầu vào và trò chơi, một luồng kết xuất để chuẩn bị và gửi các đối tượng cần vẽ và các luồng worker cho các tác vụ phụ khác như ảnh động hoặc âm thanh.

Bạn nên tải song song các luồng để tận dụng mức tăng hiệu suất của đa luồng. Ví dụ: trường hợp trò chơi và các luồng kết xuất đang chạy đồng thời một phần hoặc hoàn toàn trên nhiều lõi. Điều này không phải lúc nào cũng khả thi, chẳng hạn như trong trường hợp có phần phụ thuộc dữ liệu dùng chung. Tuy nhiên, khi có thể, điều này có thể làm giảm thời gian CPU và do đó có khả năng làm tăng tốc độ khung hình.

Trò chơi có luồng chính và luồng kết xuất song song, cũng như luồng worker và luồng âm thanh
Hình 1. Trò chơi có luồng chính và luồng kết xuất song song, cũng như luồng worker và luồng âm thanh

Đối tượng tương đồng của CPU

Một yếu tố ảnh hưởng đáng kể đến hiệu suất của khối lượng công việc của CPU là cách chúng được lên lịch trên các lõi. Điều này có thể được chia thành hai thành phần:

  • Các luồng trò chơi của bạn có đang chạy trên những lõi tốt nhất về hiệu suất hay không
  • Các luồng trò chơi của bạn có thường xuyên chuyển đổi giữa các lõi không

Bạn có thể điều tra hành vi của luồng CPU trong phần Mức sử dụng CPU bằng cách bật CPU trong cấu hình hồ sơ khi ghi lại dấu vết. Khi phóng to một phần trong dấu vết dưới 200 mili giây, bạn có thể xem từng quy trình đang chạy trên lõi CPU của thiết bị. Thông thường, các lõi nhỏ tương ứng với các chỉ mục nhỏ hơn (ví dụ: CPU 0-3), trong khi các lõi lớn tương ứng với các chỉ mục cao hơn (ví dụ: CPU 6-7).

Nhìn chung, khi trò chơi chạy ở nền trước, các luồng ổn định như luồng trò chơi và luồng kết xuất sẽ chạy trên các lõi lớn có hiệu suất cao, trong khi các luồng xử lý và luồng xử lý khác có thể được lên lịch trên các lõi nhỏ hơn.

Trò chơi có luồng chính và luồng kết xuất chủ yếu chạy trên các lõi lớn (CPU 6-7), được thể hiện bằng màu xanh dương nhạt
Hình 2. Trò chơi có luồng chính và luồng kết xuất chủ yếu chạy trên các lõi lớn (CPU 6-7), thể hiện bằng màu xanh dương nhạt

Bạn cũng có thể quan sát xem các luồng trò chơi của mình có thường xuyên chuyển đổi giữa các lõi hay không, nếu luồng chính và luồng kết xuất của bạn thay đổi lõi trong một khung CPU hoặc giữa hai khung CPU liên tiếp. Hành vi của CPU này có thể là một chỉ báo cho biết các luồng trò chơi của bạn chưa được affinit hoá đúng cách. Các chuyển đổi lõi như vậy phải chịu một số hao tổn từ tính năng chuyển đổi ngữ cảnh và mất trạng thái với bộ nhớ đệm/đăng ký của lõi, dẫn đến việc tăng độ dài khung CPU của bạn.

Trò chơi có luồng chính (Thread-7) và luồng kết xuất (Thread-8) chuyển đổi giữa các lõi, được thể hiện bằng màu tím
Hình 3. Trò chơi có luồng chính (Thread-7) và luồng kết xuất (Thread-8) chuyển đổi giữa các lõi, thể hiện bằng màu tím