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

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

Счетчики Qualcomm Adreno

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

Прилавок Описание
Чтение из вершинной памяти Пропускная способность данных вершин, считываемых из внешней памяти.
Среднее количество байт/вершина Средний размер данных вершин в байтах.
% Задержка при извлечении вершины Процент тактовых циклов, в течение которых графический процессор блокируется на обработке вершинных данных.

ARM Mali counters (WIP)

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

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

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

Контранализ

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

Пропускная способность памяти Vertex для чтения одного кадра составила в среднем 327 МБ/с, а пиковое значение — 1,16 ГБ/с.
Рисунок 1: Пропускная способность памяти вершин для чтения одного кадра, со средним значением 327 МБ/с и пиковым значением 1,16 ГБ/с.

Мы рекомендуем пиковую пропускную способность чтения из вершинной памяти не выше 1,5 ГБ/с и среднюю пропускную способность не выше 500 МБ/с. Более высокие значения указывают на одну из нескольких распространенных проблем:

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

Проблемы с размером вершин также можно диагностировать с помощью показателя «Среднее количество байт/вершина» , значение которого, как мы рекомендуем, не должно превышать 32 байта или количество вершин.

Средний размер вершины для одного кадра составляет 31,3 байта.
Рисунок 2: Средний размер вершины для одного кадра, среднее значение составляет 31,3 байта.

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