为不同的实现编写 SYCL 代码

Writing SYCL code for different implementations

SYCL 有各种不同的实现,如 DPC++/oneAPI、ComputeCpp、hipSYCL、triSYCL。是否可以编写相同的 SYCL 代码并使用所有不同的实现进行编译?

如果不是,那会有多少不同?

谢谢

SYCL 是一个开放标准,因此这意味着任何 SYCL 实现都需要遵循规范。

因此,理论上,如果您编写 SYCL 代码,它可以被编译并 运行 使用任何 SYCL 实现而无需修改。

然而,对此有一些注意事项。

SYCL 实现尚不存在统一的构建系统,有些使用 CMake,但可能需要在此级别进行修改才能编译代码文件。

有些尚未实现整个规范,因此可能缺少某些功能。不过,这通常不是问题,个别实施可能会显示支持和不支持的内容。这是因为 SYCL 2020 最近才获得批准,编译器仍在实现一些功能。

撇开这些问题不谈,您应该非常有信心您的 SYCL 代码将编译并 运行 使用 ComputeCpp、hipSYCL 和 DPC++。例如,the SYCL Academy exercises 可以针对这些编译器中的任何一个进行编译,只需进行一些属于我上面列出的两个类别的小改动。