几种开源GPU驱动(NV/AMD/Intel)编译&架构分析

这篇具有很好参考价值的文章主要介绍了几种开源GPU驱动(NV/AMD/Intel)编译&架构分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2022年5月,社区终于等到了这一天,NVIDIA开源了他们的LINUX GPU 内核驱动, Linux 内核总设计师 Linus Torvalds 十年前说过的一句话,大概意思是英伟达是LINUX开发者遇到的硬件厂商中最麻烦的一个,说完这句话之后,祖师爷毫不客气的朝着镜头竖了中指并表达了对NVIDIA身体某部的亲切问候。关于祖师爷和NVIDIA那点恩怨咱不清楚,也没啥兴趣,不过单纯看开源这个行为还是喜闻乐见的。下面基于NVIDIA GPU驱动的开源代码在UBUNTU系统上建立编译和开发环境。

平台环境

PC装有NVIDIA GForce MX250显卡,是低端入门级的,不过用来跑跑CUDA,编译内核是足够了。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

开源驱动下载

代码托管在github上,连接为:


https://github.com/NVIDIA/open-gpu-kernel-modules.git
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

查看提交记录发现,驱动是从515.43.04版本开始开源,当前最新的版本为525.85.12.

编译

执行命令


make -j8

进行编译

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

编译结果为:


./kernel-open/nvidia-uvm.ko
./kernel-open/nvidia-drm.ko
./kernel-open/nvidia.ko
./kernel-open/nvidia-peermem.ko
./kernel-open/nvidia-modeset.ko
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

安装

执行如下命令进行安装


sudo insmod nvidia.ko
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

提示检测不到设备,开始不得其解,后面查阅开源仓库的README,才发现MX250GPU不再支持列表,所以也就没有办法使用自己编译的NVIDIA内核驱动驱动GPU了。

LICENSE

查看代码中的LICENSE声明,发现开源代码使用双 GPL/MIT 许可。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

而这个许可,是可以通过内核GPL兼容性检查的,不会污染内核。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

NVIDIA GPU 公版内核

虽然开源仓库的代码不支持MX250,UBUNTU系统安装后,在/usr/src目录下,存在另一个GPU显卡驱动目录,以我当前的环境为例,它是/usr/src/nvidia-525.78.01/

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

编译方法有两种:

  1. 在目录下直接 make,结果产生和上面一样的几个KO文件。

  1. 通过dkms编译:


$ sudo dkms build -m nvidia -v 525.78.01
$ sudo dkms install -m nvidia -v 525.78.01
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

安装驱动,可以看到,UBUNTU系统自带的NVIDIA驱动源码编译出来的KO是可以正常加载的,加载nvidia.ko后,系统中出现了/dev/nvidia和/dev/nvidiactl两个节点。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

安装nvidia-uvm.ko后,系统中又出现了两个新的节点/dev/nvidia-uvm-tools和/dev/nvidia-uvm

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

由于依赖关系,下一步需要首先安装nvidia-modeset.ko,否则,直接安装其它两个模块会报错,KMS没有产生新的设备节点。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

nvidia-drm.ko貌似也没有创建新的设备节点

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

开源策略

至于为何存在两套发布方式目前还不得而知。但是经过分析,发现UBUNTU系统自带的代码并非完全开源,协议也非上面使用的双GPL/MIT。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

并且存在两个闭源二进制库文件,后缀名为.o_binary的nv-kernel.o_binary和nv-modeset-kernel.o_binary

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

KMS:

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

编译时的连接过程

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

.o_binary中的符号甚至都进行了加密

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

并且安装KO后,/sys/module/nvidia/taint文件内容为POE,表示内核受到了非GPL协议的代码的污染。

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

A kernel problem occurred, but your kernel has been tainted (flags:POE). Explanation:
P - Proprietary module has been loaded.
O - Out-of-tree module has been loaded.
E - Unsigned module has been loaded.
Kernel maintainers are unable to diagnose tainted reports. Tainted modules: nvidia_drm,nvidia_modeset,nvidia_uvm,nvidia,vboxne tadp,vboxnetflt,vboxdrv. 

所以这样看起来,UBUNTU自带的驱动是闭源无疑的了,不符合开源协议。

另一些发现

后面查看开源代码的构建文件Makefile发现,关于.o_bianry的产生过程也存在于开源代码中,并且开源代码也可以产生.o_binary文件:

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档
gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

make kernel-open/nvidia/nv-kernel.o_binary

gpu驱动开发,NVIDIA,GPGPU,GPU,学习,python,人工智能,Powered by 金山文档

所以这样来看,在UBUNTU系统中没有开源的内容,在开源仓库中是能找到对应代码的,并且UBUNTU自带的驱动版本号为525.78.01,和开源仓库最新版非常接近。所以如果纠着闭源的部分不放可能有些吹毛求疵了,毕竟人家在开源仓库中是有开源的。除了部分显卡不支持外,开源仓库的代码没有什么毛病。

驱动源码分析

驱动中的名词解释

名词

意义

名词

意义

NOVC

NVIDIA Object Compiler

SM

Streaming Multi-processor

GR

Graphics Engine( 叫GR应该是为了避免和二维图形卡GE冲突)

