NVIDIA 全面转向开源 GPU 内核模块 - V2EX
jjxtrotter

NVIDIA 全面转向开源 GPU 内核模块

  •  
  •   jjxtrotter Jul 19, 2024 via iPhone 2513 views
    This topic created in 668 days ago, the information mentioned may be changed or developed.
    source: https://developer.nvidia.com/zh-cn/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/

    以后 Apple silicon 电脑有没有可能连上 Nvidia 显卡?

    Mac Pro 的 pcie 接口终于能有点用了
    6 replies    2024-07-20 11:23:17 +08:00
    skrbug
        1
    skrbug  
       Jul 19, 2024
    我对 Nvidia 驱动一直比较迷惑,ubuntu 里面安装的驱动时候看到过其他的版本 例如 nouveau

    有没有大佬科普一下,内核模块和驱动有何区别,以及这个决定能带来什么影响
    skrbug
        2
    skrbug  
       Jul 19, 2024
    驱动应该还是闭源的吧?
    simple2025
        3
    simple2025  
       Jul 19, 2024
    太阳从西边出来了吗?
    secondwtq
        4
    secondwtq  
       Jul 20, 2024   4
    这个模块两年前就发布了(并且更早之前似乎就有 Terga 的开源模块),那时候说是测试版,我也用了一段时间,这次的新闻其实只是官方告诉你开源版本已经达到生产要求了,并且安装驱动时默认会使用开源版本,冷饭再炒一遍而已。

    在所有硬件的驱动中,GPU 驱动应该是 Top2 复杂的,为什么是 Top2 ?因为它有一个强力对手就是 CPU 的驱动,有些人又叫它操作系统。因为从体系结构上 GPU 是 CPU 的从属,GPU 驱动也必须放在 CPU 驱动,啊不操作系统的框架中。NVIDIA 仅仅开源了其中的内核模块部分,在 GPU 驱动开发圈中叫 KMD ( Kernel Mode Driver ),但是需要完整的 GPU 功能,还需要结合相应的 UMD ( User Mode Driver )。KMD 一般是以类似内核模块的形式出现( Windows 上貌似是 .sys ),而 UMD 一般是一些动态库。

    一般来说 KMD 处理一些和硬件直接相关的东西,所以你加载了开源 KMD ,那你能有个正常的 tty 。但是应用在使用 GPU 时使用的是 Direct3D ,OpenGL ,Vulkan ,CUDA 或 OpenCL 等接口,这些接口实际是在 UMD 的动态库里实现的。没有 UMD 无法使用这些接口。所以 UMD 可以自然分为一些模块,不同的接口调用不同的模块。软件上的文章很多也是在 UMD 上做。比如 555 的开源 KMD ,编译之后不到 20MB ,但是使用 OpenGL 时需要载入的 UMD 库比如 libnvidia-eglcore.solibnvidia-gpucomp.so 等加起来有 70 多 MB ,如果用 Vulkan 或者 CUDA 等还要载入其他的库。所以没有 UMD ,你拿到的驱动真的只能跑个 tty 。

    实际上现代 GPU 驱动的用户态部分除了传统意义的 UMD 之外,还有很多附加的部分,比如视频加速支持,GPU 状态监控和管理,超分辨率方案实现,虚拟化,GPGPU 相关库等等。

    在另一个方向,上面说的 UMD 是 KMD 的上层,传统上来讲,KMD 的下层就是硬件,不过一般对于复杂硬件,硬件中的很多行为是由 Firmware 控制的,也就是说实际上在内核/驱动和硬件之间,存在一个 Firmware 层。NVIDIA 在 Turing 架构中引入了 GSP ,即 GPU 中集成的一颗 RISC-V 控制器,开源 KMD 只支持有 GSP 的 GPU ,也就是说钉子户喜闻乐见的 1066 是不支持的,炼丹玩家喜闻乐见的 P100 是不支持的。一部分原来闭源 KMD 的东西可能是挪到了 GSP Firmware 中去,这个 Firmware 也有二三十 M 。对比来看,闭源版的 KMD 有 90 多 M ,应该是还包含了很多老 GPU 的兼容代码。
    一般来说,虽然 OS 、驱动这些传统基础软件范畴的东西有很多开源的,但是 RTL 、Firmware 这些算是硬件范畴,基本都是闭源的。

    也就是说驱动中很多东西已经向上推给了 UMD ,又把一些东西向下扔到了 Firmware 里面,那中间的 KMD 开源出来方便一下使用也影响不大。但是总的来说 NV 的硬件确实是一点点在向更开放的方向走,只是节奏不太稳定。比如之前发布了一部分的资料( https://github.com/nvidia/open-gpu-doc ),之后官方又放开游戏卡的 Passthrough 支持,这两年估计是忙着搞 AI 没什么动作。

    AMD 会发布 GPU 的 ISA 文档,不过不知道是我没找对地方还是怎么的,没有找到太多其他方面的文档,不过好在 AMD 有不错的开源驱动。最近倒是有个故事,tinygrad 的开发者 George Hotz 在做 AI 硬件解决方案,他要基于 7900XTX 搞一个 AI 机器,然后在推上抱怨这东西很不稳定,要求 AMD 开源 GPU 中调度器等部分的 Firmware 然后他们自己来改,然后苏妈还回复说可以考虑。于是过了段时间 AMD 真的发布了 MES 的一些文档(并且源码也在走流程)。于是 AMD 的网站上出现了很奇怪的景象:有比较全的 ISA 文档,然后其他的只有一个 MES 文档孤独地放在那里:gpuopen.com/amd-gpu-architecture-programming-documentation AMD GPU architecture programming documentation - AMD GPUOpen

    相对来说 Intel 的文档看起来是最全的,Intel 发布的文档叫做 PRM ,包含了许多方面:
    www.intel.com/content/www/us/en/docs/graphics-for-linux/developer-reference/1-0/overview.html Programmer's Reference Manuals 不过有一点暂时可能不太清楚的是上面提到的 AMD 所发布的 MES 信息是 Firmware 级别的,Intel 这个既然名字说是给 Programmer 的,那么可能主要是 Driver 级别的。

    今天担任娱乐任务的是高通(什么你说 CrowdStrike ? technically 那是昨天),高通说要对 X Elite 提供 Linux 支持,但是社区发现上面的 GPU 需要一个 OEM 签名的 Firmware ,于是默默地把它默认禁用掉了:
    www.phoronix.com/news/Linux-Disabling-X-Elite-GPU Linux Patch To Disable The Snapdragon X Elite "X1E80100" GPU By Default - Phoronix

    至于楼主的梦想嘛,你要知道这是个一个巴掌拍不响的问题。GPU 驱动是个很小的圈子,公开的东西大部分又是 Linux 的,其次是 Windows 的,Mac 的基本没人搞。所以等到条件成熟时,楼主可能对火星殖民更感兴趣。

    另见 v2ex.com/t/910242#r_12602055
    jjxtrotter
        5
    jjxtrotter  
    OP
       Jul 20, 2024 via iPhone
    @secondwtq 感谢科普
    skrbug
        6
    skrbug  
       Jul 20, 2024
    @secondwtq 学到了,谢谢科普
    About     Help     Advertise     Blog     API     FAQ     Solana     2915 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 13:52 PVG 21:52 LAX 06:52 JFK 09:52
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86