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:

  • Liệu các luồng trò chơi của bạn có đang chạy trên lõi phù hợp nhất với khối lượng công việc của chúng hay không.
  • Liệu 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 hay không.

Các thiết bị hiện đại thường sử dụng một cấu trúc gọi là điện toán không đồng nhất, trong đó các lõi có mức hiệu suất khác nhau:

  • Một hoặc một vài lõi mang lại hiệu suất cao nhất, nhưng tiêu thụ nhiều năng lượng hơn. Các lõi này đôi khi được gọi là các lõi "lớn".
  • Các lõi khác có hiệu suất cao nhất thấp hơn, nhưng tiết kiệm điện hơn. Các lõi này đôi khi được gọi là các lõi "nhỏ".
  • Không bắt buộc: Một hoặc nhiều lõi mang đến sự cân bằng giữa hiệu suất và sức mạnh. Các lõi này đôi khi được gọi là lõi "giữa".

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ỏ hơn 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 hơn tương ứng với chỉ số cao hơn (ví dụ: CPU "6" – "7") và lõi giữa nếu có sẽ chiếm các chỉ mục ở giữa (ví dụ: CPU "5" – "6"). Điều này là theo quy ước chung chứ không phải là sự đảm bảo.

Nếu bạn thấy một số luồng nhất định đang được lên lịch trên CPU không đáp ứng nhu cầu về hiệu suất hoặc năng lượng, hãy cân nhắc đặt đối tượng tương đồng CPU cho các luồng đó theo cách thủ công.

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 có chuyển đổi giữa các lõi hay không. 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.

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

Việc thiết lập đối tượng tương đồng CPU cho một luồng sẽ hướng dẫn hệ thống lên lịch cho luồng đó trên lõi đã cho khi trò chơi của bạn chạy ở nền trước. Có một số yếu tố cần xem xét khi thực hiện điều này:

  • Phần mềm nền tảng không thể điều chỉnh linh hoạt vị trí tác vụ cho các yếu tố trong thời gian chạy, chẳng hạn như mức tải và điều tiết nhiệt.
  • Việc kiểm thử hiệu suất trên các thiết bị khác nhau có thể mang lại đặc điểm hiệu suất rất khác nhau, đặc biệt là khi các thiết bị thay đổi đáng kể theo điểm giá hoặc theo ngày phát hành.

    Một thiết bị mới hoặc đắt tiền hơn có thể chạy một khối lượng công việc nhất định một cách thoải mái trên một lõi nhỏ. Tuy nhiên, một thiết bị cũ hoặc có giá cả phải chăng hơn có thể cần lõi lớn hơn để đáp ứng thời hạn cho cùng khối lượng công việc đó.

  • Khi buộc các đối tượng tương đồng với các lõi lớn, bạn có thể làm tăng mức tiêu hao pin và tải nhiệt một cách không cần thiết.

Vì những lý do này, thông thường, bạn nên tránh thiết lập đối tượng tương đồng với CPU theo cách thủ công.