
Мощные видеокарты в продвижении не нуждаются — обо всем уже позаботились майнеры. Но к архитектуре этих сложнейших устройств остается ряд вопросов из области «хардверного экстрима». И если в нашей тестовой лаборатории появился 3D-ускоритель от ASUS, построенный на базе графического процессора AMD Radeon RX Vega 56, постараемся осветить их. В этом нам поможет программный инструментарий RWEverything, с помощью которого будем анализировать программную модель PCIe-контроллера, ответственного за коммуникацию CPU с GPU.
Итак, знакомство в ROG Strix RX Vega 56 Gaming принесло две новости. Хорошая в том, что диапазон доступа к видео памяти лежит выше 32-битного лимита в 4GB. Плохая — в том, что размер диапазона всего 256MB, и это предполагает постраничный доступ к видео памяти вместо плоской линейной адресации ее полного объема.
Исследуемые объекты
Проанализируем дамп конфигурационных регистров устройства ASUS ROG Strix RX Vega 56 Gaming. Нас в первую очередь будет интересовать содержимое 64-битного регистра BAR0, задающее один из диапазонов доступа к видео памяти, а также структура Resizable BAR Capability, позволяющая управлять размером адресуемых диапазонов.
BAR0 представлен в дампе PCI-пространства в виде последовательности байтов, после перевода в 64-битное число его значение определяется как 000000400000000Ch. Расшифруем его согласно диаграмме, определяющей поля регистра PCI BAR, как это регламентирует документ PCIe Specification.
Хорошая новость в том, что базовый адрес (4000000000h) находится в диапазоне, расположенном вне 32-битного адресного пространства, верхний 4GB-лимит которого ограничен адресом 100000000h. Под самым пристальным вниманием — атрибуты базового регистра — биты [3-0] = 1100b:
- D3 = 1 — единица означает, что для диапазона разрешены спекулятивные операции, такие как опережающее чтение (prefetch) и группировка нескольких циклов записи малой разрядности в один цикл суммарной разрядности (write-combining).
- D[2,1]=10b — означает поддержку 64-битной адресации, при этом 32-битный регистр BAR1, расположенный после BAR0 используется как расширение BAR0, а конкатенация двух 32-битных регистров BAR0, BAR1 определяет 64-битный адрес.
- D0 = 0 — Memory space — для обозначения диапазонов памяти этот бит обнулен.
О максимальных и используемых возможностях
Пользуясь документами «Expanded Resizable BARs» и «Resizable BAR Capability» расшифруем содержимое структуры Resizable BAR Capability, акцентируя внимание на битовых полях, декларирующих максимальный поддерживаемый и текущий установленный размеры диапазонов доступа к видео памяти. Одноименный регистр Resizable BAR Capability, расположенный по смещению 4 относительно начала структуры (выделенной красным прямоугольником) содержит байты 00, F0, 03, 00, что соответствует 32-битному числу 0003F000h. Акцентируем внимание на том, что установлены биты от 12 до 17.
Согласно диаграмме Resizable BAR Capability Register это означает, что видео контроллер способен предоставлять диапазоны доступа к видео памяти, размер которых составляет от 256MB до 8GB. Регистр Resizable BAR Control, расположенный по смещению 8 относительно начала структуры (выделенной красным прямоугольником) содержит байты 40, 08, 00, 00, что соответствует 32-битному числу 840h или 0000.0000.0000.0000.0000.1000.0100.0000b в двоичном коде.
Согласно диаграмме Resizable-BAR-Control-Register это означает, что текущий — запрограммированный UEFI или (не)перенастроенный драйвером — диапазон составляет 256 Мегабайт, так как содержимое битового поля [12-8] соответствует десятичному числу 8. Если в рабочем документе PCI SIG смущает обилие редакторских правок, сверимся по последней версии PCIe Specification 4.0:
Запустив диспетчер устройств, своими глазами убедимся в том, какие ресурсы выделены графическому адаптеру ROG Strix RX Vega 56 Gaming в операционной системе Windows:
Как видим, диапазон расположен по адресам 4000000000h-400FFFFFFFh выше 32-битного лимита 4GB, но его размер всего лишь 256 MB.
Выводы
Видео адаптер ROG Strix RXVEGA56 08G Gaming декларирует способность включать диапазоны доступа к локальной памяти до 8GB, но программное обеспечение использует только ограниченный режим в 256 MB.
Вместе с тем, не следует преувеличивать значимость этого факта, ведь он влияет на представление ресурсов видео контроллера в адресном пространстве CPU и не влияет на bus-master операции GPU, выполняющего собственный командный поток в собственном программном контексте, за исключением сценария peer-to-peer взаимодействия между PCIe-устройствами, например несколькими GPU, когда это обстоятельство приобретает важность.