Анализ эффективности памяти

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

Адрено устройства

На устройствах Adreno начните с выделения периода времени, соответствующего одному кадру графического процессора, как описано в разделе «Оценка времени обработки кадров ЦП и графического процессора» . Используйте метод, описанный на этой странице, включающий использование % использования графического процессора или аналогичный счетчик для границ времени вашего кадра, поскольку все счетчики используют один и тот же метод синхронизации и позволят более точно оценить использование памяти (по сравнению с использованием кадра). временные границы, полученные из срезов графического процессора, данные которых собираются независимо от данных счетчика).

Дорожка использования совпадает с соответствующими счетчиками под ней.
Рисунок 1. Дорожка использования выстраивается в линию с соответствующими счетчиками под ней.

Чтение/запись итогов

Выделив один кадр в профилировщике, начните с просмотра счетчиков общего количества прочитанных (байт/сек) и общего количества записей (байт/сек) . Эти счетчики дают хорошее общее представление о том, какой объем данных проходит через шину памяти в течение одного кадра. Сделайте все возможное, чтобы свести к минимуму объем данных, отправляемых по шине, поскольку пропускная способность памяти является основным источником разряда батареи на мобильных устройствах.

Чтение и запись общих счетчиков
Рис. 2. Счетчики общего количества чтения и записи

Вы также можете проверить счетчики чтения памяти вершин (байт/секунда) и чтения памяти текстуры (байт/секунда), чтобы определить часть полосы пропускания, используемую для данных вершин и текстур.

Счетчики чтения памяти вершин и текстур
Рисунок 3. Счетчики чтения памяти вершин + текстур

То, что вы считаете «хорошим» для этих значений, зависит от типа рабочих нагрузок, наблюдаемых в вашем приложении. Например, 2D-приложения могут использовать относительно большие (~2+ ГБ/с) объемы пропускной способности чтения текстурной памяти, но пропускная способность вершинной памяти может быть очень минимальной (~50 МБ/с). Более подробную информацию можно найти в документации по Анализу пропускной способности памяти вершин и Анализу использования пропускной способности памяти текстур .

Принести киоски

Посмотрите на счетчики % Vertex Fetch Stall , % Texture Fetch Stall и % Stall on System Memory, поскольку они дадут вам некоторые подсказки об общей производительности памяти нашего приложения. Если значения превышают примерно 5 %, это означает, что ваше приложение либо неэффективно размещает данные в памяти, либо эффективно обращается к своим данным, чтобы воспользоваться преимуществами кеша. Ознакомьтесь с разделами Анализ пропускной способности памяти вершин и Анализ использования пропускной способности памяти текстур для получения подробной информации об улучшении использования памяти для этих типов ресурсов.

Счетчики задержек памяти
Рисунок 4. Счетчики задержек памяти

устройства Мали

На устройствах Mali сначала выделите период времени, соответствующий одному кадру графического процессора, как описано в разделе «Оценка времени обработки кадров ЦП и графического процессора» . Используйте метод, описанный на этой странице, включающий использование % использования графического процессора или аналогичный счетчик для границ времени вашего кадра, поскольку все счетчики используют один и тот же метод синхронизации и позволят более точно оценить использование памяти (по сравнению с использованием кадра). временные границы, полученные из срезов графического процессора, данные которых собираются независимо от данных счетчика).

Дорожка использования совпадает с интересующими вас счетчиками под ней.
Рисунок 5. Дорожка использования выстраивается в ряд с интересующими вас счетчиками под ней.

Вывод внешних итогов

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

Выход Внешние счетчики дорожек
Рисунок 6. Выходные внешние счетчики дорожек

Ввод внутренних итогов

Также есть счетчики, которые предоставляют информацию о самих тайниках. Вас интересуют счетчики «Входные внутренние циклы [чтения | записи]». Более высокие значения означают, что вы успешно обращаетесь к кешу, но делается слишком много запросов на чтение, и в результате код шейдера останавливается в ожидании доступа к памяти.

Вход Внутренние счетчики дорожек
Рисунок 7. Входные внутренние счетчики дорожек

Принести киоски

Следующий набор счетчиков, на которые вы можете обратить внимание, — это счетчики задержки циклов предварительной выборки вершин и счетчики задержки выборки текстур, поскольку они дадут вам некоторые подсказки об общей производительности памяти нашего приложения. Если вы видите значения выше ~5%, это означает, что вы либо неэффективно размещаете наши данные в памяти, либо неэффективно получаете доступ к нашим данным, чтобы воспользоваться преимуществами кеша. Ознакомьтесь со статьями «Анализ пропускной способности памяти [Vertex|Texture]», чтобы узнать, как улучшить использование памяти для этих типов ресурсов.

Принесите счетчики киосков
Рисунок 8. Счётные дорожки Fetch Stalls