了解AMD GPU中的oneAPI和SYCL

26
我是一名GPGPU开发人员,一直使用CUDA完成工作。最近我在家里配置了一台AMD GPU并且阅读了SYCL和oneAPI的相关资料,但我不确定我是否理解了每个技术的含义以及它们如何相互补充。如果我理解得正确的话,SYCL是由Khronos开发的标准,允许使用C++创建并行软件。它需要一个由SYCL实现提供的自定义工具链,并且有几种不同的实现方式。
另一方面,oneAPI是SYCL的一种实现,具有一些额外的扩展(这些扩展可能在未来被添加到SYCL标准中)和一些常见的并行库,对吗?
由于我有一张AMD GPU,我想要将其用于进行一些GPGPU计算,但整个生态系统有点令人生畏。我们有mesa驱动程序、AMD驱动程序、不同的OpenCL实现、HIP等等...这一切要如何协同工作呢?

同舟共济。还要看看Vulkan,它应该有一个C++11内存模型,但是工作起来相当困难。https://www.khronos.org/blog/vulkan-has-just-become-the-worlds-first-graphics-api-with-a-formal-memory-model.-so-what-is-a-memory-model-and-why-should-i-care - Jan
2个回答

27

SYCL - 这是来自Khronos的一个开放标准,有效地定义了一个接口,使开发人员可以编写针对包括GPU和其他高性能处理器在内的异构架构的程序。

有几个SYCL实现(在此处列出),美妙之处在于您可以使用SYCL编写代码,并且它将在不同的编译器实现中工作,这意味着您可以针对广泛的处理器进行目标设置。 这个图表非常有用,可以显示这些处理器及其支持的硬件。每个实现将指导您需要哪些驱动程序。

oneAPI - 这是由英特尔领导的一个倡议,其中包括DPC++,其中之一就是SYCL的实现。您可以使用它与英特尔处理器配合使用,还有支持Nvidia GPU和AMD GPUS的实验性支持。

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

最终所有这些都只使用SYCL代码,并且一些实现已经添加了特定的扩展,这些扩展将要么出现在SYCL规范的下一个版本中,要么是为特定硬件上的特定功能而设计的。


6
最近,英特尔赞助hipSYCL工作,以增加与DPC++(例如SYCL 2020 USM)的兼容性。 https://www.urz.uni-heidelberg.de/en/2020-09-29-oneapi-coe-urz - Jeff Hammond

-5
您可以从英特尔下载One API安装程序。它会引导您进行安装,例如,它会告诉您需要为集成显卡安装计算驱动程序。它还可以安装使用sycl.dll的Intel oneAPI DPC++编译器,这是一个比较小的库。我不知道SYCL是一个标准,我只是在使用PyTorch项目中的C++ API中使用了DLL。有趣的是您提到了AMD和所有这些英特尔软件。据我所知,MESA是NVIDIA卡的开源变体。

感谢您的努力。然而,我认为这根本没有回答我的任何问题... - jjcasmar
1
但是OneAPI来自英特尔。Mesa来自Nouveau。SYCL和OpenCL来自Khronos。你问它们如何相互关联?我不是说这就是答案,但我没有足够的声望来评论你的问题。然而,如果你使用Intel的OneAPI安装程序,你会更深入地理解事情。 - Julius Baer
1
HIP是AMD的CUDA(或者起初是这样的,也许现在只是将CUDA代码移植到AMD)。OpenCL类似于OpenGL,但用于GPGPU而不是图形。它已被不同硬件供应商缓慢实现。我认为Intel正在放弃OpenCL,用OneAPI取代它。我认为苹果和英伟达已经落后于支持OpenCL 2。他们各自开发了自己的(CUDA,Metal)还有Vulkan。 - Julius Baer
1
你的问题可能会被自认为维护纯净社区的人所投反对票。他们不希望这里出现这种有趣的问题。 - Julius Baer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接