APP下载

微软开始在WSL 2环境中的Linux支援DirectX

消息来源:baojiabao.com 作者: 发布时间:2026-08-28

报价宝综合消息微软开始在WSL 2环境中的Linux支援DirectX

微软在//build 2020大会上宣布,适用于Linux的Windows子系统WSL 2(Windows Subsystem for Linux 2)开始支援GPU硬件加速,简单来说,微软发布了一个虚拟GPU驱动程式,将虚拟化的GPU暴露给Windows主机上,在虚拟机器中执行的使用者模式应用程序,而这样可以让WSL 2环境中的Linux虚拟机器,能够和Windows主机共享GPU,实现GPU硬件加速。

WSL是一个可以在Windows上执行Linux应用程序的环境,因此当开发者要开发在云中部署的Linux容器应用程序,则可以先在Windows上进行本地开发和测试,而为了要支援更广泛的应用,现在微软让Linux应用程序和工具,也可以在WSL中获得GPU加速。

微软在过去一段时间,发展了客户端GPU虚拟化技术,而这项技术现在已经整合到了Windows显示驱动程式模型(WDDM)中,所有WDDM v2.5以及更高版本的驱动程式,都原生支援GPU虚拟化。微软提到,这项技术被称为WDDM GPU半虚拟化(GPU Paravirtualization),已经是Windows基础的一部分,被用在Windows Defender、Application Guard、Windows Sandbox和Hololens 2模拟器等使用案例,不过目前这项技术还仅限于Windows访客使用,像是在Windows中执行的虚拟机器以及容器。

将GPU加速带入WSL 2,是透过WDDM将GPU半虚拟化扩展到Linux访客,而这仰赖新的Linux核心驱动程式实作,该驱动程式利用半虚拟化协定将GPU暴露给用户模式的Linux,GPU投射抽象遵循WDDM GPU抽象模型,并将针对该抽象所建构的API和驱动程式,移植到Linux环境中使用。

Dxgkrnl是一个全新的Linux核心驱动程式,会将/dev/dxg装置暴露给使用者模式Linux,微软提到,当主机上有多个GPU,则所有GPU都会提供给Linux环境使用,在Linux环境中执行的应用程序,其对GPU存取权限和在Windows上的主机应用程序相同,Linux和Windows之间没有资源分区,也没有对Linux应用程序设下限制,资源共享是完全动态的,取决于当下哪个程式需要什么资源。微软强调,共享GPU的两个Windows应用程序,和共享GPU的Linux和Windows应用程序没有差别,当只有Linux应用程序需要GPU,那该应用程序将占用所有GPU资源。

由于要在Linux投射相容WDDM的抽象,因此微软便重新编译图形API DirectX,使其可以在WSL环境中的Linux上运作,微软提到,这个是真正完整的D3D12 API,并非模拟或是重新实作,libd3d12.so是使用Windows上d3d12.dll相同的程式码编译而来,在不考虑虚拟化造成的影响,其提供与Windows相同等级的功能和效能。唯一例外是Present(),D3D12 API目前可用于屏幕外渲染和运算,但尚未支援Swapchain将画素直接复制到屏幕上。

除此之外,微软还移植了机器学习API DirectML,现在DirectML可在WSL中的Linux上运作,因此开发者将可以在Linux执行高效能机器学习训练和预测功能。DirectML建立在D3D12 API之上,提供最佳化的机器学习工作负载运算集合,为了简化开发者使用DirectML的工作,微软还发布整合DirectML后端的TensorFlow预览套件,加速初学者上手。

而且WSL也将会支援Nvidia CUDA加速功能,CUDA是跨平台API,可以借由Windows上的WDDM GPU抽象,或Linux上的Nvidia GPU抽象和GPU沟通,微软和Nvidia合作建置Linux的CUDA版本,该版本针对/dev/dxg暴露的WDDM抽象,微软提到,这是libcuda.so的完整功能版本,可以用来加速cuDNN、cuBLAS、TensorRT等CUDA-X函式库。

另外,WSL还支援Nvidia的Docker工具,让原本在云端中执行的容器化GPU工作负载,也可以搬到WSL上执行,微软提到,他们不会在使用者电脑上预装Nvidia Docker工具,而是跟目前一样,让用户选择安装软件套件包,只是新的软件套件相容WSL并且提供硬件加速功能。

2020-05-20 16:49:00

相关文章