外部GPU和Raspberry PI计算模块4

2020-10-28 06:41:23

Raspberry PI计算模块4避开了内置的USB 3.0控制器,并提供了1x PCI Express通道。

稍微老一点的Raspberry Pi 4型号B可能会被黑进PCIe车道(在此过程中牺牲了VL805 USB 3.0控制器芯片),但这是一个有点微妙的操作,只有少数胆大妄为的人尝试过。

观看此视频,了解更多关于我在CM4上使用这些GPU的体验:在Raspberry PI计算模块4上使用GPU!

既然CM4的IO板有一个1X插槽,那么插入任何PCI Express卡并用Raspberry PI测试它的功能就变得微不足道了。还有我的测试!我在我的Raspberry Pi PCIe设备兼容性数据库中详细介绍了我测试过的所有卡和结果,您可以查看相关问题以了解有关每张卡的更多信息。

PI';的BCM2711 SoC包括一个VideoCore 6 GPU,能够实现H.265 4Kp60解码、H.264 1080p60解码和1080p30编码等功能。它还支持OpenGL ES 3.0,就其成本而言,它并不是一个糟糕的小GPU。

但是有很多人想知道你是否可以使用带有PI的NVIDIA或AMD GPU,我试着回答了这个问题。

部分原因是BCM2711 ARM SoC上缺乏对I/O条空间的支持,部分原因可能是驱动程序错误或仅在X86或某些ARM架构上支持的功能。

我尝试了以下驱动程序,但都未能以某种方式完全初始化卡:

新的开源驱动程序(您必须重新编译Raspberry PI OS内核才能启用它)。

RADEON开源驱动程序(您必须重新编译Raspberry PI OS内核才能启用它)。

AMDGPU开源驱动程序...。在尝试使用后,我发现它不适用于像我试过的那样旧的显卡!

仅仅是将硬件插入可能就是您的第一个挑战,因为许多(事实上,几乎所有)GPU的物理插槽都无法插入IO板的x1 PCIe插槽。您可以砍掉中间的位以使卡在物理上合适,这样就可以工作了,但幸运的是,x1到x16适配器允许将较大的卡插入x1插槽(尽管没有增加带宽通道)。

大多数卡在可用通道较少的情况下都工作得很好;它们只是不能在GPU和CPU之间获得足够的带宽。

在我运行lspci时,这两张卡都被正确识别,所以至少有一线希望:

#NVIDIA GeForce GT 71001:00.0VGA兼容控制器:NVIDIA Corporation GK208[GeForce GT710B](版本A1)(PROG-IF 00[VGA控制器])子系统:Zotac International(MCO)Ltd.GK208B[GeForce GT710]标志:600000000(32位,不可预取)[禁用][大小=16M]内存<;未分配>;(64位,可预取)[禁用]<;(64位,可预取)[禁用]I/O端口位于<;未分配>;(64位,可预取)[禁用]I/O端口位于<;未分配>;(64位,可预取)[禁用]I/O端口位于<;未分配>;(64位,可预取)[禁用]I/O端口位于<;未分配>;(64位,可预取)[禁用]I/O端口位于<;未分配>;[DISABLED][虚拟]601000000扩展只读存储器[DISABLED][SIZE=512K]功能:[60]电源管理版本3功能:[68]MSI:ENABLE-COUNT=1/1 MASKABLE-64BIT+功能:[78]Express旧式端点,MSI 00功能:[100]虚拟通道功能:[128]电源预算<;?>;功能:[600]供应商特定信息:ID=0001rev=1 LEN=024<;?>;#AMD RADEON 545001:00.0VGA兼容控制器:Advanced Micro Devices,Inc.。[AMD/ATI]CEDAR[RADEON HD5000/6000/7350/8350系列](PROG-IF 00[VGA控制器])子系统:VISIONTEK CEDAR[RADEON HD5000/6000/7350/8350系列]标志:快速设备,IRQ255内存<;未分配>;(64位,可预取)[已禁用]内存600000000(64位,不可预取)[已禁用][大小=128K]<;未分配>;I/O端口;[DISABLED][虚拟]600020000扩展只读存储器[DISABLED][SIZE=128K]功能:[50]电源管理版本3功能:[58]Express旧式端点,MSI00功能:[A0]MSI:ENABLE-COUNT=1/1 MASKABLE-64BIT+功能:[100]供应商特定信息:ID=0001rev=1 LEN=010<;?>;功能:[150]高级错误报告。

