Железо,  Статьи

Об увеличении производительности видеокарт с помощью опции Resizable BAR/Smart Access Memory

Профессиональные видеокарты Nvidia, а также модели серии RTX3000 имеют функцию расширения размера регистра (Resizable BAR), теоретически увеличивающую производительность при проведении вычислительных операций с большими массивами данных, а также в играх. Современные видеокарты AMD поддерживают аналогичную технологию, называемую Smart Access Memory.

Для бесплатного увеличения производительности видеосистемы на компьютере стоит разобраться, что такое Resizable BAR и как включить этот параметр для получения дополнительных хешей/FPS.

Что такое Resizable BAR?

Возможность использования опции Resizable BAR появилась в 2008 году в стандарте PCI-E 2.0.

Для справки:

Спецификации PCI-E разрабатывает консорциум PCI Special Interest Group (PCI SIG), в который входят компании Intel, AMD, Nvidia, Microsoft, IBM, Sun Microsystems, HP, Broadcom и Agilent Technologies. Каждая из этих компаний по разному реализует поддержку возможностей, открывающихся при использовании Resizable BAR.

В устройствах AMD работа с Resizable BAR реализуется с помощью технологии Smart Access Memory (SAM). В некоторых конфигурациях включение SAM-технологии не увеличивает производительности системы, поэтому в большинстве случаев она отключена. Для новейших видеокарт серии AMD RX 6xxx поддержка этой технологии включена по умолчанию.

Иллюстрация выигрыша от использования опции Resizable BAR (Smart Access Memory) для видеокарт AMD:

У Nvidia функция расширения размера регистра раньше была доступна только на профессиональных видеокартах, например, Nvidia Tesla K40. Начиная с моделей Nvidia серии GeForce RTX 3000 опция Resizable BAR стала доступна и владельцам обычных видеокарт.Опция Resizable BAR расширяет доступные возможности работы устройств по шине PCI-Express. Это параметр, позволяющий оптимизировать порядок работы с BAR (Base Address Register) — базовыми адресами (регистрами) памяти или PCI I/O-диапазона.

За счет использования Resizable BAR появляется возможность одновременной работы центрального процессора с фрагментами памяти VRAM размером более 256MB, что увеличивает производительность приложений, работающих с большими массивами данных. Включение опции Resizable BAR позволяет ускорить обмен данными по шине PCI-E между аппаратным обеспечением и системными программами за счет оптимизации использования ограниченных ресурсов — памяти устройства и/или адресов шины ввода-вывода.

Неэффективное использование ресурсов может значительно уменьшить производительность видеокарт при вычислениях. На практике это проявляется в заниженном хешрейте при майнинге в сравнении с расчетным. Например, при тестировании видеоускорителя Nvidia Tesla K40 на алгоритме Ethash был получен хешрейт, равный единицам mh/s, хотя DAG генерировался со скоростью 275 MB/s, что соответствует 34 mh/s.

Как работает опция Resizable BAR?

Порядок работы с функцией Resizable BAR определяется установкой нужных значений регистров Capability и Control на PCI-E устройстве:

По умолчанию, для обеспечения совместимости, PCI-E устройства используют малый размер BAR (256 мегабайт), что снижает их производительность. Если использовать функцию расширения размера регистра (Resizable BAR), то можно изменять размер доступной процессору памяти видеокарты в диапазоне от 1 MB до 512 GB.

Для работы с функцией Resizable BAR на аппаратном уровне используется специальный регистр — Resizable BAR Capability register:

Доступный объем BAR-памяти определяется местонахождением бита регистра Resizable BAR Capability (от 4 до 23). При установке этого бита в положение 4, размер BAR равен одному мегабайту, если регистр Resizable BAR Capability равен 23, то возможна работа с адресами памяти до 512 GB.

Соответствие некоторых значений регистра Resizable BAR Capability и доступного размера адресов памяти:

Разработчики программ задают в них алгоритм, который на программном уровне определяет оптимальный размер задействующихся ресурсов и программирует его с помощью BAR Size field регистра Resizable BAR Control:

Доступный размер BAR в диапазоне от 1 MB до 512 GB, записывается в бит 12:8. Затем устройство и программа взаимодействуют между собой, согласуя порядок работы с BAR-ами.

Если используется совместимое аппаратное и программное обеспечение, при включении опции Resizable BAR устройство может задействовать больше ресурсов и тем самым обеспечить более высокую производительность. Нужно понимать, что на нужды других устройств станет выделяться меньше ресурсов, что иногда может привести к падению общей производительности. В связи с этим, при использовании видеокарт, работающих с опцией Resizable BAR, на компьютере требуется обеспечить наличие значительно большего объема системной памяти. Ее должно быть не меньше, чем доступный размер VRAM плюс память на нужды операционной системы и прикладных программ.

