понедельник, 20 октября 2014 г.

Анализ загруженности GPU

Доброе время суток, уважаемые читатели. Думаю многие из вас задавались вопросом, как же расходуются ресурсы установленных в вашей системе графических ускорителей (видеокарт). Особенно это актуально при использовании ресурсоемких игровых приложений и в профессиональной области, такой как компьютерная графика.
В этом посте я постараюсь рассказать вам об одной полезной функции и возможностях, предоставляемых драйверами для графических ускорителей от компании NVIDIA. В данном посте мы рассмотрим сбор данных о загруженности GPU на представителях линейки профессиональных графических ускорителей NVIDIA Quadro K.
В работе с несколькими приложениями, активно использующими ресурсы GPU, может быть полезным отслеживание изменения объемов памяти графического ускорителя и загруженности при вычислениях. Особенно когда вы работаете со сложными программами и используете реализованные в них функции с GPU ускорением.
В работе мне приходится использовать как минимум 3 программы. Обычно основными приложениями, использующими GPU максимально плотно, являются: Autodesk Maya, Autodesk Mudbox, Adobe Photoshop и Autodesk Composite. А при работе с офисными приложениями, которые мне необходимы в ходе подготовки статей и написания книги, чаще всего используются браузер Mozilla Firefox и Microsoft Office. При этом данные программы запущены одновременно и в нескольких экземплярах, что конечно очень серьезно нагружает оборудование. Если вам интересно слежение за изменяющимися графиками и различного рода диаграммами, тогда прошу под кат!
Загрузка свежего драйвера для NVIDIA Quadro
Если вы предпочитаете обновлять драйверы для своего оборудования, стараться найти решение определенных ошибок в работе приложений и оборудования, тогда настоятельно рекомендуется загрузить одну из последних версий драйвера для GPU NVIDIA Quadro. Сделать это достаточно просто. Необходимо просто зайти на страницу "Загрузка драйверов" на сайте NVIDIA и выбрать необходимые типы данных для запроса на поиск.
Так как у меня англоязычная операционная система, соответственно выбран драйвер на английском языке. Но если же вы пользователь с закаленным характером, то я рекомендую использовать сертифицированную версию драйвера для продуктов Autodesk и других вендоров. В данном посте мы рассмотрим именно драйвер, сертифицированный под продукты Autodesk. Для этого, зайдите на страницу системных требований (System Requirements) к вашему программному продукту и в поле, где указаны требования для графического ускорителя (Hardware => Graphics Hardware), перейдите по ссылке Recommended Hardware.
В специальном конфигураторе вы можете выбрать тип оборудования, в нашем случае это Graphics Hardware, выбрать приложение (поле Products), версия продукта и операционную систему и вендора графического ускорителя.
После того как вы щелкните по кнопке Find, сервис быстро отобразит список сертифицированных GPU. Выбрав нужную модель и перейдя по ссылке на страницу с более подробным описанием, вы сможете увидеть все доступные и сертифицированные под данную версию драйверы. В нашем случае, для Autodesk Maya 2015 доступны драйверы версий 332.21 и 340.52. Это вполне свежие драйверы и они проверены разработчиками компании Autodesk на поддержку реализованных ими возможностей.
Очень полезно познакомиться с поддерживаемыми драйвером и графическим ускорителем возможностями. Например для Maya 2015 драйвер поддерживает практически все возможности движков виртуального пространства, но из-за того что движки разных поколений, некоторые из возможностей будут не доступны в одном, но при этом доступны в другом движке. Данная табличка позволяет определиться с тем, какой движок (Legacy Default Viewport или Viewport 2.0) вы будете использовать в процессе работы с программой. Начиная с Autodesk Maya 2015, по умолчанию используется движок Viewport 2.0.
В процессе установки драйвера, я настоятельно рекомендую выбирать режим установки "Выборочный" и поставить один важный для дальнейшей работы флажок. Флажок "NVIDIA WMI" позволяет установить расширения NVIDIA GPU для оснастки мониторинга производительности. Это важный момент, поэтому не забывайте о нем. Иначе придется все сделать ручками :)
Итак, новая версия драйвера загружена и возможно она уже установлена, теперь мы можем беспрепятственно перейти к знакомству с темой данного поста. Как же выполнять мониторинг загруженности GPU в процессе работы?
Создание собственного монитора производительности с помощью Microsoft Management Console (MMC)
Инструментарий Microsoft Management Console (далее просто MMC) появился в незапамятные времена операционных систем семейства Windows 2000 (1999 год) и значительно упростил возможности по администрированию систем на основе ядра NT.
Сейчас данный инструментарий обладает очень богатыми возможностями и позволяет выполнять как локальное, так и удаленное администрирование как клиентских, так и серверных операционных систем Windows.
Начиная с Windows 7 в инструментарии Управление компьютером (Computer Management) (Щелчок ПКМ на значке Мой компьютер => Управление) появился раздел Производительность (Performance). В нем сосредоточены все основные элементы мониторинга производительности системы и оборудования (ЦП, Диск, Память, Сеть и др.).
Для отслеживания загруженности оборудования на локальной системе, может быть полезен очень функциональный инструмент Монитор Ресурсов (Resource Monitor), который во многом может быть схож с аналогичными инструментами доступными на операционных системах семейства Linux, а в ряде случаев он превосходит их по функциональности. Доступ к нему можно получить из консоли Управление компьютером (Computer Management) и раздела Производительность (Performance).
Хоть данные инструменты и позволяют отслеживать нагрузку на основные элементы системы, такие как ЦП, Диск, Память, Сеть, они не позволяют напрямую использовать их для слежения за нагрузкой на графический ускоритель. Но с драйвером NVIDIA в систему будут добавлены специальные счетчики производительности, которые могут быть добавлены в Системный монитор (Performance Monitor) и сохранены для последующего применения.
Первое что нам необходимо сделать – получить доступ к консоли MMC.
ВНИМАНИЕ! В данном посте мы будем опираться на функционал англоязычной версии ОС Windows 8.1 Professional x64. Все скриншоты приведены с доступными в данной операционной системе функциями. Так же удостоверьтесь в том, что у вас есть права пользователя Administrator, и вы можете изменять параметры системы.
Доступ к консоли MMC можно получить следующими способами. Через рабочий стол Пуск (Start) или с помощью командной строки (cmd.exe).
На рабочем столе Пуск (Start) просто введите в поиске mmc и из представленных вариантов выберите mmc.exe (иконка окна с ящиком инструментов и символом щита). А в командной строке введите просто mmc и нажмите клавишу Enter. Откроется окно консоли MMC.
По умолчанию будет создано пустое рабочее пространство Console 1 – [Console Root] (Консоль 1 – Корень консоли). Теперь нам необходимо добавить базовую оснастку для мониторинга производительности. Мы добавим в консоль оснастку Performance Monitor (Системный монитор), аналогичную оснастке расположенной в консоли Computer Management (Управление Компьютером).
В меню выбираем File => Add/Remove Snap-In… (Файл => Добавить или удалить оснастку…), или же просто жмем на клавиатуре комбинацию клавиш Ctrl+M. Откроется диалоговое окно Add or Remove Snap-Ins в котором представлены все возможные и доступные оснастки для операционной системы Windows.
В данном диалоговом окне, выбираем Performance Monitor (Системный монитор) и нажимаем на кнопку Add > (Добавить >). В список Selected Snap-ins будет добавлен выбранная нами оснастка монитора производительности. Заметьте, данная оснастка добавляется в Console Root Node (Корневой узел консоли). После всех действий, вы можете спокойно нажать кнопку OK, и в окне редактора консоли отобразится выбранная вами оснастка.
После таких простых действий, можно прейти непосредственно к настройке монитора производительности.
Добавление счетчиков производительности NVIDIA GPU's в Performance Monitor
Пройдите по созданной вами оснастке до раздела Performance Monitor. В нем будет представлен интерфейс для монитора производительности, который по умолчанию пуст и доступен к настройке.
Далее нам необходимо настроить внешний вид данного инструмента. Так как по умолчанию используются яркие цвета, вы можете настроить внешний вид отображения графа на, более приемлемый для вас.
Лично мне больше нравится выводить яркие графы на более темном фоне, поэтому часто опираюсь на применение темных цветов. При этом многие профессиональные приложения также по умолчанию обладают темным оформлением интерфейса. Вы можете настроить граф монитора производительности аналогично тому, как было показано на рисунке выше. Для этого просто щелкните ПКМ по рабочей области и выберите Properties (Свойства).
Итак, наш граф приобрел более "творческий" вид, и теперь мы можем спокойно добавлять в него необходимые счетчики. Для этого, в панели инструментов Performance Monitor щелкните на значке Add (Добавить) (зеленый плюсик) или нажмите на клавиатуре комбинацию клавиш Ctrl+N. Откроется диалоговое окно Add Counters (Добавить счетчики).
Если у вас при установке драйвера все прошло хорошо, то в списке Available Counters (Имеющиеся счетчики) будет находиться специальная категория счетчиков NVIDIA GPU. Пользователю предоставляются следующие типы счетчиков:
  • % Cooler Rate – отображает процент активности системы охлаждения
  • % GPU Usage – отображает процент загруженности GPU
  • Available Memory (MB) – отображает доступный объем графической памяти
  • Core Clock (MHz) – отображает текущую частоту графического процессора в МГц
  • Power Consumption (mW) – отображает мощность питания графического ускорителя в мВт (милливат)
  • Temperature (°C) – отображает текущую температуру GPU в градусах Цельсия.
  • Total Memory (MB) – отображает доступный объем графической памяти но в его максимальном пределе.
  • Virtual Memory (MB) - отображает доступный объем виртуальной памяти но в его максимальном пределе