PCI Express设备需要BAR(基地址寄存器)空间才能初始化内存并将其映射到计算机自己的内存空间,PI目前为此为设备提供了64MB的RAM。

对于普通PI4中使用的VL805USB 3.0控制器这样的简单设备,以及NVMe驱动器和SATA适配器等设备来说,这都没问题。但是GPU需要更多的条形空间,所以经过一些研究,在PI论坛上的几位工程师的帮助下,我记录了将PI上的条形空间扩展到1 GB的过程。

NVIDIA GPU对只有256MB的RAM很满意,但AMD Radeon想要1 GB。这也意味着,当您想要将某些应用程序与PCIe设备配对时,最低端的1 GB计算模块4可能不足以满足这些应用程序的需要。

一旦我解决了条形图空间问题,并且dmesg显示所有的MEM空间都已正确分配(尽管IO空间没有正确分配,因为BCM2711没有任何用于PCIe设备的IO寄存器),我就开始尝试我能找到的所有驱动程序:

Nvidia显卡的新开源驱动程序必须编译成一个自定义的PI内核--PI OS和Ubuntu for PI都没有默认的内核(以节省镜像中的空间)。一旦我编译了它,如果我插入了卡,PI在引导期间就完全锁定了。没有串行输出,什么都没有。

由于大量错误,NVIDIA ARM32驱动程序将无法编译内核模块;我不确定此驱动程序目前是否可以安装在任何ARM设备上。

NVIDIA ARM64驱动程序已编译并加载,但在卡初始化期间输出RmInitAdapter失败!我就是忘不了这一点。

**RADEON开源驱动**也需要编译,几乎初始化了板卡,但抱怨找不到PCI I/O BA。哦,好吧。

我想也许我仍然可以在NVIDIA卡上使用CUDA,即使GPU不能初始化并通过HDMI输出信号,也不能与Xorg一起工作。但是可惜的是,CUDA工具似乎需要卡以与图形位相同的方式初始化,所以我得到了相同的RmInitAdapter失败!Dmesg中的消息。

这也证明了710可能与CUDA 11不兼容,因为它没有在GPU兼容性页面上列出(即使705、720、730和720是),即使它被宣传为有192个CUDA内核。啊好吧。

看起来最接近使用带有现成ARM主板的GPU的人是@sahajsarup,在这个96Boards的直播流中,他演示了通过96Boards Oxalis硬件通过HDMI获得控制台输出。不过,这块木板的价格超过了400美元,所以它的价格范围很难与覆盆子圆周率相提并论!

在计算模块4发布之前,有几个人破解了VL805芯片,并通过外部提升管对PCIe总线进行了布线,其中最著名的是@Domipheus,他走得和我一样远,似乎也撞到了墙上。

此外,正如特利姆提到的那样,看起来在ROCKPro64的土地上也有类似的麻烦:

我不认为NVIDIA卡可以在ROCKPro64上工作,这是因为显卡需要很大的IO内存范围。

由于TL Lim是Pine64的创始人,我想说他的观点是相当可靠的。

每次我发布一个失败或猜测的故事,马上就会有一些后续的建议,如果我都试过了……。嗯,我再也做不成别的事了。

但有几件事确实很突出,当我有时间的时候,我可能会试一试:

如果GPU没有通过PI';自己的PCIe电路获得更多的电力,那么使用外部供电的Riser卡是否会有任何帮助。(我有一个Riser卡,但还没有电源适配器让它转起来)。

在树莓上试用Windows--我对它的效果不抱太高期望,但这至少是一个很好的借口,至少可以让它去兜风。

尝试查看是否有其他方法来解决IO栏空间限制。据我采访过的一些人说,他们已经让这些卡可以在其他ARM设备上使用,但他们总是对具体是哪种设备三缄其口(我猜可能是像AWS的Graviton这样的设备,他们可能不能详细讨论这一点?)。

测试稍新的卡,如AMD RADEON RX 550,它没有BIOS(使用UEFI),但总体架构较新,由amdgpu驱动程序支持。

无论如何,这是一次相当大的冒险,最后,尽管我没有让GPU从PI输出视频信号,但我确实学到了很多关于PCIE、Linux内核和Raspberry PI计算模块4的知识。

请务必查看我的Raspberry PI Compute Module 4!上的视频GPU,以及我记录了所有使用CM4:Raspberry PI PCIe设备兼容性数据库进行测试的PCIe卡的网站。