Zluda:英特尔GPU上的CUDA

2021-02-27 18:00:11

ZLUDA是Intel GPU上CUDA的直接替代产品。 ZLUDA允许使用性能接近自然的Intel GPU运行未经修改的CUDA应用程序(详情请参见下文)。它可与当前集成的英特尔UHD GPU配合使用,并将与未来的Intel Xe GPU配合使用

ZLUDA性能已通过Intel UHD 630上的GeekBench 5.2.3进行了测量。一项测量是使用OpenCL完成的,另一项测量是使用CUDA进行的,并且在ZLUDA的帮助下,Intel GPU伪装为(相对较慢的)NVIDIA GPU。两种测量都使用相同的GPU。

以下性能已归一化为OpenCL性能。 110%意味着ZLUDA实现的CUDA在Intel UHD 630上快10%。

为什么ZLUDA在某些基准测试中更快?尚未精确指出这是一件事还是另一件事,但它可能是结合在一起的:ZLUDA使用Level 0,这通常是比OpenCL更底层的高性能API。

结合上一点,当前ZLUDA不支持异步执行。这给我们一个像GeekBench这样的基准带来的不公平的优势。 GeekBench专门使用CUDA同步API

NVIDIA硬件和Intel硬件都提供了一组GPU指令,但是这些指令不会通过OpenCL公开。我们正在将NVIDIA GPU优化的代码与更通用的OpenCL代码进行比较。幸运的巧合是(这归功于底层的Intel Graphics Compiler)此代码在Intel GPU上也能很好地工作

为什么在Canny和Horizo​​n Detection中OpenCL更快? CUDA基准测试的作者使用了CUDA函数atomicInc和atomicDec,它们在NVIDIA卡上具有直接的硬件支持,但在Intel卡上没有硬件支持。它们必须在软件中进行仿真,从而限制了性能

为什么ZLUDA在其余基准测试中会变慢?原因不明。最有可能的是,在某些测试中我们使用次优的NVIDIA GPU代码进行编译,而在另一些测试中,ZLUDA本身正在发出次优的Intel GPU代码。例如,在PR#22之前,SFFT甚至更慢

ZLUDA是CUDA的替代产品吗?是的,但是某些应用程序使用CUDA的方式使其与ZLUDA不兼容

项目的状态如何?该项目是概念证明。目前,唯一适用的功能是Geekbench。这是令人难以置信的越野车和不完整的。你不应该依赖它做任何严重的事情

表现如何?性能可能接近于类似编写的OpenCL代码的性能(请参阅上一节中的GeekBench结果)。 NVIDIA GPU和Intel GPU具有不同的体系结构和功能集。因此,必须在ZLUDA中模拟某些NVIDIA功能,但会降低性能。此外,ZLUDA的性能将始终低于专门针对Intel GPU优化的代码的性能

它与AMD HIP或Intel DPC ++兼容性工具包有何不同?两者都是移植工具包,需要程序员努力将应用程序移植到有问题的API。使用ZLUDA,现有应用程序可以正常工作。在Intel GPU上(如果幸运的话,ZLUDA支持CUDA的特定子集)

支持哪些英特尔GPU? Intel Level 9支持的Intel Gen9和更高版本(Skylake和更高版本)

警告:这是一个非常不完整的概念证明。它可能无法与您的应用程序一起使用。 ZLUDA当前仅适用于使用CUDA驱动程序API或静态链接的CUDA运行时API的应用程序-完全不支持动态链接的CUDA运行时API

您应该按照此处所述安装最新的运行时驱动程序包:https://dgpu-docs.intel.com/installation-guides/index.html。 像这样运行您的应用程序: 您应该按照此处所述安装最新的运行时开发人员驱动程序软件包:https://dgpu-docs.intel.com/installation-guides/index.html。 另外,您应该安装了ocl-icd-opencl-dev(或等效版本)。 如果您是在Linux上构建,则还必须在ZLUDA构建完成后符号链接(或重命名)ZLUDA输出二进制文件: 如果要开发ZLUDA本身,请阅读CONTRIBUTING.md,其中包含有关如何建立依赖关系和运行测试的说明。 该软件根据Apache 2.0许可证或MIT许可证获得了双重许可。 有关详细信息,请参见LICENSE-APACHE或LICENSE-MIT