在 MacOS 中使用 SYCL 1.2

Posted

技术标签:

【中文标题】在 MacOS 中使用 SYCL 1.2【英文标题】:Using SYCL 1.2 in MacOS 【发布时间】:2020-05-31 01:12:38 【问题描述】:

我想开始使用SYCL,但目前我发现需要安装ComputeCpp,它只支持Ubuntu、CentOS和Windows。在 MacOS Catalina 上使用 SYCL 有哪些替代方案?

【问题讨论】:

【参考方案1】:

总结

目前有多个 SYCL 实现支持 MacOS,尽管它们只支持 CPU 设备。

GPU 设备支持不可用,因为 Apple 不支持 Linux 或 Windows 上可用的后端依赖项。

详情

triSYCL 支持 MacOS 但仅支持 CPU 执行。我经常使用它。您可能需要切换 C++ 编译器,因为本机工具链可能不起作用。 https://github.com/triSYCL/triSYCL

hipSYCL 也支持 CPU 执行,应该可以在 MacOS 上运行。 Pull request #271 应该有详细信息。

我们做了一些工作来让英特尔 DPC++ 在 MacOS 上构建(请参阅 Issue #258),但目前还没有。 Issue #982 正在跟踪 MacOS 支持。

我经常在虚拟机内部的 Mac 笔记本电脑上使用所有适用于 Linux 的 SYCL 编译器,但这仍然是仅 CPU 执行。

可能性

在 MacOS 上获得对 SYCL 的 GPU 支持的最有希望的途径是转换为 Metal Shader Language (MSL),因为 Apple OpenCL 不支持 SPIR-V。这可以通过SPIRV-Cross 完成,但据我所知,没有人在任何 SYCL 编译器中实现它。

请注意,将内核从 SPIR-V 转换为 MSL 只是答案的一部分。另一个要求是对内核加载等的运行时支持。其中一些问题在https://github.com/bobpepin/opencl-osx 中很明显,尽管这只是一个问题陈述,而不是解决方案。

如果 Apple 支持 CUDA(不太可能,基于 https://gizmodo.com/apple-and-nvidia-are-over-1840015246),那么 hipSYCL 或 DPC++ 的 PTX 后端可能会工作,但我不知道在这些方面对支持(ed ) CUDA。

【讨论】:

非常感谢 Jeff 的回答,我决定使用 hipSYCL 并且似乎安装正确。但是,在编译测试时,我收到有关数学函数的错误消息,例如/usr/local/bin/../include/CL/../hipSYCL/sycl/math.hpp:284:63: 错误:使用未声明的标识符'__cosf' HIPSYCL_DEFINE_FAST_SINGLE_PRECISION_FUNCTION(cos, sycl::cos, __cosf);有什么已知的修复方法吗? 创建一个 GitHub 问题。但它可能已经修复了。查看该错误消息的现有问题。【参考方案2】:

ComputeCpp 是几个 SYCL 实现之一,完整列表是 here。

目前没有任何实现支持 macOS,这主要是因为 Apple 计划放弃对 OpenCL 的支持,只提供对 Metal 作为其硬件接口的支持。但是,您可以使用 Linux 双重引导您的 Apple 机器,并使用它来开发任何 SYCL 实现(包括 ComputeCpp)。

【讨论】:

以上是关于在 MacOS 中使用 SYCL 1.2的主要内容,如果未能解决你的问题,请参考以下文章

在 SYCL 中使用障碍

在 SYCL 中使用障碍

在 SYCL 中使用一个缓冲区还是多个缓冲区更有效?

在 SYCL 中使用一个缓冲区还是多个缓冲区更有效?

如何从 SYCL 内核中提取控制流?

如何从 SYCL 内核中提取控制流?