SMC

Simultaneous Multiple Contexts

GSP

GPU System Processor

TDR

Timeout Detection and Recovery

RM

Resource Manager

UID

User Identifier.

RC

Robust Channel(error recovery)

NVDLA

NVIDIA Deep-Learning Accelerator

RMAPI

Interface between RM and KMD/UMD

SLI文章来源地址https://www.toymoban.com/news/detail-567163.html

到了这里,关于几种开源GPU驱动(NV/AMD/Intel)编译&架构分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【GPU驱动开发】- GPU架构流程

    不必害怕未知,无需恐惧犯错,做一个Creator! GPU(Graphics Processing Unit,图形处理单元)是一种专门用于处理图形和并行计算的处理器。GPU系统架构通常包括硬件和软件层面的组件。 总体流程: 1. 应用程序请求图形操作: 应用程序通过图形API(如OpenGL、Vulkan)发送图形操作

    2024年02月20日
    浏览(45)
  • 比较常见CPU的区别:Intel、ARM、AMD

    一、开发公司不同 1、Intel:是英特尔公司开发的中央处理器,有移动、台式、服务器三个系列。 2、ARM:是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。 3、AMD:由AMD公司生产的处理器。 二、技术不同 1、Intel:支持超线程术,同时快速运行多个计算应用,或为采

    2024年02月15日
    浏览(36)
  • 【架构】领域驱动设计(DDD)的几种典型架构介绍

    我们生活中都听说了DDD,也了解了DDD,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢? 各种服务 IAAS:基础设施服务,Infrastructure-as-a-service PAAS:平台服务,Platform-as-a-service SAAS:软件服务,Software-as-a-service 从图中已经可以很容易看出架构的演进过程,

    2024年02月11日
    浏览(37)
  • 漫画 | 芯片战争50年,Intel为什么干不掉AMD?

    1957年,晶体管之父、诺贝尔物理学奖获得者肖克利的实验室发生了一次“兵变”。 八位学者受不了肖克利的学阀式管理,决定自立门户。 “八叛徒”获得了仙童公司的投资,成立了仙童半导体,这“八叛徒”都是科学天才,他们率先使用硅来制作晶体管,还发明了集成电路

    2024年02月07日
    浏览(48)
  • Intel和AMD 与 x86,ARM,MIPS有什么区别?

    先说amd和intel amd和Intel这俩公司的渊源很深,早期时Intel先是自己搞了个x86架构,然后amd拿到了x86的授权也可以自己做x86了。接着intel向64位过渡的时候自己搞了个ia64(x64架构)但是因为和x86架构不兼容市场反应极差,amd率先搞了x86的64位兼容(32和64的混合架构)也就是后来的

    2024年02月15日
    浏览(76)
  • Stable-diffusion支持Intel和AMD显卡加速出图的操作方法

       英伟达的显卡有CUDA加持Stable diffusion出图很快,但我无奈家徒四壁,只有AMD老显卡苦苦支撑着本不富裕的家庭,但是生活还是继续不是。来吧!兄弟,看看老显卡能不能加速出图就完事了。    说明,我在MacOs上操作成功,同时我也加了windows上操作步骤 目录 第一步,安装

    2024年02月13日
    浏览(53)
  • FFmpeg 在Windows环境下 Intel ,Nvidia ,AMD 硬件加速编解码支持列表

    目录 前言 一. Intel 编解码硬件支持列表   1. Encode 编码硬件支持列表 (1)Intel 独显编码硬件支持列表 (2)第 11,12,13 代 Intel 处理器编码硬件支持列表 (3)第 10 代 Intel 处理器编码硬件支持列表 (4)第 9 代 Intel 处理器编码硬件支持列表 (5)第 5,6,7,8 代 Intel 处理器

    2024年02月03日
    浏览(50)
  • AMD GPU虚拟化

    在GPU虚拟化场景下Linux内核层一般需要二套driver,一套是是常规的VF driver(比如amdgpu.ko、amdkfd.ko), 另一套是PF driver(比如gim.ko)用来sriov的初始化(SR-IOV extended capability),vfid的配置等。其中PF driver运行于Host侧,而VF driver运行于虚拟化VM侧,gim.ko和amdkfd.ko/amdgpu.ko之间可以通过Mailbox和

    2024年02月06日
    浏览(41)
  • AMD GPU内存管理(1):概览

    参考内核代码:Linux-6.1/driver/gpu/drm/amd HMM 待更新...... dumb buffer create/map         在AMDGPU的Graphics业务中,用到了GEM(Graphics Execution Manager),它是用于内核内部管理图形缓冲区,用户空间进程可以通过GEM来创建、处理和销毁GPU中视频内容的内存对象。如下是AMD GPU注册得drm_driver回

    2023年04月17日
    浏览(35)
  • AMD GPU安装运行stable diffusion

    本文操作环境为Windows10/11+AMD AI绘画是一种利用人工智能技术进行绘画的方法。它可以通过机器学习算法来学习艺术家的风格,并生成类似于艺术家的作品。最近,AI绘画技术得到了很大的发展,许多公司和研究机构都在进行相关的研究和开发。例如,OpenAI最近推出了一个名为

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包