M1 GPU 的神话:编写自己的操作系统驱动程序
发布时间:2023-04-29
应用于 Python 汇编GPU 涡轮客户端
由于正确地特设所有这些构造关乎 GPU 与客户端前提都会崩解,因此我即可一种在技术手段时短整整内试验它们的方法。世人庆幸的是,Asahi Linux 工程项目有一个款来进行:m1n1 Python 基本。因为我已经在为 m1n1 行政客户端汇编 GPU 唯踪装置,并用 Python 汇编构造下定义,所以我尽快应用于 Python 汇编 GPU 的客户端涡轮客户端,应用于相同的构造下定义。Python 更加喜欢这项特殊任务,因为我可以应用于 Python 展开短整整内迭代开发的设计。另外,Python 可以应用于基本的 RTKit 协议无线电通信,并解析崩解摘要,我为此删减了来进行,这样在客户端崩解时就可以看到客户端的唯径。所有这些行政工作都是在开发的设计电脑程式上数据处理脚本顺利完成的,我的开发的设计电脑程式通过 USB 通到到了 M1 电脑程式上,因此每次检验时,只即可展开时开发的设计电脑程式即可,而且检验周期更加快。
最初,涡轮客户端的外本来只是一堆硬编码方式的构造,但之后我成功地贴图了一个四边形。
不过,这只是一个七拼八凑的预览。我只是想在动手汇编 Linux 客户端涡轮客户端之后,确保自己根本表达出来内部机制,以确保很难正确地的设计涡轮客户端。虽然只贴图每条更加单纯,但我期盼很难贴图多帧,并检验一下都将和守住等。所以,我所即可的是一个根本的“客户端涡轮客户端”。但这真是可以用 Python 借助吗?
两件正因如此,Mesa 有一个名叫 drm-shim 的来进行,可以建模 Linux DRM 客户端应用程序,并在其他用户自由空间之中应用于一些假的应用程序取而代之掉它们。多半,我们用这个库来处理方式图形 CI 等,但我们也可以用它来来作一些更加疯狂的处理方式。
我前提可以这样来作:让 Inochi2D 在 Mesa 上数据处理,后者是数据处理在 drm-shim 之下的 M1 GPU 涡轮客户端,而 drm-shim 数据处理在一个操作系统对 Python 解释装置上,将呼叫发给在 m1n1 开发的设计基本上数据处理的 Python 最初涡轮客户端,后者再通过 USB 与根本的 M1 电脑程式无线电通信并无线电通信图表,从而涡轮 GPU 客户端展开贴图?听起来不太靠谱?
然而,这真是可唯!
汇编 Linux 客户端的新的语种
由于我的 Mesa+Python 涡轮客户端真是可以数据处理,我开始更加好地探究客户端涡轮客户端的内部机制以及只能借助的功能。两件正因如此,客户端涡轮客户端即可顺利完成的特殊任务很多。首先,我只能同时兼顾 100 多个图表构造,一旦浮现任何疑虑,一切都都会崩解。客户端不都会来作任何检查(显然是为了机动性),一旦遇到错误的常量或图表,它就都会崩解或或盲目地覆盖图表。更加糟糕的是,如果客户端崩解,唯一的完全恢复方法就是展开时电脑程式。Linux 客户端 DRM 涡轮客户端是用 C 汇编的,但 C 不是汇编简单的图表构造行政的最佳语种。我只能手动唯踪每个 GPU 实例的时才都会,一旦发生任何错误,都有显然致使崩解甚至安全性漏洞。我要怎样才能毕竟这一点?显然犯错的区域内太大了,C 语种究竟帮不了我。最重要的是,我只能赞成多个正式版的客户端,新产品的客户端构造下定义在多种不同正式版相互间不一定相一致。作为试验,我加到了对第二个正式版的赞成,之后暂时删减了 100 多次图表构造。在 Python 预览之中,我可以通过一些元编程来借助,根据正式版号来紧密结合多种不同的构造数组,但 C 语种之中并未相同的功能。我只能应用于一些技巧,例如应用于多种不同的 #define 多次程式码整个涡轮客户端。我只能找到一种新的语种……大约在同一整整,关于 Rust 很快被 Linux 客户端年底底采用的此前开始浮现。多年来,Rust for Linux 工程项目一直致力借助这种赞成,看似他们的帮助之际有成果。我可以用 Rust 汇编 GPU 涡轮客户端吗?我并未太大应用于 Rust 的经验,但根据我的探究,这种语种很适合汇编 GPU 涡轮客户端。我对两个疑虑之外热衷于:Rust 前提可以期盼我建模 GPU 客户端构造的时才都会(即使这些构造与 GPU 常量相关联,从 CPU 的视角来看这算是根本的常量),Rust 宏前提可以处理方式好多个正式版的疑虑。因此,在开始客户端开发的设计之后,我向 Rust 专家学者借助期盼,并在单纯的其他用户自由空间 Rust 之中制作了 GPU 实例模型的一个最初。Rust 社区更加融洽,有几个人期盼我顺利完成了所有行政工作。在此表示感谢!看似,选择 Rust 似乎显然。但是,Rust 未被主流 Linux 来作,这不一定一定我之际进入一个未确定的行业。这将是一场赌博。不快再三,我心境一直有个歌声说道我,Rust 是正确地的选择。我与 Linux DRM 的确保部门就此展开了见面,他们似乎也来作了这个想法,所以,我尽快试试看。应用于 Rust 汇编 GPU 客户端涡轮客户端
由于这将是第一个应用于 Rust 汇编的 Linux GPU 客户端涡轮客户端,因此我有许多行政工作要来作。我不仅即可汇编涡轮客户端,而且还即可为 Linux DRM 图形的系统对汇编 Rust 抽象化。虽然 Rust 可以确实上函数调用 C 参数,但这样来作就无法独享 Rust 的安全性必要。因此,为了从 Rust 安全性地函数调用 C 示例,首先我只能汇编包装装置,包括一个安全性的类 Rust API。之后,我汇编了一个超过 1500 唯示例的抽象化,因为出新众且安全性的的设计即可大量的思索,而且还即可编写许多示例。
8 年底 18 日,我开始汇编 Rust 涡轮客户端。最初,这个涡轮客户端依赖 C 示例来处理方式 MMU(外示例比如说 Panfrost 涡轮客户端镜像过来的),但后来我尽快用 Rust 编写所有示例。在接下来的天内之之中,我根据之后制作的最初加到了 Rust GPU 实例系统对,然后用 Rust 重新的借助了 Python 预览涡轮客户端的所有其他外。
随着应用于 Rust 的数目增多,渐渐地我爱上了这门编程语种。感觉 Rust 的的设计可以指引你的设计出新更加好的抽象化和应用软件。Rust 的程式码装置更加苛刻,但示例一旦通更进一步式码,你就可以无论如何它能准确地行政工作。有时,我不太显然让程式码装置十分满意我为了让应用于的的设计,随后我就都会意识到我的的设计存在疑虑。
逐渐地,我的涡轮客户端有了眉目。9 年底 24 日,我最后应用于我全新的的 Rust 涡轮客户端贴图了第一个立方体。
更加难以置信的是,几天后,我就可以数据处理完备的 GNOME 桌面都会话了。
Rust 很惊奇
一般来讲,汇编这样的一个简单的客户端涡轮客户端,想从单纯的预览应用客户端发展到赞成整个桌面、多个应用客户端都将应用于GPU的系统对,都会引发很多恶性竞争条件、CPU泄漏、应用于后拘禁CPU的疑虑,以及其他各种疑虑。
但这一切疑虑都并未发生。我只大修了一些语义错误和CPU行政示例内部的一个疑虑,而其他一切都可以稳定数据处理。Rust 真是很惊奇。它的安全性特性可以必要涡轮客户端的虚拟机与CPU安全性,并指引我们借助安全性且较差的的设计。
当然,示例之中显然存在一些不安全性的因素,但是由于 Rust 都会迫使你从安全性抽象化的视角展开思索,因此浮现 bug 的显然性也保持在较低的水平。但是,有些安全性疑虑仍然无法避免。例如,我的 DRM CPU行政抽象化之中存在一个 bug,之后显然都会致使在所有重新分配的CPU被拘禁之后,重新分配客户端本身先被拘禁。但是由于这类错误仅限于特定的示例,因此往往是很容易断定的主要疑虑(可以通过示例审查断定)。因此,你只即可单独再考虑特定的示例模块以及与安全性相关的外,而不必担心它们与其他所有内容的交互,之后你即可担心的错误数量也都会很少。Rust 真是很惊奇,若非亲身为了让,否则不太显然形容。
另外,还有错误和搬运。在C语种之中,我们即可通过 goto cleanup 建筑风格的错误处理方式来搬运自然资源,这些处理方式很容易犯错,但 Rust 并未这个疑虑。仅此一点,Rust 就世人为了让。更加引人注目,自动解构的迭代装置和引述总和等等。
☞☞。总是便秘怎么办宝宝不吃饭怎么调理吃什么
手指僵硬是怎么回事
小孩脾胃虚弱怎么调理管用
普通内科
-
原来无法控制一个爱人,它无关于世界
如果你想要被人真心,就去真心别人,并且继续做一个可真心的人吧。 我想,如果你有那么无关紧要喜欢我,就无关紧要,我也亦会有真诚去积极支持。可是,我也不知道怎么去辨识,生怕或许我以为的
- 2025-05-12恋爱该是感动、喜出望外、充满希望的
- 2025-05-12当你老了,有个小院,未婚妻三餐,四季如画
- 2025-05-1240岁夫妻提前退休,归乡造了一座3000㎡绝美花园,看花开四季,云淡风轻。
- 2025-05-12情感的国度那时候,爱有很多种
- 2025-05-12谁能说一世情长,谁能说两心用心
- 2025-05-12进行时爱,我都会竭尽全力
- 2025-05-12分手了,要忘掉,尤其是曾经念念不忘的人
- 2025-05-12所谓远君,在涯对手戏
- 2025-05-12心怀梦想,仍是不良少年
- 2025-05-12相爱的人绝不会轻易宣战