为不同的实现编写 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 可以针对这些编译器中的任何一个进行编译,只需进行一些属于我上面列出的两个类别的小改动。
SYCL 有各种不同的实现,如 DPC++/oneAPI、ComputeCpp、hipSYCL、triSYCL。是否可以编写相同的 SYCL 代码并使用所有不同的实现进行编译?
如果不是,那会有多少不同?
谢谢
SYCL 是一个开放标准,因此这意味着任何 SYCL 实现都需要遵循规范。
因此,理论上,如果您编写 SYCL 代码,它可以被编译并 运行 使用任何 SYCL 实现而无需修改。
然而,对此有一些注意事项。
SYCL 实现尚不存在统一的构建系统,有些使用 CMake,但可能需要在此级别进行修改才能编译代码文件。
有些尚未实现整个规范,因此可能缺少某些功能。不过,这通常不是问题,个别实施可能会显示支持和不支持的内容。这是因为 SYCL 2020 最近才获得批准,编译器仍在实现一些功能。
撇开这些问题不谈,您应该非常有信心您的 SYCL 代码将编译并 运行 使用 ComputeCpp、hipSYCL 和 DPC++。例如,the SYCL Academy exercises 可以针对这些编译器中的任何一个进行编译,只需进行一些属于我上面列出的两个类别的小改动。