Unity 6.3
0 онлайн 20 гостей 3 в системе
Вход

CPU и GPU контроль эффективности

Используйте режимы управления производительностью в адаптивной производительности, чтобы управлять тем, как приложение использует ресурсы CPU и GPU для балансирования производительности, потребления энергии и температуры устройства на мобильных устройствах.

CPU и GPU управление питанием

CPU и GPU являются основными источниками потребления энергии на мобильных устройствах, особенно во время игры. Запуск этих компонентов на максимальных тактовых частотах может быть неэффективным, потребляя избыточную мощность и генерируя тепло без пропорционального повышения производительности. Это может привести к перегреву, побуждая операционную систему снижать частоту CPU и GPU для охлаждения устройства. Как правило, операционная система контролирует тактовые частоты CPU и GPU.

Адаптивная производительность обеспечивает режимы управления производительностью для управления уровнями производительности CPU и GPU для оптимизации энергопотребления и теплового поведения.

Режимы управления производительностью

Адаптивная производительность имеет три режима для управления производительностью CPU и GPU: автоматический, ручной и системный. Как правило, автоматический режим обеспечивает наилучшие результаты при широком наборе условий.

Чтобы проверить, в каком режиме работает приложение, используйте IDevicePerformanceControl.PerformanceControlMode.

Примечание: Автоматические и ручные режимы управления производительностью доступны только на Android поставщиков услуг и в Симулятор устройства. Все другие поставщики используют управление производительностью системы.

Управление производительностью системы

В управлении производительностью системы операционная система управляет уровнями CPU и GPU. Этот режим по умолчанию для поставщиков, не являющихся Android. Это также рекомендуемый режим, если вы хотите использовать временное повышение производительности.

Автоматический контроль производительности

Автоматическое управление производительностью использует обратную связь в реальном времени, чтобы подстраивать уровни CPU и GPU под потребности вашего приложения и тепловое состояние устройства.

  • Приложение достигло целевой частоты кадров в предыдущих кадрах.
  • Температура устройства повышается.
  • Устройство близко к термической дроссельной заслонке.
  • Устройство связано с GPU или CPU.

Для достижения наилучших результатов используйте автоматический режим управления производительностью и установите targetFrameRate для приложения. Затем адаптивная производительность настраивает уровни CPU и GPU для поддержания этой частоты кадров при минимальном потреблении энергии и выделении тепла. Вы можете изменить целевую частоту кадров в зависимости от контента, воспроизводимого приложением, для дальнейшей оптимизации производительности. Например, вы можете снизить частоту кадров на экранах меню или паузы и восстановить ее во время игры.

Следующий пример показывает, как автоматически снизить давление и потребление энергии, где вам нужно только установить targetFrameRate:

using UnityEngine;
using UnityEngine.AdaptivePerformance;

public class AutomaticPerformance : MonoBehaviour
{
    // Declare 'ap' as a private class-level field to hold the IAdaptivePerformance instance.
    private IAdaptivePerformance ap;

    void Start()
    {
        // Get the Adaptive Performance instance.
        ap = Holder.Instance;
    }

    public void EnterMenu()
    {
        // Check if Adaptive Performance is active.
        if (ap == null || !ap.Active)
        {
            return;
        }

        // Set the target frame rate for the application.
        Application.targetFrameRate = 30;
        // Get the device performance control interface.
        var ctrl = ap.DevicePerformanceControl;
        // Enable automatic CPU and GPU level regulation by Adaptive Performance.
        ctrl.AutomaticPerformanceControl = true;
    }
}

Ручной контроль производительности

Ручное управление производительностью позволяет напрямую и точно регулировать уровни CPU и GPU. Тем не менее для большинства приложений оно не рекомендуется. Этот режим требует тщательного баланса с тепловым состоянием устройства и расходом батареи, так как неверные настройки могут привести к перегреву, тепловому троттлингу и чрезмерному расходу заряда. Используйте его только в особых сценариях — например, при бенчмаркинге или в тщательно оптимизированных пользовательских циклах.

Примечание: Для оптимальных результатов в большинстве случаев используйте автоматическое управление производительностью и установите только targetFrameRate.

Чтобы перейти в ручное управление производительностью, установите IDevicePerformanceControl.AutomaticPerformanceControl на false.

В ручном режиме вы можете изменить эти свойства, чтобы оптимизировать производительность CPU и GPU:

В следующем примере показано, как ввести ручное управление производительностью и установить максимальные значения уровней CPU и GPU:

using UnityEngine;
using UnityEngine.AdaptivePerformance;

public class ManualPerformance : MonoBehaviour
{
    // Declare 'ap' as a private class-level field to hold the IAdaptivePerformance instance.
    private IAdaptivePerformance ap;

    void Start()
    {
        // Get the Adaptive Performance instance.
        ap = Holder.Instance;
    }

    public void EnableManualMode()
    {
        // Check if Adaptive Performance is active.
        if (ap == null || !ap.Active)
        {
            return;
        }

        // Get the device performance control interface.
        var ctrl = ap.DevicePerformanceControl;
        // Disable automatic performance control to enable manual mode.
        ctrl.AutomaticPerformanceControl = false;
        // Set CPU level to maximum performance.
        ctrl.cpuLevel = ctrl.MaxCpuPerformanceLevel;
        // Set GPU level to maximum performance.
        ctrl.gpuLevel = ctrl.MaxGpuPerformanceLevel;
    }
}

Примечания:

  • Изменение уровней CPU и GPU действует только тогда, когда устройство не находится в состоянии теплового троттлинга, то есть WarningLevel не является WarningLevel.Throttling.
  • В некоторых ситуациях устройство может взять под контроль уровни CPU и GPU. Система регистрирует это событие и изменяет значение IDevicePerformanceControl.PerformanceControlMode на PerformanceControlMode.System.

Дополнительные ресурсы