NVIDIA выпустила процессор Vera отдельной SoC, доступную сторонним производителям как Arm-конкурент Intel Xeon и AMD EPYC. Но при работе с GPU AMD или другими могут возникнуть проблемы.
Аппаратный баг вызывает ошибки при сочетании с видеокартами или ускорителями ИИ других производителей. Проблема возникает из-за того, как контроллеры PCIe процессоров Vera генерируют адреса памяти. При определенных условиях они создают недействительные адреса, которые нарушают надежное соединение со сторонними устройствами. Это происходит во время операций записи PCIe Memory-Mapped I/O (MMIO), когда процессор пытается записать данные с частичным байтовым разрешением в область MMIO.
Проблема усугубляется, когда эти области отображаются с помощью атрибута Arm Normal Non-Cacheable памяти «MT_NORMAL_NC», что создает значительные проблемы совместимости. Поскольку Arm использует более свободный порядок памяти для обычных некэшируемых атрибутов, это может вызвать ошибку, которая приведет к неправильной генерации адресов, повреждению данных и даже сбою устройств PCIe при выполнении рабочих нагрузок с интенсивным DMA, таких как обучение искусственного интеллекта или масштабное моделирование HPC. GPU NVIDIA разработаны с учетом особенностей Vera и их специфического доступа к памяти, поэтому никаких проблем не возникает.
Как пишет TechPoverUp, NVIDIA может решить эту проблему с помощью своих аппаратно-специфических ядер Linux, которые содержат обходные пути для таких сценариев. В NV-Kernels, которые NVIDIA хранит в отдельном репозитории для развертывания своего оборудования, есть патч для ядра Linux, который превращает MT_NORMAL_NC в Device-nGnRE (non-Gathering, non-Reordering, Early acknowledgement), что обеспечивает более строгое упорядочение. Производительность в основном сохраняется, но могут возникать повышенные задержки, которые могут привести к влиянию на производительность в некоторых рабочих нагрузках, чувствительных к вводу/выводу.
Эта проблема возникает не только с процессорами NVIDIA. Контроллеры PCIe систем Ampere Computing Altra на базе Arm тоже генерируют недействительные адреса при записи MMIO при определенных нагрузках. Ampere решает это похожим способом, что свидетельствует о том, что основной причиной может быть обработка памяти Arm при подключении внешних устройств. Однако пока не сообщалось об ухудшении производительности.