Как включить на компьютере опцию Resizable BAR?

Чтобы использовать потенциал функции Resizable BAR, оборудование компьютера должно уметь работать в соответствующем режиме.

Обычно для этого требуется установка видеокарты в полноценный слот PCI-E (без райзера или с устройством, способным обеспечить высокую скорость передачи данных по всем линиям PCI-E), наличие большого объема системной памяти (больше размера VRAM), а также поддержка этой технологии процессором и чипсетом. Также требуется включение соответствующих опций в BIOS видеокарты/материнской платы и поддержка на уровне драйвера/операционной системы.

Resizable BAR Capability работает с памятью размером более 4 GB только в режиме 64-bit, поэтому технология Resizable BAR работает только при использовании современной 64-битной операционной системы.

Для видеокарт GeForce RTX 3060 Ti, 3070, 3080, или 3090 первых выпусков для работы с Resizable BAR может понадобиться обновление BIOS. Подробная инструкция о работе с Resizable BAR есть на странице сайта Nvidia.

Официально технологию Resizable BAR на видеокартах Nvidia 3000-й серии поддерживают:

Теоретически работать с опцией Resizable BAR могут и более старые компьютеры с процессорами, которые поддерживают работу с инструкциями PDEP (PCI-E full-rate _pdep_u32/64). К ним относятся процессоры AMD с архитектурой Zen 3, 5 и выше, а также процессоры Intel 4-го поколения Haswel и новее.

Важным условием совместимости является поддержка материнской платой опции 4G Decoding.

Основные требования, которым должен соответствовать Windows-компьютер для полноценной работы видеокарт Nvidia серии RTX 30 с Resizable BAR (для GPU AMD требования идентичны):

  • видеокарта должна быть вставлена в полноценный слот PCI-E материнской платы (или через PCI-E 3.0 x16 райзер);
  • на компьютере под управлением 64-разрядной версии Windows 10 должны быть установлены драйвера Game Ready или NVIDIA Studio, поддерживающие опцию Resizable BAR (лучше Nvidia GPU driver версии 465.89 и выше);

О наличии поддержки опции Resizable BAR можно узнать в описании конкретной версии драйверов на сайте Nvidia:

  • BIOS материнской платы должен поддерживать работу с Resizable BAR (может понадобиться обновление), соответствующая функция должна быть включена пользователем. У разных производителей эта опция BIOS называется по разному, например, на платах фирмы ASRock — это опция Clever Access Memory, у ASUS — Re-Size BAR Support, у Gigabyte — Resizable BAR Support;

Включение опции CAM (Clever Access Memory) в BIOS материнской платы ASRock (меню Advanced — Chipset Configuration):

Включение опции Re-Size BAR Support в обновленном BIOS материнской платы ASUS (меню Advanced — PCI Subsystem Settings):

  • видеокарта должна иметь BIOS, поддерживающий работу с функцией расширения размера регистра. Компания Nvidia начала выпуск видеокарт RTX 3060 с обновленным BIOS-ом с 25 февраля 2021 года;
  • в BIOS материнской платы должны быть включены опции Above 4G Decoding и Resizable BAR (Clever Access Memory), выключен модуль Compatibility Support Module (опция CSM), а также включен самый высокий уровень поддержки (не ниже PCI-E Gen 3.0 или 4.0) ;
  • загрузка операционной системы должна производится с GPT-диска (не MBR!) с UEFI-BIOS.

Чтобы проверить соответствие компьютера/видеокарты нужным требованиям, нужно использовать утилиту Nvidia Resizable BAR Firmware Update Tool. Эта же программа поможет обновить видеокарты с неподходящим BIOS. Для видеокарт различных производителей может понадобиться специальное программное обеспечение, которое можно найти по ссылкам на этой странице.

Если компьютер поддерживает работу с Resizable BAR, программа NVIDIA Control Panel на вкладке System Information покажет одноименную строку, в которой будет написано Yes:

В диспетчере устройств на вкладке ресурсов видеокарты, поддерживающей работу в режиме Resizable BAR, должна быть видна опция Large Memory Range:

Как использовать функцию Resizable BAR в операционных системах с ядром Linux?

Чтобы включить поддержку Resizable BAR для видеокарт Nvidia, AMD, а также Intel в Linux, нужно обеспечить выполнение аппаратных и программных требований, описанных выше.

