Как я могу прочитать используемую полосу пропускания по шине PCIe?

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

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

Я обнаружил, что ПК с разъемами PCIe 1.1 x16 борются с исходными данными, передаваемыми по графической карте.

Мой компьютер для разработки имеет слот PCIe 2.0 x16, и у него нет проблем с обработкой большого объема данных, которые первоначально отправляются на видеокарту.

Мне нужны цифры, чтобы доказать (или опровергнуть) мою точку зрения.

Я хотел бы иметь возможность определить:

На каком слоте установлена ​​видеокарта? Какова скорость этого слота? Имя карты Gfx Версия драйвера карты Gfx

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

Я знаю, что здесь также учитывается скорость системной памяти, например, данные передаются из ОЗУ по шине PCIe на графическую карту, так есть ли способ определить скорость системной памяти?

Наконец, я пишу на неуправляемом C++, поэтому доступ к библиотекам.NET не возможен.

2 ответа

Решение

Вы получаете ошибки, толкающие ваши огромные объемы данных, или вас "просто" беспокоит медленная скорость?

Я сомневаюсь, что есть какой-нибудь простой способ контролировать использование пропускной способности PCI-e, если это вообще возможно. Но должна быть возможность запрашивать тип шины, к которой видеоадаптер подключен через WMI и / или SetupAPI - у меня нет личного опыта или полезных ссылок, извините.

Для графических процессоров Nvidia вы можете попробовать использовать NvAPI_GPU_GetDynamicPstatesInfoEx:

Nvidia через драйвер GeForce предоставляет программный интерфейс ("NVAPI"), который, помимо прочего, позволяет собирать измерения производительности. Для технически склонных, вот соответствующий раздел в заголовочном файле nvapi.h:

ИМЯ ФУНКЦИИ: NvAPI_GPU_GetDynamicPstatesInfoEx

ОПИСАНИЕ: этот API-интерфейс извлекает структуру NV_GPU_DYNAMIC_PSTATES_INFO_EX для указанного физического графического процессора. Информация о каждом домене индексируется в массиве. Например:

  • pDynamicPstatesInfo-> utilization [NVAPI_GPU_UTILIZATION_DOMAIN_GPU] содержит информацию для домена GPU. В настоящее время существует четыре домена, для которых могут быть получены пороги использования графического процессора и динамического P-состояния: графический процессор (GPU), буфер кадров (FB), видео процессор (VID) и интерфейс шины (BUS).

Помимо этого комментария к заголовку, специфическая функциональность API не задокументирована. Информация ниже - наша лучшая интерпретация ее работы, хотя она основывается на многих предположениях.

  • Ожидается, что показатель графического движка ("GPU") станет вашим узким местом в большинстве игр. Если вы не видите это на уровне или близко к 100%, что-то еще (например, ваш процессор или подсистема памяти) ограничивает производительность.
  • Метрика буфера кадра ("FB") интересна, если она работает, как задумано. Из названия можно ожидать, что он будет измерять использование графической памяти (процент используемой памяти). Это не то, что это, однако. Скорее всего, это использование контроллера памяти в процентах. Если это правильно, он будет измерять фактическую полосу пропускания, используемую контроллером, которая иначе не доступна в качестве измерения любым другим способом.
  • Мы не так заинтересованы в видео движке ("VID"); Обычно он не используется в играх и обычно фиксирует 0%. Вы могли бы видеть перемещение диска только в том случае, если вы кодируете видео через ShadowPlay или транслируете на Shield.
  • Метрика интерфейса шины ("BUS") относится к использованию контроллера PCIe, опять же, в процентах. Соответствующее измерение, которое вы можете отследить в EVGA PrecisionX и MSI Afterburner, называется "Использование шины графического процессора".

Мы попросили Nvidia пролить свет на внутреннюю работу NVAPI. Его ответ подтвердил, что метрика FB измеряет использование полосы пропускания графической памяти, но Nvidia отклонила метрику BUS как "считающуюся ненадежной и, следовательно, не используемой внутри".

Мы спросили AMD, есть ли у нее какой-либо API или функция, позволяющая проводить аналогичные измерения. После внутренней проверки представители компании подтвердили, что не сделали этого. Как бы нам ни хотелось, мы не можем проводить аналогичные тесты на оборудовании AMD.

Другие вопросы по тегам