Анализ использования пропускной способности памяти текстур

Пропускная способность памяти, используемая для текстурных данных, может стать потенциальным узким местом для производительности графического процессора вашего приложения. В системном профиле AGI есть несколько счетчиков, которые могут помочь диагностировать проблемы с пропускной способностью памяти для текстур.

Счетчики Qualcomm Adreno

На устройствах с графическими процессорами Qualcomm Adreno можно отметить следующие показатели:

Прилавок Описание
Скорость чтения текстурной памяти (байты/секунду) Пропускная способность данных текстуры, считываемых из внешней памяти.
% Текстура L1 Промах Промах кэша L1 при загрузке текстур.
% Текстуры не базового уровня Процент мипмапов, полученных при выборке текстур.
% Анизотропная фильтрация Процент текселей, подвергнутых анизотропной фильтрации.

ARM Mali counters

На устройствах с графическими процессорами ARM Mali можно отметить следующие показатели:

Прилавок Описание
Текстура считывает ритмы из внешней памяти. Данные, считанные из внешней памяти текстурным блоком, усредняются по ядрам шейдера.
Текстура считывает ритмы из кэша L2. Данные, считанные из кэша L2 текстурным блоком, усреднены по ядрам шейдеров.
[Более]

Для расчета общей пропускной способности на основе средних значений времени чтения значение счетчика умножается на ширину шины (обычно 16 байт) и на общее количество шейдерных ядер.

Контранализ

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

Пропускная способность памяти текстур для чтения одного кадра составила в среднем 565 МБ/с, а в пике — 2,30 ГБ/с.
Рисунок 1. Пропускная способность памяти текстур для чтения одного кадра, среднее значение 565 МБ/с, пиковое значение 2,30 ГБ/с.

Мы рекомендуем среднюю пропускную способность чтения текстурной памяти не выше 1 ГБ/с и пиковую пропускную способность не выше 3 ГБ/с. Промахи кэша L1 текстур также не должны превышать 10%. Более высокие значения пропускной способности или кэша L1 могут указывать на более серьезные проблемы с текстурами, в том числе:

  • Текстуры слишком большие : Большие текстуры увеличивают размер пакета, требуют больших затрат ресурсов и могут снизить эффективность кэширования.
  • Текстуры не сжаты : все телефоны Android поддерживают некоторые типы сжатия текстур, будь то ETC1 или ASTC. Текстуры следует сжимать для уменьшения размера пакета и снижения пропускной способности текстур.
  • Прочее : Следует рассмотреть ряд других аспектов, связанных с текстурами, включая текстуры, являющиеся степенями двойки, мипмаппинг, анизотропную фильтрацию и многое другое. Некоторые из них можно увидеть в профиле системы, как обсуждается ниже, тогда как другие могут потребовать более глубокого исследования.

Для трехмерных игр со свободной камерой следует использовать мипмаппинг для текстурных ресурсов, чтобы объекты, находящиеся на расстоянии от камеры, имели меньшую пропускную способность памяти, более высокую эффективность кэширования текстур и лучшее качество изображения. Для устройств, использующих графические процессоры Qualcomm Adreno, значения счетчика % Non-Base Level Textures ниже 10% в среднем могут указывать на неадекватный мипмаппинг.

Текстуры небазового уровня для одного кадра, со средним значением 9,2%.
Рисунок 2. Текстуры небазового уровня для одного кадра со средним значением 9,2%.

Ещё один важный аспект — использование анизотропной фильтрации, которая описывается с помощью счётчика % Anisotropic Filtered для графических процессоров Qualcomm Adreno и показывает долю текселей, подвергнутых анизотропной фильтрации. Хотя это может улучшить качество изображения в некоторых играх, это также может быть очень затратно, и его использование следует сопоставлять с затратами на производительность графического процессора.

Процент анизотропной фильтрации для одного кадра, среднее значение 10,8%.
Рисунок 3. Процент анизотропной фильтрации для одного кадра, среднее значение 10,8%.

Лучший способ диагностировать более конкретные проблемы — это провести трассировку профиля кадра для анализа текстурных ресурсов.