了解AMD GPU中的oneAPI和SYCL

问题描述

我是GPGPU开发人员,我已经使用CUDA完成了所有工作。最近,我已经为家庭设置购买了AMD GPU,并且我一直在阅读有关SYCL和oneAPI的信息,但是我不确定我是否了解其中的每一个,以及它们的互补性。如果我理解正确,则SYCL是Khronos开发的标准,允许使用C ++创建并行软件。它需要由SYCL实现提供的自定义工具链,并且存在几种实现。

另一方面,oneAPI是SYCL的实现,具有一些额外的扩展(将来可能会添加到SYCL标准中)和一些具有典型并行库的库,对吗?

由于我拥有AMD GPU,所以我想用它来做一些GPGPU,但是这个生态系统有点吓人。我们有台面驱动程序,AMD驱动程序,不同的openCL实现,HIP ...这一切应该如何组合在一起?

解决方法

SYCL-这是Khronos的开放标准,有效地定义了一个接口,供开发人员对包括GPU和其他高性能处理器的异构体系结构进行编程。 有几种SYCL实现(listed here),其优点是您可以使用SYCL编写代码,并且它可以在不同的编译器实现中工作,这意味着您可以针对多种处理器。 This diagram在显示这些内容以及它们支持的硬件方面非常有用。每个实现都会指导您有关所需的驱动程序。

oneAPI-这是由Intel领导的一项计划,除其他外,其中包括SYCL实现之一DPC++。您可以将其与Intel处理器一起使用,并且对Nvidia GPU具有实验性支持。

如果您拥有AMD硬件,则建议您探索hipSYCL实现,该实现使用hip将并行指令卸载到AMD处理器。

最终,所有这些都仅使用SYCL代码,并且某些实现添加了特定的扩展,这些扩展将最终出现在SYCL规范的下一版本中,或者被设计用于特定硬件上的特定功能。

,

您可以从Intel下载One API安装程序。它将指导您。例如,它将告诉您需要集成图形卡的计算驱动程序。并且它可以安装使用sycl.dll(一个很小的库)的Intel oneAPI DPC ++编译器。我不知道SYCL是一个标准,我只是在带有C ++ API的PyTorch项目中使用DLL。有趣的是,您如何通过所有这些Intell软件提及AMD。 MESA是适用于NVIDIA卡afaik的开源变体。