Работа устройств с увеличенным объемом ресурсов в операционных системах семейства Linux возможна благодаря встроенной в ее ядро поддержке Resizable BAR/Smart Access Memory.

Современные версии Linux (в том числе ОС для майнинга HiveOS) при работе в связке с драйвером amdgpu обычно сами меняют значение BAR0 для каждой видеокарты AMD таким образом, чтобы зарезервировать для CPU весь доступный размер VRAM. Если в системе нет достаточных ресурсов (адресного пространства), то соответствующим образом уменьшается и значение Resizable BAR.

Чтобы увидеть размер BAR, который на практике используется системой Linux, можно использовать команду:

sudo dmesg | grep BAR

При правильной конфигурации BIOS, на компьютере под управлением Linux для видеокарт AMD опция Resizable BAR доступна даже при включении видеокарт через райзер PCI-E x1.

В данном случае размер BAR равен 4096 мегабайтам, что соответствует объему VRAM видеокарты AMD Radeon RX584:

На компьютере, не поддерживающем работу с Resizable BAR, размер BAR равен 256 мегабайтам, независимо от объема VRAM видеокарт АМД:

При работе с видеокартами Nvidia в Linux система также сама пытается подобрать оптимальный размер BAR, но на практике это происходит значительно хуже чем у AMD.

Более полную информацию о видеокартах можно получить с помощью команды

sudo lspci -s 0000:01:00.0 -vv
где 0000:01:00.0 — адрес PCI-E порта, к которому подключена видеокарта, можно увидеть информацию о поддержке ею различных технологий, включая адресацию памяти.

Фрагмент информации, отображающейся о видеокарте AMD Radeon RX584 с включенной поддержкой Resizable BAR/Smart Access Memory (видно, что доступен весь размер памяти, равный 4 GB):

Пример информации о видеокарте GeForce GTX 1060 6GB, отображающейся по команде sudo lspci -s 0000:01:00.0 -vv (поддержка Resizable BAR отсутствует, доступно только 256 MB VRAM):

01:00.0 VGA compatible controller: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] (rev a1) (prog-if 00 [VGA controller])

 Subsystem: ASUSTeK Computer Inc. GP106 [GeForce GTX 1060 6GB]

 Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+

 Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-

 Latency: 0

 Interrupt: pin A routed to IRQ 134

 Region 0: Memory at de000000 (32-bit, non-prefetchable) [size=16M]

 Region 1: Memory at c0000000 (64-bit, prefetchable) [size=256M]

 Region 3: Memory at d0000000 (64-bit, prefetchable) [size=32M]

 Region 5: I/O ports at e000 [size=128]

...

 Capabilities: [600 v1] Vendor Specific Information: ID=0001 Rev=1 Len=024 <?>

 Kernel driver in use: nvidia

 Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

Пример информации, отображающейся в Linux по команде sudo dmesg | grep BAR на компьютере с видеокартами Nvidia GTX1066:

pci 0000:01:00.0: BAR 3: assigned to efifb

caller pmc_core_probe+0x8e/0x2e0 mapping multiple BARs

Заключение

Для использования опции Resizable BAR пользователь должен использовать совместимое оборудование и программы, которые должны быть настроены соответствующим образом. Так как алгоритм практической реализации работы с регистрами Resizable BAR задается в прикладном программном обеспечении, выигрыш от включения этой технологии не всегда одинаков (если он вообще есть).

В настоящее время подтвержден выигрыш в игровой производительности (до 12%) видеокарт Nvidia трехтысячной серии в Windows после включения Resizable BAR. Так как эта опция улучшает производительность подсистемы памяти, то выигрыш теоретически должен быть и при майнинге. К сожалению, на практике его получить не так легко, так как для этого программы для майнинга должны не только уметь работать с функцией расширения размера регистра, но и обходить ограничения относительно криптовалютных вычислений, налагаемые компанией Nvidia на видеокарты серии RTX 30xx.

В операционных системах на ядре Linux ситуация несколько лучше, так как поддержка Resizable BAR в них реализуется на уровне ядра. Для этого желательно использовать самые новые ядра Linux, а также иметь достаточный объем доступных аппаратных ресурсов (ОЗУ).

Исходя из сравнения производительности видеокарт, у которых работает опция Resizable BAR (в Linux) с такими, в которых используется стандартный размер BAR, равный 256 мегабайтам, можно сказать, что прирост хешрейта при использовании обычных программ для майнинга отсутствует.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

English English Русский Русский