Нам потребуются всего три счетчика для мониторинга системы. Но так как масштабы значений различаются, мы их разведем между двумя отдельными Performance Monitor.
Для первого Performance Monitor можно выбрать счетчик % GPU Usage. Он позволит наглядно отслеживать загруженность GPU в процессе работы. В моем случае, были выбраны два GPU, установленные в рабочей станции FORSITE X1240q. Первый GPU – NVIDIA Quadro K2000 с подключенными к нему двумя Full HD дисплеями, а второй GPU – NVIDIA Quadro K4000 используемый в качестве мощного со-ускорителя как для окон проекций, так и для вычислений с помощью NVIDIA CUDA.
Следующее что нам необходимо добавить – мониторинг состояния и загруженности памяти GPU. Для этого можно создать еще один Performance Monitor и включить в него счетчики Total Memory (MB) и Available Memory (MB).
По завершению всех настроек второго Performance Monitor у вас должно получиться что-то похожее на приведенном выше скриншоте. Здесь хочется отметить, что вертикальную ось нужно немного подкорректировать, установив для нее значение по максимальному объему графической памяти. У меня выставлено значение 4096 Мб, что приравнивается к объему памяти NVIDIA Quadro K5000. Хотя на самом деле максимум составляет 3072 Мб, по доступному объему памяти у NVIDIA Quadro K4000.
Создав свой набор мониторов ресурсов GPU, его можно спокойно сохранить на жестком диске и создать ярлычок. Операция сохранения и создания ярлыка выполняется стандартными средствами Windows. В редакторе MMC выбирается меню File => Save As… и сохраняется файл с расширением .msc.
Проверим мониторы производительности на деле и посмотрим на активность GPU и использованием графической памяти разными приложениями.
Анализ нагрузки на GPU
Первое что может быть интересным – объем графической памяти используемый системой по умолчанию (после загрузки рабочего стола).
По умолчанию операционная система и графическая оболочка использует около 150 Мб графической памяти основного GPU. Под основным GPU я подразумеваю тот графический ускоритель, к которому подключены дисплеи (мониторы). Однако, второй (GPU) также используется системой и по умолчанию система задействует около 85 Мб графической памяти.
А вот теперь посмотрим на то, как используется память графических процессоров в профессиональных приложениях. В данном примере одновременно запущены три приложения: Autodesk Maya 2015, Autodesk Mudbox 2015 и Adobe Photoshop CC.
Учитывая полноценную поддержку multi-gpu систем в современных программах, приведенный выше граф наглядно показывает, что приложения максимально плотно используют память второго GPU, в данном случае это NVIDIA Quadro K4000 (зеленая линия).
В памяти второго графического ускорителя могут храниться различные данные. Например, Adobe Photoshop спокойно загружает в нее изображения и холсты. А такой пакет как Autodesk Maya и новый движок Viewport 2.0 используют возможности второго GPU для хранения данных сцены, данных GPU Cache и многое другое.
Но если вы выполняете, какие то операции в программе, оба GPU в вашей системе будут задействованы для вычислений, что демонстрирует приведенная ниже иллюстрация.
Конечно, аналогичным образом будут поступать и современные unbiased визуализаторы, такие как NVIDIA iray, Chaos Group V-Ray RT GPU, OTOY Octane Renderer и другие. Они могут использовать вычислительные возможности, как всех графических ускорителей, так и отдельно выбранного ускорителя.
 
Обычно, рекомендуется использовать два GPU, когда первый используется для отображения окон проекций и работы приложений, а второй используется для вычислений общего назначения с помощью NVIDIA CUDA. Все как видите, предельно просто.

На этом все. Вы можете теперь самостоятельно поиграться с анализом производительности и нагрузки вашего GPU и узнать о потребляемых приложениями ресурсах.

До скорой встречи, ваш dimson3d! :)

Пост подготовлен при поддержке:

1 комментарий:

Aleksey Ponomarenko комментирует...

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